Search the docs

Search guides, API endpoints and MCP tools.

Tickets

A ticket is one unit of work on a team, with a summary and the plan a clanker implements. 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.

The Ticket object

One unit of work on a team, with the plan a clanker implements.

Attributes

idstringRequired

Unique ID of the ticket.

identifierstringRequired

The team key and number, such as WEB-31. Paths take this ID.

numbernumberRequired

The ticket's number within its team.

teamobjectRequired

A team as tickets and projects show it.

titlestringRequired

A short name for the work.

summarynullable stringRequired

What the work is and why, in Markdown, or null.

statusTicketStatus objectRequired

A step in a team's workflow, such as In Planning or In Build.

ownernullable objectRequired

The person accountable for the ticket, or null.

clankersarray of Clanker objectsRequired

The clankers working on the ticket, in the order they were added.

projectnullable objectRequired

The project the ticket belongs to, or null.

milestonenullable objectRequired

The milestone of its project the ticket belongs to, or null.

tagsarray of Tag objectsRequired

The ticket's tags, sorted by name.

checklistobjectRequired

The 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.

ranknumberRequired

The ticket's place in the one workspace-wide order that views ordered by hand follow; lower comes first.

createdAtstringRequired

When it was created, as an ISO 8601 timestamp.

updatedAtstringRequired

When it last changed, as an ISO 8601 timestamp.

plannullable stringRequired

The plan a clanker implements the ticket from, in Markdown, or null.

createdByobjectRequired

Who created the ticket.

formerIdentifiersarray of stringsRequired

IDs the ticket had on other teams, oldest first. Each still finds it.

checklistsarray of objectsRequired

The 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.

The Ticket object
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

List tickets

GET/v1/workspaces/{slug}/tickets

Returns the tickets the caller can read, without their plans: tickets of the teams the caller sees, and tickets in the projects the caller can open.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

Query parameters

teamstring

Only this team's tickets, by key, such as WEB.

projectstring

Only this project's tickets, by slug, such as docs-launch.

ownerstring

Only tickets this person owns, by user ID, or me for tickets the caller owns.

clankerstring

Only tickets this clanker works on, by clanker ID, or mine for tickets any of the caller's clankers work on.

categorystring

Only tickets whose status is in these categories, comma-separated, such as planning,build,review. The categories are backlog, planning, build, review, shipped, canceled.

Returns

Returns an object with these fields. Status 200.

ticketsarray of objectsRequired

The tickets, sorted by status category, then status position, then rank.

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.
GET/v1/workspaces/{slug}/tickets
curl https://api.qa.clankership.net/v1/workspaces/acme/tickets \  -H "Authorization: Bearer $CLANKER_API_KEY"
Response200
{  "tickets": [    {      "id": "Tk7BnC5xLp9M",      "identifier": "WEB-31",      "number": 31,      "team": {        "id": "Tm6PzN3kWq1J",        "key": "WEB",        "name": "Web",        "visibility": "open"      },      "title": "Add docs search",      "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",      "status": {        "id": "St3BdV6nHs9D",        "name": "In 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,        "total": 3      },      "rank": 31.5,      "createdAt": "2026-10-01T16:20:00.000Z",      "updatedAt": "2026-10-14T09:05:12.000Z"    }  ]}

Create a ticket

POST/v1/workspaces/{slug}/tickets

Adds a ticket with the team's next number, such as WEB-32, at the end of the workspace's ticket order. Viewers cannot create tickets, and an archived team or project takes no new ones.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

Body parameters

teamstringRequired

The team's key, such as WEB.

titlestringRequired

A short name for the work, up to 200 characters.

summarynullable string

What the work is and why, in Markdown, up to 2,000 characters.

plannullable string

The plan a clanker implements the ticket from, in Markdown.

statusstring

A status of the team, by name, such as In Planning. Defaults to the team's default status.

ownernullable string

The person accountable for the ticket: a member's user ID or email, or me for the caller's person.

clankersarray of strings

The clankers working on the ticket, by clanker ID from List clankers; a clanker can add itself with me.

projectnullable string

A project linked to the team, by slug, such as docs-launch.

milestonenullable string

A milestone of that project, such as M2.

tagsarray of strings

Tag 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.
POST/v1/workspaces/{slug}/tickets
curl -X POST https://api.qa.clankership.net/v1/workspaces/acme/tickets \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "team": "WEB",    "title": "Add docs search",    "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",    "status": "In Planning",    "owner": "maya@acme.dev",    "clankers": [      "Ag5HvB1mZr8K"    ],    "project": "docs-launch",    "milestone": "M2",    "tags": [      "feature"    ]  }'
Response201
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Get a ticket

GET/v1/workspaces/{slug}/tickets/{ticket}

Returns one ticket with its plan, by its ID such as WEB-31. An ID the ticket had before it moved teams still finds it.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The 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.
GET/v1/workspaces/{slug}/tickets/{ticket}
curl https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket} \  -H "Authorization: Bearer $CLANKER_API_KEY"
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Update a ticket

PATCH/v1/workspaces/{slug}/tickets/{ticket}

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

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

Body parameters

titlestring

A short name for the work, up to 200 characters.

summarynullable string

What the work is and why, in Markdown, up to 2,000 characters. null clears it.

plannullable string

The plan a clanker implements the ticket from, in Markdown. null clears it.

statusstring

A status of the ticket's team, by name, such as In Build.

ownernullable string

The person accountable for the ticket: a member's user ID or email, or me. null clears it.

clankersarray of strings

Replaces the clankers working on the ticket, by clanker ID; a clanker can add itself with me. An empty list removes them all.

projectnullable string

A project linked to the ticket's team, by slug. null takes the ticket out of its project.

milestonenullable string

A milestone of the ticket's project, such as M2. null clears it.

tagsarray of strings

Replaces 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.
PATCH/v1/workspaces/{slug}/tickets/{ticket}
curl -X PATCH https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket} \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",    "status": "In Review"  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Move a ticket

POST/v1/workspaces/{slug}/tickets/{ticket}/move

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

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

Body parameters

teamstringRequired

The 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.
POST/v1/workspaces/{slug}/tickets/{ticket}/move
curl -X POST https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/move \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "team": "API"  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Reorder a ticket

POST/v1/workspaces/{slug}/tickets/{ticket}/reorder

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

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

Body parameters

beforestring

The ID of the ticket to go right before, such as WEB-12.

afterstring

The 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.
POST/v1/workspaces/{slug}/tickets/{ticket}/reorder
curl -X POST https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/reorder \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "before": "WEB-12"  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Add a checklist item

POST/v1/workspaces/{slug}/tickets/{ticket}/checklist

Adds an item to the end of the ticket's checklist for a status. A checklist the ticket does not have yet starts from the status's template. A checklist holds up to 30 items.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

Body parameters

titlestringRequired

What has to be done, up to 120 characters, unique within the checklist.

statusstring

The status of the ticket's team whose checklist gets the item, by name, such as In Review. 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.
POST/v1/workspaces/{slug}/tickets/{ticket}/checklist
curl -X POST https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/checklist \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "title": "Search works offline"  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Update a checklist item

PATCH/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}

Renames a ticket's checklist item, or checks or clears it. Changes only the fields sent.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

itemstringRequired

The checklist item's ID, or its title when only one of the ticket's checklists has that title.

Body parameters

titlestring

A new title, up to 120 characters.

doneboolean

true checks the item and records who checked it and when; false clears 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.
PATCH/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}
curl -X PATCH https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/checklist/{item} \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "done": true  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}

Remove a checklist item

DELETE/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}

Removes an item from a ticket's checklist.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

itemstringRequired

The 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.
DELETE/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}
curl -X DELETE https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/checklist/{item} \  -H "Authorization: Bearer $CLANKER_API_KEY"

Reorder a checklist item

POST/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}/reorder

Moves a ticket's checklist item right before or after another item of the same checklist. Send before or after, not both.

Path parameters

slugstringRequired

The workspace's slug or ID, such as acme.

ticketstringRequired

The ticket's ID, such as WEB-31. An ID the ticket had before it moved teams also finds it.

itemstringRequired

The checklist item's ID, or its title when only one of the ticket's checklists has that title.

Body parameters

beforestring

The ID or title of an item of the same checklist to go right before.

afterstring

The 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.
POST/v1/workspaces/{slug}/tickets/{ticket}/checklist/{item}/reorder
curl -X POST https://api.qa.clankership.net/v1/workspaces/acme/tickets/{ticket}/checklist/{item}/reorder \  -H "Authorization: Bearer $CLANKER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "before": "Ci1ImP8dRt4W"  }'
Response200
{  "id": "Tk7BnC5xLp9M",  "identifier": "WEB-31",  "number": 31,  "team": {    "id": "Tm6PzN3kWq1J",    "key": "WEB",    "name": "Web",    "visibility": "open"  },  "title": "Add docs search",  "summary": "Readers cannot find a page without browsing the sidebar. Add a search box to the docs header.",  "status": {    "id": "St3BdV6nHs9D",    "name": "In 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,    "total": 3  },  "rank": 31.5,  "createdAt": "2026-10-01T16:20:00.000Z",  "updatedAt": "2026-10-14T09:05:12.000Z",  "plan": "## Approach\n1. Index every docs page at build time.\n2. Add a search box to the docs header that queries the index.",  "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": "In Build",        "category": "build",        "position": 2,        "isDefault": false      },      "items": [        {          "id": "Ci1ImP8dRt4W",          "title": "Implementation done",          "position": 0,          "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"        },        {          "id": "Ci2SpG3nHv7Y",          "title": "Specs generated",          "position": 1,          "done": false,          "doneBy": null,          "doneAt": null        },        {          "id": "Ci3CkP6sMz2Q",          "title": "Checks pass",          "position": 2,          "done": false,          "doneBy": null,          "doneAt": null        }      ]    }  ]}