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

# List an agent's saved versions

> Every saved version of one agent, newest first: its version number, when it was saved, and whether it belongs to a draft. Versions only, no configuration: read one version's configuration with getAssistantVersion. Every save creates a version, including a save that changed only metadata, so two consecutive versions can carry the same configuration. A draft of a published agent is a separate agent with its own id and its own history: to follow a draft's saves, pass the draft's id (`metadata.draftAssistantId` on the published agent getAssistant returns). `id`/`role` are the same pair getAssistant takes; a `tenant`/`id` your credentials do not cover — including an id from a project your credentials don't reach on this tenant — answers the same 404 as an id that does not exist.



## OpenAPI

````yaml api-reference/specs/claudia/v1.json GET /v1/tenants/{tenant}/assistants/{id}/versions
openapi: 3.0.1
info:
  title: Claudia API
  version: 1.0.0
servers:
  - url: https://api.cloudhumans.com/claudia
    description: Production
  - url: https://api.cloudhumans.com/claudia/staging
    description: Staging
security:
  - bearerAuth: []
tags:
  - name: MCP Servers
    description: >-
      The MCP servers your agents can call tools on. Registering one here is
      what makes its tools selectable in an agent; the credentials it needs are
      stored encrypted and never read back.
  - name: Knowledge Base Content
    description: Read, search and edit the content that answers your customers.
  - name: Content Quality
    description: Rewrites proposed for content that is answering your customers badly.
  - name: Playground
    description: >-
      Talk to one of your agents as if you were a customer, without touching a
      real conversation.
  - name: Project Settings
    description: >-
      Read and change how a ClaudIA project behaves — the settings screens of
      the ClaudIA app, as an API.
  - name: Content Improvements
    description: Answers Claudia proposes for questions your content does not cover yet.
  - name: Knowledge Bases
    description: The knowledge bases your account can manage.
  - name: Content Sources
    description: The sites Claudia crawls to keep a knowledge base in sync.
  - name: Agents
    description: >-
      The AI agents (assistants) configured for your tenant: the orchestrator
      (supervisor) and its specialists (react). Reads answer the same
      passthrough shape the platform stores; creates land as DRAFTS a human
      reviews and publishes in the app.
  - name: Agent Tools
    description: >-
      The tool catalog your agents can be given, aggregated across every MCP
      server registered for the tenant. This is the same catalog an assistant's
      mcp_servers[].tools whitelist is validated against.
  - name: Conversations
    description: >-
      Read access to a conversation's lean investigation summary — messages,
      status and resolution — and the execution trace behind one of its
      processed messages, without the internal processing state the hub UI's
      full read carries.
paths:
  /v1/tenants/{tenant}/assistants/{id}/versions:
    get:
      tags:
        - Agents
      summary: List an agent's saved versions
      description: >-
        Every saved version of one agent, newest first: its version number, when
        it was saved, and whether it belongs to a draft. Versions only, no
        configuration: read one version's configuration with
        getAssistantVersion. Every save creates a version, including a save that
        changed only metadata, so two consecutive versions can carry the same
        configuration. A draft of a published agent is a separate agent with its
        own id and its own history: to follow a draft's saves, pass the draft's
        id (`metadata.draftAssistantId` on the published agent getAssistant
        returns). `id`/`role` are the same pair getAssistant takes; a
        `tenant`/`id` your credentials do not cover — including an id from a
        project your credentials don't reach on this tenant — answers the same
        404 as an id that does not exist.
      operationId: listAssistantVersions
      parameters:
        - name: tenant
          in: path
          description: >-
            Tenant whose agents you are managing. Discover the tenants your
            credentials cover with `listMyClaudiaProjects`. A tenant your
            credentials do not cover is indistinguishable from one that does not
            exist.
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: >-
            Assistant to operate on, as returned by listAssistants
            (`assistant_id` field).
          required: true
          schema:
            type: string
        - name: role
          in: query
          description: >-
            Deployment the assistant lives in: `supervisor` (orchestrator
            agents) or `react` (specialist agents), plus `qna` for
            knowledge-base Q&A agents. Read them with that role; they are
            CREATED through proposeAssistantCreate as `deployment: react` with
            `graphId: qna_agent`, and the platform derives the `qna` role from
            the graph. listAssistants returns it as `deployment_role` on each
            row — pass that value back here verbatim.
          required: true
          schema:
            type: string
            enum:
              - supervisor
              - react
              - qna
        - name: page
          in: query
          description: >-
            Page index, counting from 0. Versions come newest first. Page with
            `hasMore` from the response. A negative value reads page 0.
          required: false
          schema:
            type: integer
            format: int32
            default: 0
          example: 0
        - name: size
          in: query
          description: >-
            Page size, from 1 to 10: a value outside that range is clamped to
            it, and the response echoes the size applied.
          required: false
          schema:
            type: integer
            format: int32
            default: 10
          example: 10
      responses:
        '200':
          description: One page of versions, newest first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssistantVersionPage'
        '400':
          description: The request could not be answered as written.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, expired or invalid credentials.
        '403':
          description: The credentials hold no account allowed to manage this content.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: >-
            No such resource, or none these credentials can reach — the two are
            deliberately indistinguishable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: >-
            `id` is not a full assistant id — typically a truncated one echoed
            back from an earlier answer. Carries `error`
            (`invalid_assistant_id`) and `message`, which names the full
            candidates the prefix matches so you can retry with one of them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: >-
                      Machine-readable cause — always `invalid_assistant_id` on
                      this response.
                  message:
                    type: string
                    description: >-
                      Names the full assistant ids the truncated one you sent
                      matches, with each candidate's deployment role.
                additionalProperties: true
                description: >-
                  Carries `error` (always `invalid_assistant_id`) and `message`,
                  which names the full assistant ids the truncated one you sent
                  matches, with each candidate's deployment role.
        '429':
          description: Rate limit applied by the API gateway. Back off and retry.
components:
  schemas:
    AssistantVersionPage:
      required:
        - hasMore
        - items
        - page
        - size
      type: object
      properties:
        items:
          type: array
          description: The versions on this page, newest first.
          items:
            $ref: '#/components/schemas/AssistantVersion'
        page:
          type: integer
          description: Page index this page was read at.
          format: int32
          example: 0
        size:
          type: integer
          description: Page size actually applied (capped at 10).
          format: int32
          example: 10
        hasMore:
          type: boolean
          description: Whether another page follows.
          example: true
      description: One page of an agent's versions, newest first.
    Error:
      required:
        - error
      type: object
      properties:
        error:
          type: string
          description: What went wrong.
          example: 'Forbidden: token holds no claim for the requested account'
      description: Something the caller needs to fix.
    AssistantVersion:
      required:
        - isDraft
        - version
      type: object
      properties:
        version:
          type: integer
          description: >-
            Version number, counting up from 1 with every save. Pass it to
            getAssistantVersion to read that version.
          format: int64
          example: 147
        createdAt:
          type: string
          description: When this version was saved, as an ISO-8601 timestamp.
          nullable: true
          example: '2026-09-29T14:04:04.006783+00:00'
        isDraft:
          type: boolean
          description: >-
            Reflects `metadata.isDraft` as saved in that version; absent or null
            reads as false.
          example: false
      description: One saved version of an agent.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````