Revisions
Revisions are immutable snapshots of saved post and page content. They are separate from archival state and are used to inspect, compare, autosave, and restore content.
Authentication
All routes require a bearer token and the listed capability. Saved revisions are accessible through the caller's publication scope. An autosave is visible only to the principal who created it.
Routes
| Route | Methods | Capability | Required input | Optional input and behavior | Success result |
|---|---|---|---|---|---|
/revision/list |
GET, POST |
revision.list |
Exactly one of post_id or page_id |
Matching publication selector, pagination | Paginated revisions. |
/revision/get |
POST |
revision.list |
revision_id |
— | Revision and snapshot. |
/revision/compare |
POST |
revision.list |
base_revision_id, target_revision_id |
— | comparison. |
/revision/autosave |
POST |
post.save or page.save |
Exactly one of post_id or page_id |
Editable content fields | Autosaved revision. |
/revision/restore |
POST |
revision.restore |
revision_id |
— | Restored post or page. |
Revision model
{
"revision_id": "REVISION_UUID",
"publication_id": "PUBLICATION_UUID",
"content_type": "post",
"content_id": "POST_UUID",
"kind": "saved",
"created_at": "2026-08-19 00:00:00.000000",
"updated_at": "2026-08-19 00:00:00.000000"
}
content_type is post or page; kind is saved or autosave. Successful normal post and page saves create a saved revision. Lifecycle actions do not create revisions.
Autosave and restore
Autosave accepts the ordinary editable fields for the selected content. Post fields are title, slug, excerpt, category_id, body, body_format, visibility, tag_ids, and author_ids; page fields are title, slug, body, body_format, and visibility.
{
"post_id": "POST_UUID",
"title": "Unfinished title",
"body": "Unfinished draft text",
"tag_ids": ["TAG_UUID"]
}
Autosave merges supplied fields over the current saved snapshot and replaces the caller's prior autosave for that content. It never changes the live post or page. A successful ordinary save clears the caller's autosave.
Compare revisions from the same content:
{
"base_revision_id": "BASE_REVISION_UUID",
"target_revision_id": "TARGET_REVISION_UUID"
}
The result contains both revision snapshots and changed_fields. Restore applies the selected snapshot through normal validation, creates a new saved revision, and preserves the content's current lifecycle state. Permanently deleting a post or page removes all of its revisions.