curl --request PUT \
--url https://studio.weaverse.io/api/v1/content/versions/{versionId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "page",
"projectId": "clz7prj0a1b2c3d4e5f6g7h8",
"snapshot": {
"pageData": {
"id": "clz7pg9k2m4n6p8r0t2v4x6z",
"name": "Home",
"rootId": "root-1",
"items": [
{
"id": "root-1",
"type": "main",
"children": [
{
"id": "hero-1"
}
],
"data": {}
},
{
"id": "hero-1",
"type": "hero-image",
"data": {
"heading": "Summer collection",
"height": "large"
}
}
],
"expectedUpdatedAt": "2026-10-08T10:00:00.000Z"
},
"pageAssignment": {
"type": "INDEX",
"handle": "",
"locale": ""
}
}
}
'{
"object": "version",
"version": {
"id": "clz8hst3b5d7f9h1j3l5n7p9",
"pageId": "clz7pg9k2m4n6p8r0t2v4x6z",
"projectId": "clz7prj0a1b2c3d4e5f6g7h8",
"userId": null,
"snapshot": {
"pageData": {
"id": "clz7pg9k2m4n6p8r0t2v4x6z",
"name": "Home",
"rootId": "root-1",
"items": [
{
"id": "root-1",
"type": "main",
"children": [
{
"id": "hero-1"
}
],
"data": {}
},
{
"id": "hero-1",
"type": "hero-image",
"data": {
"heading": "Summer collection",
"height": "large"
}
}
],
"expectedUpdatedAt": "2026-10-08T10:00:00.000Z"
},
"pageAssignment": {
"type": "INDEX",
"handle": "",
"locale": ""
}
},
"kind": "HISTORY",
"draftBasePageUpdatedAt": null,
"draftBaseProjectUpdatedAt": null,
"publishedPageUpdatedAt": null,
"publishedProjectUpdatedAt": null,
"assignedType": "INDEX",
"assignedHandle": "",
"assignedLocale": "",
"assignedMarket": null,
"assignmentDeferred": false,
"scheduleRevision": 2,
"createdAt": "2026-10-08T10:05:00.000Z",
"publishAt": "2026-12-01T09:00:00.000Z",
"publishedAt": null,
"status": "SCHEDULED"
}
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "STALE_PAGE",
"message": "This page changed after it was loaded. Re-read and retry.",
"status": 409,
"details": {
"pageId": "clz7pg9k2m4n6p8r0t2v4x6z"
}
}Replace a version's pending content
Replaces the stored content of a version, typically one that is scheduled, so the new content goes live when the schedule fires. The schedule time stays the same. Send projectId and type in the body, not the query. type chooses the shape:
type: "page": a full pagesnapshot(pageDatawithname,rootId,items, andpageAssignment).snapshot.pageDatais the page itself, not a{ page }wrapper. The write is fenced onsnapshot.pageData.expectedUpdatedAt: if the version’s page changed since then, the response is 409STALE_PAGEand the stored snapshot stays the same.type: "theme": a full themesnapshot(theme,recentColors,previewHost,defaultLocale), fenced onexpectedProjectUpdatedAt. If the project revision moved, the response is 409STALE_PROJECT.type: "deferred-page": for a catch-all page version that has no live assignment yet. Send the page save payload aspageData(pageandpageAssignment;page.idandpage.expectedUpdatedAtare required), optionaltranslationsandstaticTextChanges, the version’s currentscheduleRevisionasexpectedScheduleRevision, andexpectedProjectUpdatedAt. The response isversion_recaptured, and itsversionIdmay name a new successor version; use that id from then on.
Refusals (409 CONFLICT). Draft versions cannot be changed; save a new draft through PUT /projects/{projectId}/page-drafts/{pageId} instead. Sending page for a deferred version, or deferred-page for a normal one, is also refused. An invalid snapshot is 400.
Required scope: content:publish
curl --request PUT \
--url https://studio.weaverse.io/api/v1/content/versions/{versionId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "page",
"projectId": "clz7prj0a1b2c3d4e5f6g7h8",
"snapshot": {
"pageData": {
"id": "clz7pg9k2m4n6p8r0t2v4x6z",
"name": "Home",
"rootId": "root-1",
"items": [
{
"id": "root-1",
"type": "main",
"children": [
{
"id": "hero-1"
}
],
"data": {}
},
{
"id": "hero-1",
"type": "hero-image",
"data": {
"heading": "Summer collection",
"height": "large"
}
}
],
"expectedUpdatedAt": "2026-10-08T10:00:00.000Z"
},
"pageAssignment": {
"type": "INDEX",
"handle": "",
"locale": ""
}
}
}
'{
"object": "version",
"version": {
"id": "clz8hst3b5d7f9h1j3l5n7p9",
"pageId": "clz7pg9k2m4n6p8r0t2v4x6z",
"projectId": "clz7prj0a1b2c3d4e5f6g7h8",
"userId": null,
"snapshot": {
"pageData": {
"id": "clz7pg9k2m4n6p8r0t2v4x6z",
"name": "Home",
"rootId": "root-1",
"items": [
{
"id": "root-1",
"type": "main",
"children": [
{
"id": "hero-1"
}
],
"data": {}
},
{
"id": "hero-1",
"type": "hero-image",
"data": {
"heading": "Summer collection",
"height": "large"
}
}
],
"expectedUpdatedAt": "2026-10-08T10:00:00.000Z"
},
"pageAssignment": {
"type": "INDEX",
"handle": "",
"locale": ""
}
},
"kind": "HISTORY",
"draftBasePageUpdatedAt": null,
"draftBaseProjectUpdatedAt": null,
"publishedPageUpdatedAt": null,
"publishedProjectUpdatedAt": null,
"assignedType": "INDEX",
"assignedHandle": "",
"assignedLocale": "",
"assignedMarket": null,
"assignmentDeferred": false,
"scheduleRevision": 2,
"createdAt": "2026-10-08T10:05:00.000Z",
"publishAt": "2026-12-01T09:00:00.000Z",
"publishedAt": null,
"status": "SCHEDULED"
}
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "UNAUTHORIZED",
"message": "<string>",
"status": 123,
"details": "<unknown>"
}{
"object": "error",
"code": "STALE_PAGE",
"message": "This page changed after it was loaded. Re-read and retry.",
"status": 409,
"details": {
"pageId": "clz7pg9k2m4n6p8r0t2v4x6z"
}
}Authorizations
Bearer authentication: a shop API key (WEAVERSE_API_KEY), a scoped API key, a delegated MCP OAuth token, or (translation-unit routes only) a project-bound translation agent token. Scopes: content:read — Read projects, pages, theme settings, versions, drafts and translation units. content:write — Save drafts and make non-destructive edits (page items, metadata, SEO, assignments, languages, glossary). Never publishes or deletes. content:publish — Publish drafts, schedule/reschedule/cancel publications, restore versions, publish global sections. content:delete — Delete pages, global sections, languages, static keys, override reverts; required with project:manage for project deletion. project:manage — Create/copy/delete projects, settings, variants, hierarchy, backups, restore-as-new, previews, hostname policy. translations:read — Read translation units only (no general content access). translations:write — Apply translation units only; never mutates page content. A legacy unscoped API key keeps read/write/translation baseline access and every pre-scope endpoint, but never gains publish/delete/project-manage implicitly.
Path Parameters
Body
Response
Updated version
The response is of type object.
Was this page helpful?