> ## 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

# List page versions, theme versions or the schedule

> Lists the project's publish history. Which list you get depends on the query:

- `?pageId=<id>`: that page's versions, newest first: history versions and drafts that were published. Unpublished drafts are not listed; read the current draft with `GET /projects/{projectId}/page-drafts/{pageId}`. Takes precedence over `kind`.
- `?kind=theme`: the project's theme versions, newest first.
- `?kind=retired-pages`: history versions whose page assignment no longer exists in this project, for recovery with `restore`. Each row includes `page.name`.
- `?kind=scheduled` (default): the schedule. `data` is an object with `pages` (page versions that are `SCHEDULED`, `PUBLISHED` or `CANCELLED`, with their `page`), `themes` (theme versions in the same states) and `deferredRecaptureCandidates` (`pageId`s of deferred catch-all versions that still need a content recapture through `PUT /versions/{versionId}` with `type: "deferred-page"`).

`limit` defaults to 30 and is capped at 100. It applies to `?pageId=`, `kind=theme` and `kind=retired-pages`; the scheduled list is not limited. Any other `kind` value is 400.

Use a returned version `id` with `/versions/{versionId}` to read, reschedule, replace or cancel it, or with `schedule`, `publish-now` and `restore`.

Required scope: `content:read`



## OpenAPI

````yaml https://studio.weaverse.io/api/v1/content/openapi.json get /projects/{projectId}/versions
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:
  /projects/{projectId}/versions:
    summary: 'Publish history: page versions, theme versions, schedule, retired'
    description: >-
      ?pageId=<id> lists that page versions; ?kind=theme lists theme versions;
      ?kind=retired-pages lists retired page versions (recovery); default
      (?kind=scheduled) lists the current schedule (page + theme).
    parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      - name: pageId
        in: query
        schema:
          type: string
      - name: kind
        in: query
        schema:
          type: string
          enum:
            - theme
            - retired-pages
            - scheduled
      - name: limit
        in: query
        schema:
          type: integer
          maximum: 100
        description: >-
          Maximum rows (default 30, max 100) for ?pageId=, kind=theme and
          kind=retired-pages; the scheduled list is not limited.
    get:
      tags:
        - Drafts and publishing
      summary: List page versions, theme versions or the schedule
      description: >-
        Lists the project's publish history. Which list you get depends on the
        query:


        - `?pageId=<id>`: that page's versions, newest first: history versions
        and drafts that were published. Unpublished drafts are not listed; read
        the current draft with `GET /projects/{projectId}/page-drafts/{pageId}`.
        Takes precedence over `kind`.

        - `?kind=theme`: the project's theme versions, newest first.

        - `?kind=retired-pages`: history versions whose page assignment no
        longer exists in this project, for recovery with `restore`. Each row
        includes `page.name`.

        - `?kind=scheduled` (default): the schedule. `data` is an object with
        `pages` (page versions that are `SCHEDULED`, `PUBLISHED` or `CANCELLED`,
        with their `page`), `themes` (theme versions in the same states) and
        `deferredRecaptureCandidates` (`pageId`s of deferred catch-all versions
        that still need a content recapture through `PUT /versions/{versionId}`
        with `type: "deferred-page"`).


        `limit` defaults to 30 and is capped at 100. It applies to `?pageId=`,
        `kind=theme` and `kind=retired-pages`; the scheduled list is not
        limited. Any other `kind` value is 400.


        Use a returned version `id` with `/versions/{versionId}` to read,
        reschedule, replace or cancel it, or with `schedule`, `publish-now` and
        `restore`.


        Required scope: `content:read`
      operationId: listVersions
      responses:
        '200':
          description: Version list
          content:
            application/json:
              schema:
                type: object
              example:
                object: list
                data:
                  - 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: 0
                    createdAt: '2026-10-08T10:05:00.000Z'
                    publishAt: null
                    publishedAt: '2026-10-08T10:05:00.000Z'
                    status: PUBLISHED
                  - id: clz8hst6e8g0i2k4m6o8q0s2
                    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: 0
                    createdAt: '2026-10-01T08:00:00.000Z'
                    publishAt: null
                    publishedAt: null
                    status: ACTIVE
        '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'
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.