Content Versions

Content Versions

Every publish creates an immutable snapshot. Use these endpoints to list, inspect, revert, and label versions.

List versions

[GET] /{collection_slug}/{entry_uuid}/versions — requires read.

Returns version metadata (newest first), including version_number, label, description, published_at, created_by, is_current_published, plus draft dirty flags when present.

Get a version

[GET] /{collection_slug}/{entry_uuid}/versions/{version_number}read.

Includes the raw snapshot payload (restoration format). In the dashboard version history, Preview uses this payload. For API-rendered live content use list/get with state=published.

Revert

[POST] /{collection_slug}/{entry_uuid}/versions/{version_number}/revertupdate.

Restores the draft from that snapshot and publishes it as a new version.

Update label

[PATCH] /{collection_slug}/{entry_uuid}/versions/{version_number}update.

Body: optional label, description (null clears). Snapshot payload is immutable.

Examples

const versions = await client.content.versions.list('blog-posts', entryUuid)
const v2 = await client.content.versions.get('blog-posts', entryUuid, 2)
await client.content.versions.revert('blog-posts', entryUuid, 2)
await client.content.versions.updateLabel('blog-posts', entryUuid, 2, {
  label: 'Launch copy',
  description: 'Approved by marketing',
})
curl "https://your-domain.com/api/blog-posts/$UUID/versions" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer YOUR_PROJECT_TOKEN" \
  -H "project-id: YOUR_PROJECT_UUID"

Retention: CONTENT_VERSIONS_PER_ENTRY (see env).

Search documentation

Find guides and reference pages