> ## Documentation Index
> Fetch the complete documentation index at: https://weaverse.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Weaverse component configuration uses `settings`. `inspector` is deprecated; never generate it.
> Weaverse Hydrogen themes use React Router v7: import from `react-router`, never `react-router-dom` or `@remix-run/*`.
> Define component schemas with `createSchema()` from `@weaverse/hydrogen` (React Router themes) or `@weaverse/next` (Next.js themes).
> These docs cover @weaverse/hydrogen, @weaverse/react and @weaverse/core 5.x, and @weaverse/next 1.x. Do not use APIs from other major versions.
> For live project data (pages, theme settings, translations), use the Weaverse MCP server: https://docs.weaverse.io/developer-tools/weaverse-mcp

# 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 page `snapshot` (`pageData` with `name`, `rootId`, `items`, and `pageAssignment`). `snapshot.pageData` is the page itself, not a `{ page }` wrapper. The write is fenced on `snapshot.pageData.expectedUpdatedAt`: if the version's page changed since then, the response is 409 `STALE_PAGE` and the stored snapshot stays the same.
- `type: "theme"`: a full theme `snapshot` (`theme`, `recentColors`, `previewHost`, `defaultLocale`), fenced on `expectedProjectUpdatedAt`. If the project revision moved, the response is 409 `STALE_PROJECT`.
- `type: "deferred-page"`: for a catch-all page version that has no live assignment yet. Send the page save payload as `pageData` (`page` and `pageAssignment`; `page.id` and `page.expectedUpdatedAt` are required), optional `translations` and `staticTextChanges`, the version's current `scheduleRevision` as `expectedScheduleRevision`, and `expectedProjectUpdatedAt`. The response is `version_recaptured`, and its `versionId` may 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`



## OpenAPI

````yaml https://studio.weaverse.io/api/v1/content/openapi.json put /versions/{versionId}
openapi: 3.1.0
info:
  title: Weaverse Content API
  version: 1.0.0
  description: >-
    Authenticated REST API for querying Weaverse-managed content (projects,
    pages, theme settings, languages) and for reading and writing per-locale
    translations.
servers:
  - url: https://studio.weaverse.io/api/v1/content
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Projects
    description: List, read, rename, create, copy and delete projects.
  - name: Pages
    description: List, read, create, update and delete the pages of a project.
  - name: Drafts and publishing
    description: >-
      Edit page drafts, then publish, schedule, restore and manage page
      versions.
  - name: Global sections
    description: Read, edit and publish sections shared across pages.
  - name: Page settings
    description: Read and edit page-level settings such as SEO metadata.
  - name: Assignments
    description: Map Shopify resources and routes to Weaverse pages and templates.
  - name: Theme settings
    description: Read and update a project's theme settings.
  - name: Languages and localization
    description: List project languages and manage locales, static text and glossary.
  - name: Translations
    description: >-
      Read and write per-locale translations, built for external translation
      agents.
  - name: Project structure
    description: Manage project variants and the project hierarchy.
  - name: Backups and portability
    description: Back up, restore, export and import project content.
  - name: Previews and hostnames
    description: Create preview links and manage the hostnames a project accepts.
  - name: Specification
    description: This OpenAPI document.
paths:
  /versions/{versionId}:
    summary: 'One version: read, reschedule, replace content, cancel (content:publish)'
    parameters:
      - name: versionId
        in: path
        required: true
        schema:
          type: string
    put:
      tags:
        - Drafts and publishing
      summary: Replace a version's pending content
      description: >-
        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 page `snapshot` (`pageData` with `name`,
        `rootId`, `items`, and `pageAssignment`). `snapshot.pageData` is the
        page itself, not a `{ page }` wrapper. The write is fenced on
        `snapshot.pageData.expectedUpdatedAt`: if the version's page changed
        since then, the response is 409 `STALE_PAGE` and the stored snapshot
        stays the same.

        - `type: "theme"`: a full theme `snapshot` (`theme`, `recentColors`,
        `previewHost`, `defaultLocale`), fenced on `expectedProjectUpdatedAt`.
        If the project revision moved, the response is 409 `STALE_PROJECT`.

        - `type: "deferred-page"`: for a catch-all page version that has no live
        assignment yet. Send the page save payload as `pageData` (`page` and
        `pageAssignment`; `page.id` and `page.expectedUpdatedAt` are required),
        optional `translations` and `staticTextChanges`, the version's current
        `scheduleRevision` as `expectedScheduleRevision`, and
        `expectedProjectUpdatedAt`. The response is `version_recaptured`, and
        its `versionId` may 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`
      operationId: replaceVersionContent
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - type: object
                  required:
                    - type
                    - projectId
                    - snapshot
                    - expectedProjectUpdatedAt
                  properties:
                    type:
                      const: theme
                    projectId:
                      type: string
                    snapshot:
                      type: object
                    expectedProjectUpdatedAt:
                      type: string
                      format: date-time
                - type: object
                  required:
                    - type
                    - projectId
                    - snapshot
                  properties:
                    type:
                      const: page
                    projectId:
                      type: string
                    snapshot:
                      type: object
                - type: object
                  required:
                    - type
                    - projectId
                    - expectedScheduleRevision
                    - pageData
                    - expectedProjectUpdatedAt
                  properties:
                    type:
                      const: deferred-page
                    projectId:
                      type: string
                    expectedScheduleRevision:
                      type: integer
                      minimum: 0
                    pageData:
                      type: object
                    translations:
                      type: array
                      items:
                        type: object
                    staticTextChanges:
                      type: object
                    expectedProjectUpdatedAt:
                      type: string
                      format: date-time
            examples:
              page:
                summary: Replace a scheduled page version's snapshot
                value:
                  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: ''
              theme:
                summary: Replace a scheduled theme version's snapshot
                value:
                  type: theme
                  projectId: clz7prj0a1b2c3d4e5f6g7h8
                  snapshot:
                    theme:
                      colorPrimary: '#0f766e'
                      bodyFontSize: 16
                    recentColors:
                      - '#0f766e'
                  expectedProjectUpdatedAt: '2026-10-08T09:00:00.000Z'
              deferred-page:
                summary: Recapture a deferred catch-all page version
                value:
                  type: deferred-page
                  projectId: clz7prj0a1b2c3d4e5f6g7h8
                  expectedScheduleRevision: 1
                  pageData:
                    page:
                      id: clz7pg9k2m4n6p8r0t2v4x6z
                      name: Product template
                      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:
                      projectId: clz7prj0a1b2c3d4e5f6g7h8
                      type: PRODUCT
                      handle: ''
                      locale: ''
                  expectedProjectUpdatedAt: '2026-10-08T09:00:00.000Z'
      responses:
        '200':
          description: Updated version
          content:
            application/json:
              schema:
                type: object
              example:
                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
        '400':
          description: Invalid snapshot or body
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Foreign project or missing scope (INSUFFICIENT_SCOPE)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found (never discloses other tenants)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: STALE_PAGE / STALE_PROJECT / CONFLICT (draft or wrong type)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                object: error
                code: STALE_PAGE
                message: This page changed after it was loaded. Re-read and retry.
                status: 409
                details:
                  pageId: clz7pg9k2m4n6p8r0t2v4x6z
components:
  schemas:
    Error:
      type: object
      required:
        - object
        - code
        - message
        - status
      properties:
        object:
          type: string
          enum:
            - error
        code:
          type: string
          enum:
            - UNAUTHORIZED
            - FORBIDDEN
            - INSUFFICIENT_SCOPE
            - PROJECT_NOT_FOUND
            - PAGE_NOT_FOUND
            - STALE_PAGE
            - STALE_PROJECT
            - STALE_TRANSLATION
            - TRANSLATION_UNIT_NOT_FOUND
            - SERVICE_UNAVAILABLE
            - CONFLICT
            - PRECONDITION_REQUIRED
            - INVALID_PARAMS
            - INTERNAL_ERROR
        message:
          type: string
        status:
          type: integer
        details:
          description: >-
            Optional machine-readable context, for example the clashing handles
            of a 409 CONFLICT.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: WEAVERSE_API_KEY
      description: >-
        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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.