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}/revert — update.
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).