API reference
HTTP API for every Clanker Test 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.clankertest.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.
| Method | Path | Summary | Auth |
|---|---|---|---|
GET | /health | Liveness | none |
GET | /v1/api-keys | List API keys | bearer |
POST | /v1/api-keys | Create API key | bearer |
POST | /v1/api-keys/{apiKeyId}/revoke | Revoke API key | bearer |
GET | /v1/me | Get profile | bearer |
PATCH | /v1/me | Update profile name | bearer |
POST | /v1/me/photo | Upload profile photo | bearer |
GET | /v1/me/preferences | Get notification preferences | bearer |
PATCH | /v1/me/preferences | Update notification preferences | bearer |
GET | /v1/me/home | Home destination path | bearer |
GET | /v1/me/onboarding | Onboarding workspace | bearer |
GET | /v1/workspaces | List memberships | bearer |
POST | /v1/workspaces | Create workspace | bearer |
GET | /v1/slugs/{slug} | Check whether a workspace slug is available | bearer |
GET | /v1/workspaces/{slug} | Get workspace | bearer |
PATCH | /v1/workspaces/{slug} | Update workspace | bearer |
GET | /v1/workspaces/{slug}/slug-availability | Check a candidate slug against this workspace | bearer |
POST | /v1/workspaces/{slug}/icon | Upload workspace icon | bearer |
GET | /v1/workspaces/{slug}/members | List members | bearer |
PATCH | /v1/workspaces/{slug}/members/{userId} | Change member role | bearer |
DELETE | /v1/workspaces/{slug}/members/{userId} | Remove member | bearer |
GET | /v1/workspaces/{slug}/invites | List invites | bearer |
POST | /v1/workspaces/{slug}/invites | Create invites | bearer |
POST | /v1/workspaces/{slug}/invites/{inviteId}/revoke | Revoke invite | bearer |
PATCH | /v1/workspaces/{slug}/invites/{inviteId} | Change invite role | bearer |
POST | /v1/workspaces/{slug}/invites/{inviteId}/resend | Resend invite | bearer |
GET | /v1/workspaces/{slug}/teams | List teams | bearer |
POST | /v1/workspaces/{slug}/teams | Create team | bearer |
PATCH | /v1/workspaces/{slug}/teams/{teamId} | Rename team | bearer |
DELETE | /v1/workspaces/{slug}/teams/{teamId} | Delete team | bearer |
PUT | /v1/workspaces/{slug}/teams/{teamId}/members | Set team members | bearer |
GET | /v1/workspaces/{slug}/products | List products | bearer |
POST | /v1/workspaces/{slug}/products | Create product | bearer |
PATCH | /v1/workspaces/{slug}/products/{productId} | Update product | bearer |
DELETE | /v1/workspaces/{slug}/products/{productId} | Delete product | bearer |
PUT | /v1/workspaces/{slug}/products/{productId}/environments/{environmentId} | Set product environment | bearer |
DELETE | /v1/workspaces/{slug}/products/{productId}/environments/{environmentId} | Remove product environment | bearer |
GET | /v1/workspaces/{slug}/environments | List environments | bearer |
POST | /v1/workspaces/{slug}/environments | Create environment | bearer |
PATCH | /v1/workspaces/{slug}/environments/{environmentId} | Update environment | bearer |
DELETE | /v1/workspaces/{slug}/environments/{environmentId} | Delete environment | bearer |
GET | /v1/workspaces/{slug}/events | List events | bearer |
GET | /v1/workspaces/{slug}/people | People page data | bearer |
GET | /v1/workspaces/{slug}/seeds | Seed workspaces | bearer |
POST | /v1/seeds/{workspaceId}/join | Join seed workspace | bearer |
GET | /v1/workspaces/{slug}/integrations | Agent authorizations | bearer |
POST | /v1/workspaces/{slug}/integrations/{authorizationId}/revoke | Revoke agent authorization | bearer |
POST | /v1/invites/{token}/accept | Accept invite | bearer |
GET | /v1/invites/{token} | Get invite by token | none |