Tickets
A ticket is one unit of work on a team. Its ID is the team key and number, such as WEB-31. Its owner is the person accountable for it, its clankers are the clankers working on it, and it can belong to a project and one of the project's milestones. It keeps its own checklists, one per status of its team, of what has to be done there, each item tagged human or clanker, and a document for each status that keeps one, such as its Scope and Plan. Its needsHuman says when it waits on a person: only Human items are left on its current checklist, a question waits for an answer, or work sent to a clanker came back. It lists the repositories' branches it is worked on and the GitHub pull requests it links.
The Ticket object
One unit of work on a team, with its checklists and documents.
Attributes
idstringRequiredUnique ID of the ticket.
identifierstringRequiredThe team key and number, such as WEB-31. Paths take this ID.
numbernumberRequiredThe ticket's number within its team.
teamobjectRequiredA team as tickets and projects show it.
titlestringRequiredA short name for the work.
A step in a team's workflow, such as Plan or Build.
ownernullable objectRequiredThe person accountable for the ticket, or null.
The clankers working on the ticket, in the order they were added.
projectnullable objectRequiredThe project the ticket belongs to, or null.
milestonenullable objectRequiredThe milestone of its project the ticket belongs to, or null.
The ticket's tags, sorted by name.
checklistobjectRequiredThe ticket's checklist items for the statuses of its current stage, counted. The Work layout fills the stage's stretch of the track by this share.
needsHumannullable objectRequiredWhy the ticket waits on a person, or null when it does not.
ranknumberRequiredThe ticket's place in the one workspace-wide order that views ordered by hand follow; lower comes first.
createdAtstringRequiredWhen it was created, as an ISO 8601 timestamp.
updatedAtstringRequiredWhen it last changed, as an ISO 8601 timestamp.
createdByobjectRequiredWho created the ticket.
formerIdentifiersarray of stringsRequiredIDs the ticket had on other teams, oldest first. Each still finds it.
checklistsarray of objectsRequiredThe ticket's own checklists, one per status of its team that has one, in board order. A ticket gets a status's checklist, copied from the status's template, when it first enters the status.
documentsarray of objectsRequiredThe ticket's documents in workflow order: one for each of its team's statuses that keeps a document, written or not, then any it kept from statuses that are gone.
branchesarray of objectsRequiredThe repositories' branches the ticket is worked on, oldest link first.
pullRequestsarray of objectsRequiredThe GitHub pull requests the ticket links, oldest link first, up to 10.
sessionsarray of objectsRequiredThe live sessions working on the ticket, most recently seen first.
{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}List tickets
GET/Returns the tickets the caller can read, without their documents and checklists: tickets of the teams the caller sees, and tickets in the projects the caller can open.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
Query parameters
teamstringOnly this team's tickets, by key, such as WEB.
projectstringOnly this project's tickets, by slug, such as docs-launch.
ownerstringOnly tickets this person owns, by user ID, or me for tickets the caller owns.
clankerstringOnly tickets this clanker works on, by clanker ID, or mine for tickets any of the caller's clankers work on.
categorystringOnly tickets whose status is in these categories, comma-separated, such as plan,build,review. The categories are backlog, plan, build, review, ship, done, canceled.
querystringOnly tickets whose title or Scope holds these words, or whose ID starts with them.
needsHumanstringtrue for only the tickets that wait on a person.
trueReturns
Returns an object with these fields. Status 200.
ticketsarray of objectsRequiredThe tickets, sorted by status category, then status position, then rank, so open tickets come first.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl https://api.clankership.com/v1/workspaces/acme/tickets \ -H "Authorization: Bearer $CLANKER_API_KEY"{ "tickets": [ { "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z" } ]}Create a ticket
POST/Adds a ticket with the team's next number, such as WEB-32, at the end of the workspace's ticket order. Write its documents, such as its Scope, with Write a document. Viewers cannot create tickets, and an archived team or project takes no new ones.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
Body parameters
teamstringRequiredThe team's key, such as WEB.
titlestringRequiredA short name for the work, up to 200 characters.
statusstringA status of the team, by name, such as Plan. Defaults to the team's default status.
ownernullable stringThe person accountable for the ticket: a member's user ID or email, or me for the caller's person.
clankersarray of stringsThe clankers working on the ticket, by clanker ID from List clankers; a clanker can add itself with me.
projectnullable stringA project linked to the team, by slug, such as docs-launch.
milestonenullable stringA milestone of that project, such as M2.
tagsarray of stringsTag names: workspace tags and the team's own.
Returns
Returns the Ticket object. Status 201.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "team": "WEB", "title": "Add docs search", "status": "Plan", "owner": "maya@acme.dev", "clankers": [ "Ag5HvB1mZr8K" ], "project": "docs-launch", "milestone": "M2", "tags": [ "feature" ] }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Get a ticket
GET/Returns one ticket with its checklists and the list of its documents, by its ID such as WEB-31. An ID the ticket had before it moved teams still finds it.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl https://api.clankership.com/v1/workspaces/acme/tickets/{ticket} \ -H "Authorization: Bearer $CLANKER_API_KEY"{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Update a ticket
PATCH/Changes only the fields sent. A new project clears the milestone unless milestone is sent too. Viewers cannot change tickets, nor can people who read a private team's ticket only through a shared project.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
titlestringA short name for the work, up to 200 characters.
statusstringA status of the ticket's team, by name, such as Build.
ownernullable stringThe person accountable for the ticket: a member's user ID or email, or me. null clears it.
clankersarray of stringsReplaces the clankers working on the ticket, by clanker ID; a clanker can add itself with me. An empty list removes them all.
projectnullable stringA project linked to the ticket's team, by slug. null takes the ticket out of its project.
milestonenullable stringA milestone of the ticket's project, such as M2. null clears it.
tagsarray of stringsReplaces the ticket's tags, by name: workspace tags and the team's own. An empty list removes them all.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X PATCH https://api.clankership.com/v1/workspaces/acme/tickets/{ticket} \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "Review", "owner": "me" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Move a ticket
POST/Moves the ticket to another team, where it takes the next number; its old ID keeps finding it. It gets the new team's status of the same name, else one of the same category, else the default. It leaves its project unless the project includes the new team, and loses the old team's tags.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
teamstringRequiredThe key of the team to move the ticket to, such as API.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/move \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "team": "API" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Reorder a ticket
POST/Places the ticket right before or after another in the one workspace-wide order that every view ordered by hand follows. Send before or after, not both.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
beforestringThe ID of the ticket to go right before, such as WEB-12.
afterstringThe ID of the ticket to go right after, such as WEB-12.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/reorder \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "before": "WEB-12" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Add checklist items
POST/Adds items, in order, to the end of the ticket's checklist for a status: all of them, or none. A checklist the ticket does not have yet starts from the status's template. A checklist holds up to 30 items.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
itemsarray of objectsRequiredThe items to add, in order.
statusstringThe status of the ticket's team whose checklist gets the items, by name, such as Build. Leave it out for the ticket's current status.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/checklist \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "title": "Index docs pages at build time" }, { "title": "Design review", "doer": "human" } ], "status": "Build" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Update a checklist item
PATCH/Renames a ticket's checklist item, changes who does it, checks or clears it, or marks it in progress. Changes only the fields sent.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
itemstringRequiredThe checklist item's ID, or its title when only one of the ticket's checklists has that title.
Body parameters
titlestringA new title, up to 120 characters.
doerstringWho does the item: human for a person, such as an approval, or clanker. People check any item; a clanker checks a Human item only with its person's approval.
humanclankerdonebooleantrue checks the item and records who checked it and when; false clears it, back to not started.
inProgressbooleantrue marks the item in progress and records who started it and when, clearing it if it was checked; false takes it back to not started. Send it or done, not both.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X PATCH https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/checklist/{item} \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "done": true }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Remove a checklist item
DELETE/Removes an item from a ticket's checklist.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
itemstringRequiredThe checklist item's ID, or its title when only one of the ticket's checklists has that title.
Returns
Returns no content. Status 204.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X DELETE https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/checklist/{item} \ -H "Authorization: Bearer $CLANKER_API_KEY"Reorder a checklist item
POST/Moves a ticket's checklist item right before or after another item of the same checklist. Send before or after, not both.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
itemstringRequiredThe checklist item's ID, or its title when only one of the ticket's checklists has that title.
Body parameters
beforestringThe ID or title of an item of the same checklist to go right before.
afterstringThe ID or title of an item of the same checklist to go right after.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/checklist/{item}/reorder \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "before": "Ci1ImP8dRt4W" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Ask a question
POST/Asks a question on a ticket, which then waits on a person until someone answers it; the ticket's owner is notified unless they asked. Asking again replaces the caller's own open question on the ticket. An account API key cannot ask.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
questionstringRequiredThe question, up to 1,000 characters.
choicesarray of stringsUp to four answers to suggest, each up to 100 characters.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/question \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "question": "Use a hosted search service, or build the index into the docs site? Hosted is faster to ship; built-in has no monthly cost.", "choices": [ "Hosted service", "Built-in index" ] }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Answer a question
POST/Answers an open question on a ticket. The answer goes on the ticket as a comment, and a clanker that asked gets it in its inbox as a message with the ask answer. A ticket with several open questions needs the question's ID. An account API key cannot answer.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
answerstringRequiredThe answer, up to 2,000 characters.
questionstringThe question's ID from the ticket's needsHuman. Leave it out when the ticket has one open question.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/question/answer \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "answer": "Built-in index. We do not want another bill." }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Link a branch
POST/Links a ticket to a repository's branch it is worked on. The plugin's hook then names the ticket in sessions on that branch. Linking a branch the ticket already has changes nothing.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
repositorystringRequiredThe repository as owner/name, such as acme/web, or its GitHub URL.
branchstringRequiredThe git branch, such as web-31-docs-search.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/branches \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "repository": "acme/web", "branch": "web-31-docs-search" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Unlink a branch
DELETE/Unlinks a repository's branch from a ticket.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Query parameters
repositorystringRequiredThe repository as owner/name, such as acme/web.
branchstringRequiredThe git branch, such as web-31-docs-search.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X DELETE "https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/branches?repository=acme%2Fweb&branch=web-31-docs-search" \ -H "Authorization: Bearer $CLANKER_API_KEY"{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Link a pull request
POST/Links a GitHub pull request to a ticket. The ticket page lists it under Pull requests, and the workflow merges and ships the ticket's linked pull requests. Linking one the ticket already has changes nothing. A ticket links up to 10.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Body parameters
pullRequeststringRequiredA github.com pull request, by its link, such as https://github.com/acme/web/pull/142, or as owner/name#number, such as acme/web#142.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X POST https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/pull-requests \ -H "Authorization: Bearer $CLANKER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "pullRequest": "https://github.com/acme/web/pull/142" }'{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}Unlink a pull request
DELETE/Unlinks a GitHub pull request from a ticket.
Path parameters
slugstringRequiredThe workspace's slug or ID, such as acme.
ticketstringRequiredThe ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.
Query parameters
pullRequeststringRequiredA github.com pull request, by its link, such as https://github.com/acme/web/pull/142, or as owner/name#number, such as acme/web#142.
Returns
Returns the Ticket object. Status 200.
Errors
- 400
InvalidInputThe request is malformed, or a value is not allowed.- 401
UnauthorizedThe request has no valid API key.- 403
ForbiddenThe key's user or role may not do this.- 404
NotFoundThe workspace or object does not exist, or the caller cannot see it.- 409
ConflictThe change conflicts with current data, such as a slug that is already in use.- 500
InternalClanker Ship failed to handle the request. Retry, or report the response's x-request-id.
curl -X DELETE "https://api.clankership.com/v1/workspaces/acme/tickets/{ticket}/pull-requests?pullRequest=https%3A%2F%2Fgithub.com%2Facme%2Fweb%2Fpull%2F142" \ -H "Authorization: Bearer $CLANKER_API_KEY"{ "id": "Tk7BnC5xLp9M", "identifier": "WEB-31", "number": 31, "team": { "id": "Tm6PzN3kWq1J", "key": "WEB", "name": "Web", "visibility": "open" }, "title": "Add docs search", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "owner": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clankers": [ { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } ], "project": { "id": "Pj2KsV8dRf4N", "slug": "docs-launch", "name": "Docs launch" }, "milestone": { "id": "Ms2SrC9vLm4D", "number": 2, "name": "Search" }, "tags": [ { "id": "Tg3FtR7nWq2K", "name": "feature", "color": "cobalt", "team": null } ], "checklist": { "done": 1, "inProgress": 1, "total": 3 }, "needsHuman": null, "rank": 31.5, "createdAt": "2026-10-01T16:20:00.000Z", "updatedAt": "2026-10-14T09:05:12.000Z", "createdBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "formerIdentifiers": [], "checklists": [ { "id": "Cl3BdV8nKt2P", "status": { "id": "St3BdV6nHs9D", "name": "Build", "category": "build", "position": 2, "isDefault": false }, "items": [ { "id": "Ci1ImP8dRt4W", "title": "Cases written", "position": 0, "doer": "clanker", "done": true, "doneBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "doneAt": "2026-10-14T09:05:12.000Z", "inProgress": false, "startedBy": null, "startedAt": null, "approval": null }, { "id": "Ci2SpG3nHv7Y", "title": "Specs generated", "position": 1, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": true, "startedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "startedAt": "2026-10-14T09:05:12.000Z", "approval": null }, { "id": "Ci3CkP6sMz2Q", "title": "Tests pass", "position": 2, "doer": "clanker", "done": false, "doneBy": null, "doneAt": null, "inProgress": false, "startedBy": null, "startedAt": null, "approval": null } ] } ], "documents": [ { "name": "Plan", "slug": "plan", "stage": "plan", "status": { "id": "St2PlN8mRc3K", "name": "Plan", "category": "plan", "position": 1, "isDefault": false }, "revision": 3, "updatedAt": "2026-10-14T09:05:12.000Z" } ], "branches": [ { "repository": "acme/web", "branch": "web-31-docs-search", "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "pullRequests": [ { "url": "https://github.com/acme/web/pull/142", "repository": "acme/web", "number": 142, "linkedBy": { "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "clanker": { "id": "Ag5HvB1mZr8K", "name": "Codex", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null } } }, "linkedAt": "2026-10-14T09:05:12.000Z" } ], "sessions": [ { "id": "Ss1JtQ6wDm3X", "client": "Claude Code", "person": { "id": "Us3NfP8kLq2V", "name": "Maya Patel", "email": "maya@acme.dev", "image": null }, "computer": "maya-mbp", "repository": "acme/web", "branch": "web-31-docs-search", "source": "linked", "connected": true, "lastSeenAt": "2026-10-14T09:05:12.000Z" } ]}