Clanker Ship DocsGuidesAPI referenceAGENTS.mdllms.txtllms-full.txtopenapi.json

API reference

HTTP API for every Clanker Ship web action. Create a hashed API key on the website (Security settings), then send `Authorization: Bearer ctk_…` or `X-API-Key`. The web app does not call this API; it uses the same Effect services directly. MCP and `/agent/v1` use agent OAuth access tokens, not API keys.

Servers: https://api.clankertest.com (Production) · https://api.qa.clankership.net (QA) · http://127.0.0.1:3200 (Localhost)

Auth: hashed user API key as Authorization: Bearer ctk_… or X-API-Key. Create keys on the website Security settings. MCP uses agent OAuth, not API keys.

Machine-readable: openapi.json, llms.txt, llms-full.txt, index.json, AGENTS.md.

MethodPathSummaryAuth
GET/v1/workspaces/{slug}/products/{productSlug}/secretsList product secrets and environment statusbearer
POST/v1/workspaces/{slug}/products/{productSlug}/secretsVault addbearer
GET/v1/workspaces/{slug}/products/{productSlug}/secrets/{name}Read secret metadata, each environment's current version and non-production valuesbearer
PATCH/v1/workspaces/{slug}/products/{productSlug}/secrets/{name}Vault editbearer
DELETE/v1/workspaces/{slug}/products/{productSlug}/secrets/{name}Vault deletebearer
GET/v1/workspaces/{slug}/vaultVault listbearer
POST/v1/workspaces/{slug}/vault/assignmentsVault bulkSetbearer
POST/v1/workspaces/{slug}/vault/generationsGenerate a value for each selected environment, shared by its selected productsbearer
GET/v1/workspaces/{slug}/products/{productSlug}/secrets/{name}/environments/{environmentSlug}/versionsVault historybearer
POST/v1/workspaces/{slug}/products/{productSlug}/secrets/{name}/environments/{environmentSlug}/restoreVault restorebearer
GET/v1/workspaces/{slug}/vault/keysVault keysbearer
POST/v1/workspaces/{slug}/vault/keysVault createKeybearer
PATCH/v1/workspaces/{slug}/vault/keys/{id}Vault updateKeybearer
POST/v1/workspaces/{slug}/vault/keys/{id}/revokeVault revokeKeybearer
GET/v1/workspaces/{slug}/account-api-keysVault accountKeysbearer
POST/v1/workspaces/{slug}/account-api-keysVault createAccountKeybearer
PATCH/v1/workspaces/{slug}/account-api-keys/{id}Update account API key name and rolebearer
POST/v1/workspaces/{slug}/account-api-keys/{id}/revokeVault revokeAccountKeybearer
GET/v1/workspaces/{slug}/products/{productSlug}/environments/{environmentSlug}/secrets/pullPull current secrets with an environment-appropriate keynone
GET/Livenessnone
GET/healthLivenessnone
GET/v1/api-keysList API keysbearer
POST/v1/api-keysCreate API keybearer
POST/v1/api-keys/{apiKeyId}/revokeRevoke API keybearer
GET/v1/meGet profilebearer
PATCH/v1/meUpdate profile namebearer
POST/v1/me/photoUpload profile photobearer
GET/v1/me/preferencesGet notification preferencesbearer
PATCH/v1/me/preferencesUpdate notification preferencesbearer
GET/v1/me/homeHome destination pathbearer
GET/v1/me/onboardingOnboarding workspacebearer
GET/v1/workspacesList membershipsbearer
POST/v1/workspacesCreate workspacebearer
GET/v1/slugs/{slug}Check whether a workspace slug is availablebearer
GET/v1/workspaces/{slug}Get workspacebearer
PATCH/v1/workspaces/{slug}Update workspacebearer
GET/v1/workspaces/{slug}/slug-availabilityCheck a candidate slug against this workspacebearer
POST/v1/workspaces/{slug}/iconUpload workspace iconbearer
GET/v1/workspaces/{slug}/membersList membersbearer
PATCH/v1/workspaces/{slug}/members/{userId}Change member rolebearer
DELETE/v1/workspaces/{slug}/members/{userId}Remove memberbearer
GET/v1/workspaces/{slug}/invitesList invitesbearer
POST/v1/workspaces/{slug}/invitesCreate invitesbearer
POST/v1/workspaces/{slug}/invites/{inviteId}/revokeRevoke invitebearer
PATCH/v1/workspaces/{slug}/invites/{inviteId}Change invite rolebearer
POST/v1/workspaces/{slug}/invites/{inviteId}/resendResend invitebearer
GET/v1/workspaces/{slug}/eventsList eventsbearer
GET/v1/workspaces/{slug}/peoplePeople page databearer
GET/v1/workspaces/{slug}/seedsSeed workspacesbearer
POST/v1/seeds/{workspaceId}/joinJoin seed workspacebearer
POST/v1/invites/{token}/acceptAccept invitebearer
GET/v1/workspaces/{slug}/productsList productsbearer
POST/v1/workspaces/{slug}/productsCreate a productbearer
GET/v1/workspaces/{slug}/products/{product}Get a product, archived or notbearer
PATCH/v1/workspaces/{slug}/products/{product}Change a productbearer
POST/v1/workspaces/{slug}/products/{product}/archiveArchive a productbearer
POST/v1/workspaces/{slug}/products/{product}/restoreRestore an archived productbearer
GET/v1/workspaces/{slug}/environmentsList environmentsbearer
POST/v1/workspaces/{slug}/environmentsCreate an environmentbearer
GET/v1/workspaces/{slug}/environments/{environment}Get an environment, archived or notbearer
PATCH/v1/workspaces/{slug}/environments/{environment}Change an environmentbearer
POST/v1/workspaces/{slug}/environments/{environment}/archiveArchive an environmentbearer
POST/v1/workspaces/{slug}/environments/{environment}/restoreRestore an archived environmentbearer
GET/v1/workspaces/{slug}/deploymentsList deploymentsbearer
POST/v1/workspaces/{slug}/deploymentsDeploy a product to an environmentbearer
GET/v1/workspaces/{slug}/deployments/{product}/{environment}Get a deploymentbearer
PATCH/v1/workspaces/{slug}/deployments/{product}/{environment}Change a deploymentbearer
DELETE/v1/workspaces/{slug}/deployments/{product}/{environment}Remove a deploymentbearer
GET/v1/workspaces/{slug}/teamsList teamsbearer
POST/v1/workspaces/{slug}/teamsCreate a teambearer
GET/v1/workspaces/{slug}/teams/{team}Get a teambearer
PATCH/v1/workspaces/{slug}/teams/{team}Change a teambearer
DELETE/v1/workspaces/{slug}/teams/{team}Delete a team without ticketsbearer
POST/v1/workspaces/{slug}/teams/{team}/archiveArchive a teambearer
POST/v1/workspaces/{slug}/teams/{team}/restoreRestore a teambearer
POST/v1/workspaces/{slug}/teams/{team}/joinJoin an open teambearer
POST/v1/workspaces/{slug}/teams/{team}/membersAdd a member to a teambearer
DELETE/v1/workspaces/{slug}/teams/{team}/members/{person}Remove a member from a team, or leave itbearer
GET/v1/workspaces/{slug}/ticket-statusesList ticket statusesbearer
POST/v1/workspaces/{slug}/ticket-statusesAdd a ticket statusbearer
PATCH/v1/workspaces/{slug}/ticket-statuses/{status}Rename a ticket status or make it the defaultbearer
DELETE/v1/workspaces/{slug}/ticket-statuses/{status}Delete a ticket statusbearer
POST/v1/workspaces/{slug}/ticket-statuses/{status}/reorderMove a status within its categorybearer
GET/v1/workspaces/{slug}/tagsList tagsbearer
POST/v1/workspaces/{slug}/tagsCreate a tagbearer
PATCH/v1/workspaces/{slug}/tags/{tag}Change a tagbearer
DELETE/v1/workspaces/{slug}/tags/{tag}Delete a tagbearer
GET/v1/workspaces/{slug}/projectsList projects in priority orderbearer
POST/v1/workspaces/{slug}/projectsCreate a projectbearer
GET/v1/workspaces/{slug}/projects/{project}Get a project with its documentbearer
PATCH/v1/workspaces/{slug}/projects/{project}Change a projectbearer
POST/v1/workspaces/{slug}/projects/{project}/reorderMove a project in priority orderbearer
POST/v1/workspaces/{slug}/projects/{project}/archiveArchive a projectbearer
POST/v1/workspaces/{slug}/projects/{project}/restoreRestore a projectbearer
POST/v1/workspaces/{slug}/projects/{project}/milestonesAdd a milestone to a projectbearer
PATCH/v1/workspaces/{slug}/projects/{project}/milestones/{milestone}Change a milestonebearer
DELETE/v1/workspaces/{slug}/projects/{project}/milestones/{milestone}Delete a milestonebearer
GET/v1/workspaces/{slug}/ticketsList ticketsbearer
POST/v1/workspaces/{slug}/ticketsCreate a ticketbearer
GET/v1/workspaces/{slug}/tickets/{ticket}Get a ticket by its ID, such as WEB-31bearer
PATCH/v1/workspaces/{slug}/tickets/{ticket}Change a ticketbearer
POST/v1/workspaces/{slug}/tickets/{ticket}/moveMove a ticket to another teambearer
GET/v1/workspaces/{slug}/teams/{team}/viewsList a team's viewsbearer
POST/v1/workspaces/{slug}/teams/{team}/viewsSave a view for a teambearer
GET/v1/workspaces/{slug}/teams/{team}/views/{view}Get a view with its ticketsbearer
PATCH/v1/workspaces/{slug}/teams/{team}/views/{view}Change a view, or make it the defaultbearer
DELETE/v1/workspaces/{slug}/teams/{team}/views/{view}Delete a view that is not the defaultbearer
GET/v1/workspaces/{slug}/projects/{project}/viewsList a project's viewsbearer
POST/v1/workspaces/{slug}/projects/{project}/viewsSave a view for a projectbearer
GET/v1/workspaces/{slug}/projects/{project}/views/{view}Get a view with its ticketsbearer
PATCH/v1/workspaces/{slug}/projects/{project}/views/{view}Change a view, or make it the defaultbearer
DELETE/v1/workspaces/{slug}/projects/{project}/views/{view}Delete a view that is not the defaultbearer
POST/v1/workspaces/{slug}/tickets/{ticket}/reorderMove a ticket in the one order every view ordered by hand usesbearer
GET/v1/workspaces/{slug}/agent-instructionsGet the instructions a team's agents followbearer
PUT/v1/workspaces/{slug}/agent-instructionsSet a workspace's or team's instructionsbearer
DELETE/v1/workspaces/{slug}/agent-instructionsGo back to the inherited instructionsbearer
GET/v1/workspaces/{slug}/agentsList registered agentsbearer
POST/v1/workspaces/{slug}/agents/registerRegister the plugin's agent on a computerbearer
POST/v1/workspaces/{slug}/agents/{agent}/revokeRevoke one of your agentsbearer
POST/v1/workspaces/{slug}/agent-messagesSend a ticket to an agentbearer
GET/v1/workspaces/{slug}/tickets/{ticket}/messagesList the messages sent about a ticketbearer
GET/v1/workspaces/{slug}/tickets/{ticket}/commentsList a ticket's commentsbearer
POST/v1/workspaces/{slug}/tickets/{ticket}/commentsComment on a ticket, mentioning agentsbearer
GET/v1/workspaces/{slug}/notificationsList your notificationsbearer
POST/v1/workspaces/{slug}/notifications/readMark your notifications readbearer
GET/v1/workspaces/{slug}/test-runsList test runs, newest firstbearer
POST/v1/workspaces/{slug}/test-runsStart a test runbearer
GET/v1/workspaces/{slug}/test-runs/{run}Get a test run with its tests and attemptsbearer
POST/v1/workspaces/{slug}/test-runs/{run}/finishFinish a test run with every test's first attemptbearer
POST/v1/workspaces/{slug}/test-runs/{run}/retriesRetry a test run's failed testsbearer
POST/v1/workspaces/{slug}/test-runs/{run}/retries/{retry}/finishFinish a retry and apply the flaky rulebearer
GET/v1/invites/{token}Get invite by tokennone