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

# Get version

> Authorized immutable source Manifest plus separate live availability and relation expansion. Available links supply current eligible target Record and Version IDs; unavailable links reveal no resolved target IDs or absence/access reason. Historical lookup grants no new rights.



## OpenAPI

````yaml /openapi.yaml get /v0/records/{record_id}/versions/{version_id}
openapi: 3.1.0
info:
  title: Quivr V2 public text foundation contract
  version: 0.0.0-draft
  description: >-
    THE-543 and THE-547 evaluation contracts; endpoint implementations are
    separate work. Matching criterion is plugin-owned and deferred. One
    configured webhook destination, immutable Matches, independent at-least-once
    Delivery and reference-only notifications. OpenAPI is authoritative for
    transport shapes. THE-640 adds text search and asynchronous Corpus
    projection rebuild initiation.
servers: []
security:
  - ApiKey: []
paths:
  /v0/records/{record_id}/versions/{version_id}:
    get:
      tags:
        - Records
      summary: Get version
      description: >-
        Authorized immutable source Manifest plus separate live availability and
        relation expansion. Available links supply current eligible target
        Record and Version IDs; unavailable links reveal no resolved target IDs
        or absence/access reason. Historical lookup grants no new rights.
      operationId: getVersion
      parameters:
        - name: record_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
        - name: version_id
          in: path
          required: true
          schema:
            type: string
            minLength: 1
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Version'
        default:
          description: >-
            Structured error. 400 malformed; 401 unauthenticated; 403 forbidden
            action; 404 absent or inaccessible; 409 conflict; 413 oversized; 422
            invalid input; 429 throttled; 503 temporary failure.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Version:
      type: object
      additionalProperties: false
      properties:
        record_id:
          type: string
          minLength: 1
        version_id:
          type: string
          minLength: 1
        accepted_at:
          type: string
          format: date-time
          description: >-
            When Quivr accepted the revision this Version publishes, before any
            processing.
        manifest:
          $ref: '#/components/schemas/ManifestContent'
        extensions:
          $ref: '#/components/schemas/Extensions'
        provenance:
          $ref: '#/components/schemas/Provenance'
        availability:
          $ref: '#/components/schemas/Availability'
        relations:
          type: array
          items:
            $ref: '#/components/schemas/ResolvedRelation'
        processing:
          $ref: '#/components/schemas/ProcessingSummary'
        diagnostics:
          type: array
          items:
            $ref: '#/components/schemas/Diagnostic'
          maxItems: 20
          description: >-
            Why the Version needs attention. A quarantined Version lists its
            reason first. A Version published through an optional route's
            fallback lists the normalizer failure it fell back from, and a
            recorded normalizer_conflict is listed on the Version whose output
            was kept. Omitted when there is nothing to report.
      required:
        - record_id
        - version_id
        - manifest
        - availability
        - relations
        - processing
    Error:
      type: object
      additionalProperties: false
      properties:
        code:
          type: string
          minLength: 1
        message:
          type: string
          minLength: 1
        retryable:
          type: boolean
        field:
          type: string
          minLength: 1
          description: >-
            JSON Pointer (RFC 6901) to the request member that caused a 422,
            when known (for example /config/url or /credential/secret/token on
            connector commands).
        resync_url:
          type: string
          format: uri-reference
      required:
        - code
        - message
        - retryable
    ManifestContent:
      type: object
      additionalProperties: false
      properties:
        kind:
          type: string
          enum:
            - manifest
        parts:
          type: array
          items:
            $ref: '#/components/schemas/Part'
          minItems: 1
        relations:
          type: array
          items:
            $ref: '#/components/schemas/RelationInput'
      required:
        - kind
        - parts
      description: >-
        Unique Part keys, acyclic parent references within this Manifest, and
        verified same-Organization Blobs are checked before atomic publication.
        These semantic constraints need server validation in addition to JSON
        Schema.
    Extensions:
      type: object
      additionalProperties:
        type: object
        additionalProperties: false
        properties:
          schema_version:
            type: string
            minLength: 1
          data:
            type: object
            additionalProperties: true
        required:
          - schema_version
          - data
      description: >-
        Keys are plugin namespaces. Data is validated against the installed
        schema version; source data is not a computed Annotation.
    Provenance:
      type: object
      additionalProperties: false
      properties:
        source_blob_ids:
          type: array
          items:
            type: string
            minLength: 1
        producer:
          type: string
          minLength: 1
        producer_version:
          type: string
          minLength: 1
        normalization:
          $ref: '#/components/schemas/NormalizationProvenance'
      required: []
    Availability:
      type: object
      additionalProperties: false
      properties:
        state:
          type: string
          enum:
            - materialized
            - building_baseline
            - retrieval_ready
            - quarantined
        is_current:
          type: boolean
        searchable:
          type: boolean
      required:
        - state
        - is_current
        - searchable
    ResolvedRelation:
      type: object
      additionalProperties: false
      required:
        - source_reference
        - status
      properties:
        source_reference:
          $ref: '#/components/schemas/RelationInput'
        status:
          type: string
          enum:
            - available
            - unavailable
        target_record_id:
          type: string
        target_version_id:
          type: string
      description: >-
        Separate live view, not a mutation of the source Manifest. Unavailable
        covers missing, unready, withdrawn and inaccessible without
        distinguishing existence or revealing resolved target IDs.
      if:
        properties:
          status:
            const: available
      then:
        required:
          - target_record_id
          - target_version_id
      else:
        not:
          anyOf:
            - required:
                - target_record_id
            - required:
                - target_version_id
    ProcessingSummary:
      type: object
      additionalProperties: false
      required:
        - state
      properties:
        state:
          type: string
          enum:
            - queued
            - running
            - retrying
            - blocked
            - idle
        phase:
          type: string
          enum:
            - materialization
            - baseline
            - enrichment
        message:
          type: string
      description: >-
        Live read view, not a Receipt lifecycle or public workflow identifier.
        blocked means an outstanding contribution needs intervention;
        diagnostics describe why. idle means no work currently pending, not a
        promise of final enrichment. Phase is omitted when idle; required and
        optional progress do not override Version Availability.
    Diagnostic:
      type: object
      additionalProperties: false
      description: >-
        A structured processing diagnostic. plugin, contribution and
        invocation_id name the external

        invocation a normalization diagnostic concerns. Codes of external
        normalization:


        - normalizer_failed: the normalizer answered a terminal error. The
        Version is quarantined.

        - normalizer_invalid_output: the output broke the Plugin Protocol or the
        Manifest rules (schema,
          malformed or duplicate Part, a Blob Part that is not the input Blob or has another checksum,
          an undeclared extension namespace, too many Parts, a response over the size bound). Nothing
          from it is published; the Version is quarantined.
        - normalizer_timeout: the invocations kept exceeding the timeout until
        the retry budget (the
          manifest's retry.max_attempts, capped by the engine at 5) was spent. The Version is quarantined.
        - normalizer_retries_exhausted: the normalizer kept answering retryable
        errors until the retry
          budget was spent. The Version is quarantined.
        - input_unverified: the input Blob was no longer the verified accepted
        input. The Version is
          quarantined.
        - normalizer_unrouted: the media type's route was removed after
        acceptance and the built-in text
          path cannot read it (a text/* Blob takes the built-in text path instead). The Version is
          quarantined.
        - normalization_superseded: a newer revision of the Record was accepted
        before this Version was
          normalized, so the normalizer was not invoked. The Version is quarantined and never current.
        - normalizer_conflict: a later invocation with the same idempotency key
        returned a different
          output. The first recorded output is kept and published; nothing is overwritten.

        On an optional route every quarantining code above that comes from the
        normalizer is instead

        listed on a searchable Version published through the built-in text path.
        A plugin that is

        unavailable (connection failure, 5xx without an error envelope,
        discovery that does not match the

        pinned manifest) is retried with backoff and never produces a diagnostic
        here; the Receipt shows

        plugin_unavailable while it retries. Quarantined Versions keep their
        input reference and reason;

        reprocessing them is not available yet.
      properties:
        code:
          type: string
          minLength: 1
        message:
          type: string
          minLength: 1
        retryable:
          type: boolean
          description: Whether the same input may succeed if processed again.
        plugin:
          type: string
          minLength: 1
          description: Plugin id of the invocation.
        contribution:
          type: string
          minLength: 1
        invocation_id:
          type: string
          minLength: 1
      required:
        - code
        - message
        - retryable
    Part:
      type: object
      additionalProperties: false
      properties:
        key:
          type: string
          minLength: 1
        parent_key:
          type: string
          minLength: 1
        role:
          type: string
          minLength: 1
        content:
          oneOf:
            - $ref: '#/components/schemas/TextContent'
            - $ref: '#/components/schemas/BlobContent'
        extensions:
          $ref: '#/components/schemas/Extensions'
      required:
        - key
        - role
        - content
    RelationInput:
      type: object
      additionalProperties: false
      properties:
        type:
          type: string
          minLength: 1
        target:
          $ref: '#/components/schemas/SourceIdentity'
        source_target_revision:
          type: string
          minLength: 1
      required:
        - type
        - target
      description: >-
        Source-provided link to an independently identified Record in the same
        Organization. Optional source revision preserves provenance; ordinary
        expansion resolves the current eligible target. Missing targets do not
        block readiness. Every expansion reauthorizes the target. Precise
        Part-target syntax remains outside this initial draft.
    NormalizationProvenance:
      type: object
      additionalProperties: false
      description: >-
        Engine-owned record of the external normalizer invocation whose output a
        Record Version publishes. Present only on read; a submission that sets
        it is rejected. producer and producer_version keep naming the acquirer,
        and source_blob_ids keeps the input Blob.
      properties:
        plugin_id:
          type: string
          minLength: 1
          maxLength: 64
        plugin_version:
          type: string
          minLength: 1
          maxLength: 64
        plugin_api:
          type: string
          minLength: 1
          maxLength: 32
          description: Plugin API version the engine invoked.
        contribution:
          type: string
          enum:
            - normalizer
        invocation_id:
          type: string
          minLength: 1
          maxLength: 128
        idempotency_key:
          type: string
          minLength: 1
          maxLength: 256
        input_sha256:
          type: string
          pattern: ^[0-9a-f]{64}$
        fallback:
          type: object
          additionalProperties: false
          description: >-
            Present when the route is optional and the normalizer failed: the
            published Manifest comes from the built-in text path, and
            invocation_id names the failed invocation.
          properties:
            code:
              type: string
              minLength: 1
              maxLength: 64
            message:
              type: string
              minLength: 1
              maxLength: 1000
          required:
            - code
            - message
      required:
        - plugin_id
        - plugin_version
        - plugin_api
        - contribution
        - invocation_id
        - idempotency_key
        - input_sha256
    TextContent:
      type: object
      additionalProperties: false
      properties:
        kind:
          type: string
          enum:
            - text
        text:
          type: string
          minLength: 1
      required:
        - kind
        - text
    BlobContent:
      type: object
      additionalProperties: false
      properties:
        kind:
          type: string
          enum:
            - blob
        blob_id:
          type: string
          minLength: 1
        media_type:
          type: string
          minLength: 1
      required:
        - kind
        - blob_id
        - media_type
    SourceIdentity:
      type: object
      additionalProperties: false
      properties:
        corpus_id:
          type: string
          minLength: 1
        namespace:
          type: string
          minLength: 1
        record_key:
          type: string
          minLength: 1
      required:
        - corpus_id
        - namespace
        - record_key
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: >-
        API key, not necessarily a JWT. Server derives Organization, permitted
        actions and Corpus scope; every resource access is authorized.

````