API Reference
This reference is drafted from the MCP tool set as a starting point. Confirm exact request and response shapes against the live API before building against it.
All requests are authenticated with your API key in the X-API-KEY header. Base URL: https://trackerboot.com/api/v1.
Projects
List projects
GET /projects
Returns the projects your API key can access.
{
"projects": [
{ "id": "proj_123", "name": "Mobile App" }
]
}
List project members
GET /projects/{projectId}/members
{
"members": [
{ "id": "user_123", "name": "Jamie Lee", "email": "jamie@example.com" }
]
}
Get the current iteration
GET /projects/{projectId}/iterations/current
Returns the active iteration, including its stories and cycle time details.
{
"iteration": {
"id": "iter_1",
"startDate": "2026-07-14",
"endDate": "2026-07-27",
"stories": [
{
"id": "story_1",
"title": "Add password reset flow",
"status": "in_progress",
"cycleTime": { "startedAt": "2026-07-15T09:00:00Z" }
}
]
}
}
Stories
Search stories
GET /projects/{projectId}/stories
| Query param | Type | Required | Description |
|---|---|---|---|
query | string | No | Free-text search across title and description |
labels | string[] | No | Filter by one or more labels |
status | string | No | Filter by status: to_do, in_progress, done |
{
"stories": [
{ "id": "story_1", "title": "Add password reset flow", "status": "in_progress" }
]
}
Get a story
GET /stories/{storyId}
{
"id": "story_1",
"title": "Add password reset flow",
"description": "Let users reset their password from the login screen.",
"status": "in_progress",
"estimate": 3,
"owners": ["user_123"],
"labels": ["auth"]
}
Create a story
POST /projects/{projectId}/stories
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Story title |
description | string | No | Story description |
storyType | string | No | feature, bug, or chore |
Returns the created story, in the same shape as Get a story.
Update a story
PATCH /stories/{storyId}
Send only the fields you want to change:
| Field | Type | Description |
|---|---|---|
title | string | New title |
description | string | New description |
status | string | to_do, in_progress, or done |
estimate | number | Effort estimate |
Returns the updated story.
Manage story owners
PATCH /stories/{storyId}/owners
| Field | Type | Description |
|---|---|---|
addOwnerIds | string[] | User IDs to add as owners |
removeOwnerIds | string[] | User IDs to remove as owners |
Returns the updated story, including its current owners list.
Manage story labels
POST /stories/{storyId}/labels adds a label. DELETE /stories/{storyId}/labels/{label} removes one.
| Field | Type | Description |
|---|---|---|
label | string | Label name (request body for the POST request) |
{ "id": "label_1", "name": "auth", "count": 4 }
Tasks
List tasks
GET /stories/{storyId}/tasks
{
"tasks": [
{ "id": "task_1", "title": "Write migration", "finished": false }
]
}
Create a task
POST /stories/{storyId}/tasks
| Field | Type | Required |
|---|---|---|
title | string | Yes |
Batch create tasks
POST /stories/{storyId}/tasks/batch
| Field | Type | Required | Description |
|---|---|---|---|
titles | string[] | Yes | One task is created per title |
Update a task
PATCH /stories/{storyId}/tasks/{taskId}
| Field | Type | Required | Description |
|---|---|---|---|
finished | boolean | Yes | Marks the task done or not done |
title | string | No | New title |
Comments
List comments
GET /stories/{storyId}/comments
{
"comments": [
{ "id": "comment_1", "content": "Looks good, shipping this." }
]
}
Create a comment
POST /stories/{storyId}/comments
| Field | Type | Required |
|---|---|---|
content | string | Yes |
Errors
Errors use standard HTTP status codes: 401 for a missing or invalid API key, 403 for a key without access to the requested project, 404 for a resource that doesn’t exist, and 422 for a malformed request body.
{
"error": {
"code": "invalid_api_key",
"message": "The provided API key is invalid or has been revoked."
}
}