This page covers how to read Runnit data: projects, users, tasks, clients,
briefs, jobs, schedules, costs, and more.
For the current user’s actionable work, call call_public_api with
GET /tasks/my. Draft-project assignments stay out of that list and its totals.
list_tasks and list_schedule_entries include planning work so you can review
it before activation. See Tasks API and
Scheduling API.
Connect over the MCP server with a user-scoped token,
then call the read tools. Every tool is:
Organisation-scoped to the connected user: results reflect that user’s
permissions. A forbidden or empty result is expected when the user lacks
access; it is not an error to retry.
Read-only and returns safe fields only: never passwords, tokens,
embeddings, or rate-card internals.
Authentication follows the two modes in MCP Tools:
bearer-header clients omit apiKey; payload-based workflows pass the
user-scoped token as apiKey on every call.
List projects in the organisation. Pass jobNumber to find one project by its exact job number (case-insensitive, includes archived projects), or search to match part of a project name or job number.
status, jobNumber, search, includeArchived, limit (default 100, max 500)
get_project
Get one project by id.
id
list_project_members
Members assigned to a project.
projectId, limit (default 200, max 500)
list_milestones
Project milestones.
projectId, limit (default 200, max 1000)
list_project_history
A project’s activity/changelog feed.
projectId, taskId, categories[], eventTypes[], limit (default 100, max 200)
list_project_comments
All discussion on a project, newest first: the project’s own chat thread plus the comments on its tasks. Each row has source (project or task), body, authorType, user, createdAt, and task details on task rows.
projectId, scope (all, project, tasks), limit (default 100, max 500)
List project tasks across the organisation in one call. Assignment, estimate, and planned dates can be null. Use scheduled: false for backlog work without a complete planned window, overdue: true for open tasks past their due date (each task then reports daysOverdue), compact: true for a short record per task, and groupBy: "assignee" to get one group per person with taskCount and overdueCount. Every task includes assigneeName.
Per-project task totals in one call (avoids per-project loops).
projectIds[]
list_task_comments
Comments for a task, or every comment across a project. Comments are the entries in each task’s chat thread. For a project’s whole discussion, including its own project-level chat, use list_project_comments.
one of taskId / projectId, limit (default 100, max 500)
list_table_columns
The custom task-table columns a project sees, including columns inherited from its client or the organisation. Task values for these columns sit in task metadata under tableValues, keyed by column key. Also reports defaultColumns and defaultColumnsSource: the default visible column set configured for the project’s table (from its kanban board, else the organisation setting), or null.
Client organisations you have a relationship with. With no status filter (or active), the first entry is the virtual internal client (id: "internal", isInternal: true): your own organisation, used for internal work.
relationshipStatus, limit (default 200, max 1000)
get_client
Get one client organisation. Your own organisation’s id resolves to the internal client (isInternal: true).
clientOrganizationId
list_client_team
The client’s default staffing pool for AI and initial planning. When hasRestrictions is true, start with the returned members. An existing project’s owner and active project members remain eligible for that project, including project-only additions.
Get one job by id: status, progress, and, for planning jobs, the projectId once the draft project exists. Use it to poll a job started by start_brief_planning or create_from_capture. The job’s error detail is returned only to the person who started it.
Planned task time slots, including tentative and held capacity. Each row includes projectStatus and bookingState. Personal calendars include only confirmed entries outside draft. Returns exact totalCount, totalMinutes, totalHours and a truncated flag for the whole filtered set, plus server-side groups when you pass groupBy.
Real free capacity for users over a date range, evaluated against their existing bookings across all projects (8 working hours per weekday). Organisation closure dates and fully blocked days are excluded from free capacity, partially blocked days subtract their blocked hours, and each user’s blocked dates in the window are reported: fully blocked days as blockedDates and partial days as partialBlockedDates ({date, hoursUnavailable, remainingHours}). Reports availability status, scheduled hours, free hours vs requiredHours, and conflicts per user.
startDate, endDate (both YYYY-MM-DD, required), requiredHours, userIds, projectId (evaluates that project’s team; omit both for the whole organisation)
get_blocked_dates
Date ranges users have blocked out as unavailable (leave, appointments). Each row carries hoursUnavailable: null means the whole day is blocked and the scheduler never books work on it; a number means only that many hours per day are unavailable. Defaults to the requesting user; reading other users’ blocks requires schedule view access. Free-text reasons are returned only for the requesting user’s own blocks unless the caller has schedule management access.
userIds[], startDate, endDate (window, both YYYY-MM-DD, optional)
get_work_pattern
How many hours a person works on each weekday, plus the history of earlier patterns and the organisation’s default day. Returns null when nobody has set a pattern, which means every weekday uses the organisation default. Defaults to the requesting user; reading another person’s requires schedule view access.
userId (optional)
list_time_entries
Logged time: the source for hours completed/timesheets. Returns exact totalCount, totalMinutes, totalHours and a truncated flag for the whole filtered set, plus server-side groups when you pass groupBy.
List or search files, read a known file, or extract document text. Direct private-file reads need the connected user’s source access; listings and search omit private files. See MCP Tools.
varies
get_indexing_health
Whether the files the caller can search are actually indexed: counts by status and index quality (content vs metadata only), scanned documents awaiting OCR, and the last background sweep. Organisation-wide, or one collection.
If you’d rather call HTTP endpoints directly, the public
REST API at /api/v1 covers projects, tasks,
master projects, organisations, clients, users, reports, schedules, closure
and blocked dates, collections, assets, permissions, and search,
authenticated with the same rnk_ API keys that work here.
A few specialised capabilities also have their own documented endpoints: