Skip to content

API reference

The complete surface. Nothing here is hand-maintained — the interactive reference and this list are both generated from the schemas the API validates against, so they cannot drift from what the code does.

Last updated

Conventions

  • Base URL: https://api.cmskite.com. Every path below is under it.
  • Authentication is Authorization: Bearer <credential>.
  • A session sends X-Tenant-Id; a session writing content also sends X-Project-Id. A project key sends neither — it already knows.
  • Request and response bodies are JSON. content-type: application/json is required on writes.
  • Mutations accept Idempotency-Key. A retry with the same key returns the original result for 24 hours.
  • Collections are cursor-paginated and carry RateLimit headers.

Content

MethodPathWhat it doesCredential
GET/v1/blog/postsList postsKey · session · agent
GET/v1/blog/posts/{id}One post by idKey · session · agent
GET/v1/blog/posts/slug/{slug}One post by slugKey · session · agent
POST/v1/blog/postsCreate a postSession · agent
PATCH/v1/blog/posts/{id}Update a postSession · agent
DELETE/v1/blog/posts/{id}Delete a postSession · agent
GET/v1/blog/searchFull-text searchKey · session · agent
GET/v1/blog/categoriesList categoriesKey · session · agent
GET/v1/blog/categories/{id}One categoryKey · session · agent
POST/v1/blog/categoriesCreate a categorySession · agent
PATCH/v1/blog/categories/{id}Rename or move a categorySession · agent
DELETE/v1/blog/categories/{id}Delete a categorySession · agent
GET/v1/blog/tagsList tagsKey · session · agent
GET/v1/blog/tags/{id}One tagKey · session · agent
POST/v1/blog/tagsCreate a tagSession · agent
PATCH/v1/blog/tags/{id}Update a tagSession · agent
DELETE/v1/blog/tags/{id}Delete a tagSession · agent
GET/v1/blog/authorsList authorsKey · session · agent
GET/v1/blog/authors/{id}One authorKey · session · agent
POST/v1/blog/authorsCreate an authorSession · agent
PATCH/v1/blog/authors/{id}Update an authorSession · agent
DELETE/v1/blog/authors/{id}Delete an authorSession · agent
GET/v1/blog/mediaList mediaKey · session · agent
POST/v1/blog/mediaRecord a file, get an upload URLSession · agent
POST/v1/blog/media/{id}/completeConfirm an upload finishedSession · agent
DELETE/v1/blog/media/{id}Delete mediaSession · agent

Workspaces, projects and credentials

MethodPathWhat it doesCredential
GET/v1/overviewWorkspace overview figuresSession
POST/v1/workspacesCreate a workspaceSession · agent
DELETE/v1/workspaces/{id}Delete a workspaceSession (owner)
GET/v1/projectsList projectsSession · agent
GET/v1/projects/{id}One projectSession · agent
GET/v1/projects/{id}/summaryFigures for one projectSession
POST/v1/projectsCreate a projectSession · agent
DELETE/v1/projects/{id}Delete a projectSession (owner)
GET/v1/projects/{projectId}/api-keysList API keysSession
POST/v1/projects/{projectId}/api-keysCreate an API keySession
DELETE/v1/api-keys/{id}Revoke an API keySession
GET/v1/agent-tokensList agent tokensSession
POST/v1/agent-tokensCreate an agent tokenSession
DELETE/v1/agent-tokens/{id}Revoke an agent tokenSession
GET/v1/audit-logsWhat has happened in this workspaceSession · agent

Plan and usage

MethodPathWhat it doesCredential
GET/v1/billingCurrent plan, catalogue and resolved limitsSession
GET/v1/plan-requestsPlan changes asked forSession
POST/v1/plan-requestsAsk to move to another planSession (owner)
POST/v1/plan-requests/{id}/withdrawTake a request backSession (owner)
GET/v1/usage/summaryUsage for a periodSession
GET/v1/usage/seriesUsage over timeSession
GET/v1/usage/endpointsMost-used endpointsSession
GET/v1/usage/outcomesRequests by outcomeSession
GET/v1/usage/projectsTraffic per projectSession

Your own database

MethodPathWhat it doesCredential
GET/v1/projects/{id}/databaseWhere this project stores contentSession
POST/v1/projects/{id}/database/testTry a connection without saving itSession
PUT/v1/projects/{id}/databasePoint the project at your MongoDBSession (owner)
POST/v1/projects/{id}/database/migrateCopy existing content acrossSession (owner)
GET/v1/projects/{id}/database/migrationHow the migration is goingSession
POST/v1/projects/{id}/database/activateStart serving from itSession (owner)
GET/v1/projects/{id}/database/exportDownload everything storedSession
DELETE/v1/projects/{id}/databaseGo back to the managed databaseSession (owner)

Accounts

MethodPathWhat it doesCredential
POST/v1/auth/registerCreate an account and workspacePublic
POST/v1/auth/loginLog inPublic
POST/v1/auth/refreshExchange the refresh cookieCookie
POST/v1/auth/logoutLog outSession
GET/v1/auth/meThe current user and their workspacesSession
POST/v1/auth/verify-emailVerify an email addressPublic
POST/v1/auth/forgot-passwordRequest a reset linkPublic
POST/v1/auth/reset-passwordSet a new passwordPublic

Versioning

The version is in the path. Adding a field or an endpoint, or adding an error code, is not breaking and happens inside v1. Removing a field, renaming one, tightening a type or changing what an error code means is breaking and requires v2.

The OpenAPI document is checked into the repository and regenerated on every release check, so a change to it has to be looked at rather than shipped by accident.