REST API
Base URLs, authentication, conventions and every operation the API serves, generated from the API's own routes.
Base URL and paths
Section titled “Base URL and paths”A workspace serves the API from two addresses, for example for a workspace at
your-workspace.contentworker.app:
| Surface | Address | Paths | Key kind |
|---|---|---|---|
| Management | https://api.your-workspace.contentworker.app |
/spaces/{space}/environments/{env}/…, plus space-level /spaces/{space}/… |
CMA |
| Preview | https://api.your-workspace.contentworker.app |
/preview/{space}/{env}/… |
CPA |
| Delivery | https://cdn.your-workspace.contentworker.app |
/delivery/{space}/{env}/… |
CDA |
The cdn. address is the cached, read-only Delivery API meant for sites and apps. The admin’s own
address forwards these paths to the API too, which is how the admin itself calls it.
{env} is an environment id or an alias. The OpenAPI 3.1 document for all of it is at
/openapi.json here, and every deployment serves its own at GET /openapi.json.
The OpenAPI explorer lets you browse it and send requests.
Conventions
Section titled “Conventions”- Authentication:
Authorization: Bearer <token>on every request. See API keys and access. - Bodies are JSON (
content-type: application/json). - IDs are UUIDv7: time-ordered, so sorting by id sorts by creation time.
- Field values are keyed by field, then by locale, on every write and on reads without
locale=:{ "title": { "en-US": "Hello" } }. - Timestamps are ISO 8601 in UTC.
- Lists return
{ "items": [...] }, withtotalwhere it’s cheap to count; page withlimitandskip. - Errors return
{ "error": { "code", "message" } }, plusissueson a 422. See Errors. - Read your writes: every API response carries an
x-cw-bookmarkheader. Send the last value back on your next request and its reads are at least that fresh, even when a read replica answers. - Scopes: each operation needs one permission scope, checked against the space in the path.
Operations
Section titled “Operations”Every operation the API serves, grouped as the explorer groups them. This list is generated from the API’s routes when these docs are built; request and response bodies are in the explorer.
196 operations.
Platform
System (2)
Liveness/readiness probes.
| GET | /health | Liveness probe |
| GET | /ready | Readiness probe (reports the mounted role) |
Auth (17)
Principal resolution (web sign-in, API keys), and ending a person’s credentials.
| GET | /auth/me | Resolve the calling principal |
| DELETE | /deployment/people/{subject}/credentials | Revoke every token a person holds |
| PUT | /spaces/{space}/access-settings | Change how people sign in to the space |
| GET | /spaces/{space}/api-keys | List API keys for a space |
| POST | /spaces/{space}/api-keys | Mint an API key |
| DELETE | /spaces/{space}/api-keys/{id} | |
| PUT | /spaces/{space}/api-keys/{id}/role | Change an API key’s role |
| POST | /spaces/{space}/members | Add a person to the team |
| PATCH | /spaces/{space}/members/{id} | Change a person’s role, name or access |
| DELETE | /spaces/{space}/members/{id} | Remove a person from the team |
| GET | /spaces/{space}/oauth/connections | List applications connected via OAuth |
| POST | /spaces/{space}/oauth/connections/revoke | Disconnect an OAuth application |
| GET | /spaces/{space}/personal-access-tokens | List personal access tokens |
| POST | /spaces/{space}/personal-access-tokens | Mint a personal access token |
| GET | /spaces/{space}/role-presets | List the built-in role presets |
| POST | /spaces/{space}/roles/{id}/clone | Clone a role into a new custom role |
| GET | /spaces/{space}/team | List the team: people and long-lived keys with their roles |
Spaces & environments (29)
Spaces, environments (branches), aliases, compare/merge, and space config.
| GET | /spaces | |
| POST | /spaces | Create a space (admin token) |
| GET | /spaces/{space}/compare | |
| GET | /spaces/{space}/environment-aliases | |
| PUT | /spaces/{space}/environment-aliases/{alias} | |
| DELETE | /spaces/{space}/environment-aliases/{alias} | |
| GET | /spaces/{space}/environments | |
| POST | /spaces/{space}/environments | |
| DELETE | /spaces/{space}/environments/{env} | Delete an environment and everything in it |
| GET | /spaces/{space}/environments/{env}/agent-reviews | |
| POST | /spaces/{space}/environments/{env}/agent-reviews/{id}/approve | |
| POST | /spaces/{space}/environments/{env}/agent-reviews/{id}/reject | |
| GET | /spaces/{space}/environments/{env}/agent-schedules | |
| POST | /spaces/{space}/environments/{env}/agent-schedules | |
| PATCH | /spaces/{space}/environments/{env}/agent-schedules/{id} | |
| DELETE | /spaces/{space}/environments/{env}/agent-schedules/{id} | |
| POST | /spaces/{space}/environments/{env}/clone | Clone this environment into another |
| GET | /spaces/{space}/environments/{env}/export | Export an environment as a snapshot |
| POST | /spaces/{space}/environments/{env}/import | Import a snapshot into this environment |
| POST | /spaces/{space}/environments/{env}/imports | Run an import |
| POST | /spaces/{space}/environments/{env}/imports/analyze | Analyze an import without writing |
| POST | /spaces/{space}/environments/{env}/imports/job | Run an import as a durable job |
| GET | /spaces/{space}/environments/{env}/imports/sources | List import sources |
| GET | /spaces/{space}/environments/{env}/space-config | |
| POST | /spaces/{space}/merge | |
| GET | /spaces/{space}/plugins | |
| GET | /spaces/{space}/plugins/{id} | |
| DELETE | /spaces/{space}/plugins/{id} | |
| POST | /spaces/{space}/plugins/{id}/enabled |
Roles & permissions (5)
Custom roles with content-type + field grants.
| GET | /spaces/{space}/roles | |
| POST | /spaces/{space}/roles | |
| GET | /spaces/{space}/roles/{id} | |
| PUT | /spaces/{space}/roles/{id} | |
| DELETE | /spaces/{space}/roles/{id} |
Audit (2)
Append-only audit trail of mutating actions.
| GET | /spaces/{space}/audit-log | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/audit |
Content model
Content types (4)
The content model: types, fields, publishing.
| GET | /spaces/{space}/environments/{env}/content-types | List content types |
| POST | /spaces/{space}/environments/{env}/content-types | Create a content type |
| GET | /spaces/{space}/environments/{env}/content-types/{apiId} | Get a content type |
| POST | /spaces/{space}/environments/{env}/content-types/{apiId}/published |
Taxonomy (10)
Tags, concepts, and concept schemes (SKOS-style).
| GET | /spaces/{space}/environments/{env}/taxonomy/concepts | |
| POST | /spaces/{space}/environments/{env}/taxonomy/concepts | |
| DELETE | /spaces/{space}/environments/{env}/taxonomy/concepts/{id} | |
| PUT | /spaces/{space}/environments/{env}/taxonomy/concepts/{id}/broader | |
| GET | /spaces/{space}/environments/{env}/taxonomy/schemes | |
| POST | /spaces/{space}/environments/{env}/taxonomy/schemes | |
| DELETE | /spaces/{space}/environments/{env}/taxonomy/schemes/{id} | |
| GET | /spaces/{space}/environments/{env}/taxonomy/tags | |
| POST | /spaces/{space}/environments/{env}/taxonomy/tags | |
| DELETE | /spaces/{space}/environments/{env}/taxonomy/tags/{id} |
Authoring
Entries (23)
Authoring: drafts, publishing, bulk operations, metadata.
| POST | /spaces/{space}/environments/{env}/bulk/entries | |
| POST | /spaces/{space}/environments/{env}/bulk/entries/publish | |
| POST | /spaces/{space}/environments/{env}/bulk/entries/unpublish | |
| GET | /spaces/{space}/environments/{env}/bulk/jobs | |
| POST | /spaces/{space}/environments/{env}/bulk/jobs | |
| GET | /spaces/{space}/environments/{env}/bulk/jobs/{id} | |
| POST | /spaces/{space}/environments/{env}/bulk/jobs/{id}/cancel | |
| GET | /spaces/{space}/environments/{env}/bulk/jobs/{id}/report | |
| POST | /spaces/{space}/environments/{env}/entries | Create a draft entry |
| GET | /spaces/{space}/environments/{env}/entries/{id} | Get an entry (draft state) |
| PUT | /spaces/{space}/environments/{env}/entries/{id} | Save a new draft version |
| DELETE | /spaces/{space}/environments/{env}/entries/{id} | Move an entry to the trash |
| POST | /spaces/{space}/environments/{env}/entries/{id}/apply-tags | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/duplicate | Duplicate an entry |
| GET | /spaces/{space}/environments/{env}/entries/{id}/metadata | |
| PUT | /spaces/{space}/environments/{env}/entries/{id}/metadata | |
| DELETE | /spaces/{space}/environments/{env}/entries/{id}/permanent | Permanently delete a trashed entry |
| POST | /spaces/{space}/environments/{env}/entries/{id}/preview-link | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/published | Publish an entry |
| DELETE | /spaces/{space}/environments/{env}/entries/{id}/published | Unpublish an entry |
| POST | /spaces/{space}/environments/{env}/entries/{id}/restore | Restore an entry from the trash |
| GET | /spaces/{space}/environments/{env}/entries/{id}/reverse-references | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/versions/{version}/restore | Restore a version |
Versions (3)
Append-only entry version history, diff, and restore.
| GET | /spaces/{space}/environments/{env}/entries/{id}/versions | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/versions/{version} | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/versions/diff |
Assets (10)
Media: presigned direct uploads, publishing, transforms.
| GET | /spaces/{space}/environments/{env}/assets | |
| POST | /spaces/{space}/environments/{env}/assets | Create an asset (presigned direct upload) |
| GET | /spaces/{space}/environments/{env}/assets/{id} | |
| PATCH | /spaces/{space}/environments/{env}/assets/{id}/metadata | |
| POST | /spaces/{space}/environments/{env}/assets/{id}/published | |
| DELETE | /spaces/{space}/environments/{env}/assets/{id}/published | |
| GET | /spaces/{space}/environments/{env}/assets/{id}/transform | |
| GET | /spaces/{space}/environments/{env}/assets/{id}/usage | |
| POST | /spaces/{space}/environments/{env}/assets/{id}/video/refresh | Refresh a video asset's processing status from the video host |
| POST | /spaces/{space}/environments/{env}/assets/videos | Create a video asset (direct upload to the video host) |
Comments & tasks (7)
Editorial collaboration on entries.
| DELETE | /spaces/{space}/environments/{env}/comments/{id} | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/comments | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/comments | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/tasks | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/tasks | |
| PUT | /spaces/{space}/environments/{env}/tasks/{id} | |
| DELETE | /spaces/{space}/environments/{env}/tasks/{id} |
Workflows (24)
Editorial workflow definitions and entry transitions.
| GET | /spaces/{space}/environments/{env}/entries/{id}/workflow | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/workflow-runs | Start a workflow run on an entry |
| POST | /spaces/{space}/environments/{env}/entries/{id}/workflow/transition | |
| GET | /spaces/{space}/environments/{env}/workflow-runs | List workflow runs |
| GET | /spaces/{space}/environments/{env}/workflow-runs/{id} | Get a workflow run |
| POST | /spaces/{space}/environments/{env}/workflow-runs/{id}/cancel | Cancel a workflow run |
| POST | /spaces/{space}/environments/{env}/workflow-runs/{id}/events | Deliver an event to a run |
| GET | /spaces/{space}/environments/{env}/workflow-runs/{id}/node-runs | List a run’s finished node runs |
| GET | /spaces/{space}/environments/{env}/workflow-runs/{id}/timeline | Get a run’s timeline |
| GET | /spaces/{space}/environments/{env}/workflow-settings | Read the space’s workflow settings |
| PUT | /spaces/{space}/environments/{env}/workflow-settings | Set the space’s workflow settings |
| GET | /spaces/{space}/environments/{env}/workflow-tasks | List workflow tasks |
| GET | /spaces/{space}/environments/{env}/workflow-tasks/{id} | Get a workflow task |
| POST | /spaces/{space}/environments/{env}/workflow-tasks/{id}/decide | Approve or reject a task |
| GET | /spaces/{space}/environments/{env}/workflows | |
| POST | /spaces/{space}/environments/{env}/workflows | Create a workflow |
| GET | /spaces/{space}/environments/{env}/workflows/{id} | |
| DELETE | /spaces/{space}/environments/{env}/workflows/{id} | |
| PUT | /spaces/{space}/environments/{env}/workflows/{id}/draft | Save a workflow draft |
| GET | /spaces/{space}/environments/{env}/workflows/{id}/versions | List published versions |
| POST | /spaces/{space}/environments/{env}/workflows/{id}/versions | Publish the draft as a new version |
| GET | /spaces/{space}/environments/{env}/workflows/{id}/versions/{version} | Get one published version |
| POST | /spaces/{space}/environments/{env}/workflows/copilot | Draft or edit a workflow graph with AI |
| POST | /spaces/{space}/environments/{env}/workflows/validate | Validate a workflow graph |
Publishing & automation
Releases & scheduling (10)
Grouped releases and scheduled publish/unpublish actions.
| GET | /spaces/{space}/environments/{env}/releases | |
| POST | /spaces/{space}/environments/{env}/releases | |
| GET | /spaces/{space}/environments/{env}/releases/{id} | |
| DELETE | /spaces/{space}/environments/{env}/releases/{id} | |
| POST | /spaces/{space}/environments/{env}/releases/{id}/items | |
| DELETE | /spaces/{space}/environments/{env}/releases/{id}/items/{entityId} | |
| POST | /spaces/{space}/environments/{env}/releases/{id}/published | |
| GET | /spaces/{space}/environments/{env}/scheduled-actions | |
| POST | /spaces/{space}/environments/{env}/scheduled-actions | |
| DELETE | /spaces/{space}/environments/{env}/scheduled-actions/{id} |
Webhooks (5)
Signed event webhooks and delivery logs.
| GET | /spaces/{space}/environments/{env}/webhooks | List webhooks |
| POST | /spaces/{space}/environments/{env}/webhooks | |
| PUT | /spaces/{space}/environments/{env}/webhooks/{id} | |
| DELETE | /spaces/{space}/environments/{env}/webhooks/{id} | |
| GET | /spaces/{space}/environments/{env}/webhooks/{id}/deliveries |
Functions (3)
User-defined HTTP functions invoked on domain events.
| GET | /spaces/{space}/environments/{env}/functions | |
| POST | /spaces/{space}/environments/{env}/functions | |
| DELETE | /spaces/{space}/environments/{env}/functions/{id} |
Apps (9)
App extensions (custom field editors, sidebars).
| GET | /spaces/{space}/environments/{env}/app-extensions | |
| POST | /spaces/{space}/environments/{env}/app-extensions | |
| DELETE | /spaces/{space}/environments/{env}/app-extensions/{id} | |
| POST | /spaces/{space}/plugins | Install a plugin |
| PUT | /spaces/{space}/plugins/{id} | Upgrade a plugin |
| POST | /spaces/{space}/plugins/{id}/capabilities | Approve a plugin’s capabilities |
| PUT | /spaces/{space}/plugins/{id}/from-url | Upgrade a plugin from a URL |
| POST | /spaces/{space}/plugins/from-url | Install a plugin from a URL |
| POST | /spaces/{space}/plugins/from-url/inspect | Inspect a plugin package without installing it |
AI
AI & agents (20)
Generation, translation, moderation, semantic tooling, AI actions, and the agent run ledger.
| GET | /spaces/{space}/environments/{env}/agent-runs | |
| GET | /spaces/{space}/environments/{env}/agent-runs/usage | |
| GET | /spaces/{space}/environments/{env}/ai-actions | |
| POST | /spaces/{space}/environments/{env}/ai-actions | |
| DELETE | /spaces/{space}/environments/{env}/ai-actions/{id} | |
| POST | /spaces/{space}/environments/{env}/ai-actions/{id}/run | |
| POST | /spaces/{space}/environments/{env}/assets/{id}/alt-text | |
| POST | /spaces/{space}/environments/{env}/assets/{id}/auto-tag | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/autofill | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/duplicates | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/embedding | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/moderate | |
| GET | /spaces/{space}/environments/{env}/entries/{id}/related | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/suggest-tags | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/summarize | |
| POST | /spaces/{space}/environments/{env}/entries/{id}/translate | |
| POST | /spaces/{space}/environments/{env}/entries/canvas | |
| POST | /spaces/{space}/environments/{env}/entries/generate | |
| GET | /spaces/{space}/environments/{env}/search/index | Report lexical search index health |
| POST | /spaces/{space}/environments/{env}/search/reindex | Request a reindex of all published entries |
Reference
Guides (3)
The product's own documentation, served over the API so agents can look up conventions with the token they already hold.
| GET | /guides | List documentation pages |
| GET | /guides/{path} | Read a documentation page |
| GET | /guides/search | Search the documentation |
Delivery
Delivery (7)
Published content: REST, hybrid search, SSE, GraphQL.
| GET | /delivery/{space}/{env}/assets | List published assets |
| GET | /delivery/{space}/{env}/assets/{id} | Get a published asset |
| GET | /delivery/{space}/{env}/assets/{id}/transform | Resolve a transformed image URL |
| GET | /delivery/{space}/{env}/entries | List published entries |
| GET | /delivery/{space}/{env}/entries/{id} | Get a published entry |
| GET | /delivery/{space}/{env}/live | Live Content API (SSE) |
| GET | /delivery/{space}/{env}/search | Search published content |
Preview (3)
Draft/current content for previews.
| GET | /preview/{space}/{env}/entries | List draft/current entries |
| GET | /preview/{space}/{env}/entries/{id} | Get a draft/current entry |
| GET | /preview/{space}/{env}/suggest | Suggest entries for a chooser |