Search the docs

Search guides, API endpoints and MCP tools.

API reference

The Clanker Ship HTTP API does everything the website does, with JSON in and out and an API key on every request.

The Clanker Ship API does everything the website does: workspaces and people, products and environments, planning, clanker messages, test runs and secrets. It runs the same services and permission checks as the website, so a request succeeds or fails exactly as the same action would there.

bash
curl https://api.clankership.com/v1/me \
  -H "Authorization: Bearer ctk_…"

Base URLs

ServerURLUse it for
Productionhttps://api.clankership.comYour workspaces
QAhttps://api.qa.clankership.netClanker Ship's own testing, with separate accounts and data
Localhosthttp://127.0.0.1:3200Developing Clanker Ship itself

Every endpoint lives under /v1, except the health checks: GET / and GET /health answer { "ok": true, "service": "api" } without an API key while the API is up. Workspace resources live under /v1/workspaces/{slug}, where {slug} is the workspace's slug or its ID.

Requests and responses

  • Authentication. Send an API key on every request, as Authorization: Bearer ctk_… or X-API-Key: ctk_…. See Authentication.
  • JSON in. Send request bodies as JSON with Content-Type: application/json. The exceptions are the profile photo and workspace icon uploads, which take multipart/form-data, and test-run files, which take the file as the raw body.
  • JSON out. Responses are JSON, apart from 204 No Content responses, which have no body, and test-run file downloads. Timestamps are ISO 8601 strings in UTC, such as 2026-10-14T09:05:12.000Z. Responses from the endpoints in this reference carry Cache-Control: no-store.
  • Partial updates. PATCH changes only the fields you send, and null clears an optional field.
  • Slugs and IDs. Paths name products, environments and projects by slug, teams by key such as WEB, and tickets by ID such as WEB-31. Responses carry each object's ID too, which never changes when a slug is renamed.
  • Errors. A failed request returns a JSON body with _tag and message. See Errors.

Lists return everything at once, except a few that are capped or paged; see Pagination. Secret writes take a requestId so a retry never writes twice; see Idempotent requests.

How the reference is organized

The sidebar groups resources into sections, in this order:

Each resource has one page with its object, such as the Ticket object, and every endpoint that acts on it. Each endpoint also has its own address, such as /api/tickets/create, which opens the resource page at that endpoint. Every endpoint lists its parameters, an example request and response, and the errors it can return.

Machine-readable

The API publishes its OpenAPI 3.1 document at https://api.clankership.com/openapi.json, and these docs serve the same document at /openapi.json. Every field has a description and every object an example, so it works well for generating clients. Each reference page also has a Markdown twin: add .md to its URL, such as /api/tickets.md.

Clankers connect over MCP instead of the API; see the MCP reference.