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

# Verify Snapshot Restore-Readiness

> Read-only pre-flight check that a snapshot can actually be restored. Restore is lenient and silently skips missing artifacts, so this surfaces what a restore would drop (missing collection dumps, unreachable vectors, absent copied objects) BEFORE you depend on it in a recovery. Pass deep=true to also decompress each collection dump and detect truncation.



## OpenAPI

````yaml get /v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify
openapi: 3.1.0
info:
  title: Mixpeek API
  description: >-
    This is the Mixpeek API, providing access to various endpoints for data
    processing and retrieval.
  termsOfService: https://mixpeek.com/terms
  contact:
    name: Mixpeek Support
    url: https://mixpeek.com/contact
    email: info@mixpeek.com
  version: '0.82'
servers:
  - url: https://api.mixpeek.com
    description: Production
security:
  - BearerAuth: []
paths:
  /v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify:
    get:
      tags:
        - Namespace Snapshots
      summary: Verify Snapshot Restore-Readiness
      description: >-
        Read-only pre-flight check that a snapshot can actually be restored.
        Restore is lenient and silently skips missing artifacts, so this
        surfaces what a restore would drop (missing collection dumps,
        unreachable vectors, absent copied objects) BEFORE you depend on it in a
        recovery. Pass deep=true to also decompress each collection dump and
        detect truncation.
      operationId: >-
        verify_snapshot_v1_namespaces__namespace_identifier__snapshots__snapshot_id__verify_get
      parameters:
        - name: namespace_identifier
          in: path
          required: true
          schema:
            type: string
            description: Namespace name or ID
            title: Namespace Identifier
          description: Namespace name or ID
        - name: snapshot_id
          in: path
          required: true
          schema:
            type: string
            description: Snapshot ID to verify (e.g. snap_xxxxxxxxxxxx)
            title: Snapshot Id
          description: Snapshot ID to verify (e.g. snap_xxxxxxxxxxxx)
        - name: deep
          in: query
          required: false
          schema:
            type: boolean
            description: Also decompress each collection dump to detect truncated artifacts
            default: false
            title: Deep
          description: Also decompress each collection dump to detect truncated artifacts
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SnapshotVerifyResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    SnapshotVerifyResponse:
      properties:
        snapshot_id:
          type: string
          title: Snapshot Id
        status:
          type: string
          title: Status
        restorable:
          type: boolean
          title: Restorable
          description: >-
            True iff there are no error-severity issues (a clean restore is
            possible)
        issues:
          items:
            $ref: '#/components/schemas/SnapshotVerifyIssue'
          type: array
          title: Issues
        collections_verified:
          type: integer
          title: Collections Verified
          description: Count of expected (non-empty) collection dumps found present
          default: 0
        vector_source:
          anyOf:
            - type: string
            - type: 'null'
          title: Vector Source
          description: >-
            Where vectors would restore from: 'self', the shard-representative
            prefix (coalesced), 'none', or null if unresolved
        vector_capture:
          type: string
          title: Vector Capture
          description: >-
            Deep-verify per-point vector NON-emptiness verdict. 'measured_ok':
            captured points carry non-empty vectors. 'measured_degraded': a
            significant fraction carry EMPTY vectors — the Raw-absence signature
            (a raw-less point scrolls back with vectors=[] yet counts as
            captured), so a restore would be searchable-degraded even though the
            point-count guard passed. 'could_not_measure': not deep-verified,
            metadata-only, or unreadable. Three-valued by design —
            could_not_measure must never render as ok (a boolean would collapse
            incapacity into the healthy value).
          default: could_not_measure
        frontier:
          anyOf:
            - $ref: '#/components/schemas/SnapshotFrontier'
            - type: 'null'
          description: The frontier read back from the stored manifest.json
        mongo_backup:
          anyOf:
            - $ref: '#/components/schemas/BackupCoverage'
            - type: 'null'
          description: >-
            Whether the plane's Mongo backups can restore to the snapshot's
            recorded cluster time, asked at verify time
        digests_verified:
          type: integer
          title: Digests Verified
          description: >-
            Artifacts whose sha256 was recomputed and matched the manifest (deep
            verify only)
          default: 0
        last_restore:
          anyOf:
            - $ref: '#/components/schemas/RestoreReport'
            - type: 'null'
          description: >-
            The report of the most recent restore from this snapshot: what each
            collection restored, the vector counts, and retriever parity. Absent
            until a restore from this snapshot finishes.
      type: object
      required:
        - snapshot_id
        - status
        - restorable
      title: SnapshotVerifyResponse
      description: >-
        Result of a read-only pre-flight check that a snapshot can be restored.


        Restore itself is LENIENT — a missing collection dump is caught and
        logged

        as a warning, so restore reports success while SILENTLY dropping data.
        This

        check surfaces exactly what restore would skip BEFORE you depend on it
        in a

        recovery, by re-validating the snapshot's object-store artifacts against
        the

        manifest it claims to hold (no materialization).
    ErrorResponse:
      properties:
        success:
          type: boolean
          title: Success
          description: Always false for error responses
          default: false
        status:
          type: integer
          title: Status
          description: HTTP status code for this error
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: Error details payload
      type: object
      required:
        - status
        - error
      title: ErrorResponse
      description: Error response model.
      examples:
        - error:
            details:
              id: ns_123
              resource: namespace
            message: Namespace not found
            type: NotFoundError
          status: 404
          success: false
    SnapshotVerifyIssue:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable issue code, e.g. 'missing_collection_dump'
        severity:
          type: string
          title: Severity
          description: >-
            'error' (blocks a clean restore) or 'warning' (degraded but
            restorable)
        detail:
          type: string
          title: Detail
          description: Human-readable explanation of what restore would do/lose
      type: object
      required:
        - code
        - severity
        - detail
      title: SnapshotVerifyIssue
    SnapshotFrontier:
      properties:
        consistency:
          type: string
          title: Consistency
          description: >-
            'bracketed': each store's capture lies between its recorded start
            and end positions
          default: bracketed
        mongo:
          $ref: '#/components/schemas/MongoFrontier'
        vectors:
          $ref: '#/components/schemas/VectorFrontier'
        objects:
          $ref: '#/components/schemas/ObjectFrontier'
        config_yaml:
          anyOf:
            - type: string
            - type: 'null'
          title: Config Yaml
          description: >-
            The namespace's configuration exported as a manifest YAML, secrets
            replaced by placeholders
        config_yaml_error:
          anyOf:
            - type: string
            - type: 'null'
          title: Config Yaml Error
        digests:
          additionalProperties:
            $ref: '#/components/schemas/ArtifactDigest'
          type: object
          title: Digests
          description: >-
            sha256 and size of every artifact, keyed by path under the snapshot
            prefix
        schema_versions:
          additionalProperties:
            anyOf:
              - type: integer
              - type: string
          type: object
          title: Schema Versions
          description: Format version of the manifest and of each artifact kind
        secrets:
          items:
            $ref: '#/components/schemas/SecretVersion'
          type: array
          title: Secrets
          description: Organization secrets by name and version at snapshot time
      type: object
      title: SnapshotFrontier
      description: >-
        Where each store stood when the snapshot was taken.


        Each half is read before and after its capture, so a restore knows the
        window

        the data lies in. ``consistency`` names that tier.
    BackupCoverage:
      properties:
        provider:
          type: string
          title: Provider
          description: 'Backup binding that answered: ''pbm'' or ''atlas'''
        covered:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Covered
          description: >-
            True when the instant is restorable from a completed base backup
            plus continuous oplog; False when it is not; null when the provider
            could not be asked
        base_backup:
          anyOf:
            - type: string
            - type: 'null'
          title: Base Backup
          description: Name of the base backup a restore starts from
        base_backup_time:
          anyOf:
            - type: integer
            - type: 'null'
          title: Base Backup Time
          description: Cluster time seconds the base backup ends at
        oplog_end_time:
          anyOf:
            - type: integer
            - type: 'null'
          title: Oplog End Time
          description: >-
            Cluster time seconds the continuous oplog reaches from the base
            backup
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
          description: Why the instant is not covered or not known
      type: object
      required:
        - provider
        - covered
      title: BackupCoverage
    RestoreReport:
      properties:
        snapshot_id:
          type: string
          title: Snapshot Id
        target_namespace_id:
          type: string
          title: Target Namespace Id
        complete:
          type: boolean
          title: Complete
          description: >-
            True iff every non-empty collection AND the vectors were fully
            restored
        collections:
          items:
            $ref: '#/components/schemas/RestoreCollectionOutcome'
          type: array
          title: Collections
        vector_expected:
          type: integer
          title: Vector Expected
          default: 0
        vector_restored:
          type: integer
          title: Vector Restored
          default: 0
        vector_source:
          anyOf:
            - type: string
            - type: 'null'
          title: Vector Source
        vector_status:
          type: string
          title: Vector Status
          description: >-
            'restored', 'partial', 'failed', or 'none' (snapshot carried no
            vectors)
          default: none
        skipped_summary:
          items:
            type: string
          type: array
          title: Skipped Summary
          description: >-
            Human-readable list of everything not fully restored (empty when
            complete)
        retriever_parity:
          items:
            $ref: '#/components/schemas/RetrieverParityResult'
          type: array
          title: Retriever Parity
          description: >-
            Top-k parity per retriever between the source and the restored
            namespace; filled for a restore into a different namespace
        restore_point:
          anyOf:
            - type: string
            - type: 'null'
          title: Restore Point
          description: The restore_point the vectors were restored to
        resolved_seq:
          anyOf:
            - type: integer
            - type: 'null'
          title: Resolved Seq
          description: The WAL seq the shard's replica actually reached (frontier_seq)
        fork_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Fork Id
          description: The point-in-time replica the vectors were read from
        write_gap:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Write Gap
          description: >-
            For a restore beside the source: objects the source gained or
            changed after the snapshot's capture began, copied into the copy and
            re-queued for extraction (cutoff, new_since_snapshot,
            changed_since_snapshot, requeued, batches, refused with reasons)
      type: object
      required:
        - snapshot_id
        - target_namespace_id
        - complete
      title: RestoreReport
      description: >-
        Outcome of a restore: exactly what was restored vs skipped.


        Restore is lenient (it warns + continues on a missing/corrupt dump), so
        a

        'completed' restore can be silently incomplete. This report records the

        per-collection and vector outcomes and a single ``complete`` flag so a

        partial restore is never mistaken for a clean one.
    ErrorDetail:
      properties:
        message:
          type: string
          title: Message
          description: Human-readable error message
        type:
          type: string
          title: Type
          description: Stable error type identifier (machine-readable)
        code:
          anyOf:
            - type: string
            - type: 'null'
          title: Code
          description: >-
            Fine-grained error code for programmatic handling (e.g.,
            namespace_name_taken, feature_extractor_not_found). Present only
            when consumers may need to branch on a specific error condition.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Optional structured details to help debugging (validation errors,
            IDs, etc.)
      type: object
      required:
        - message
        - type
      title: ErrorDetail
      description: Error detail model.
    MongoFrontier:
      properties:
        read_concern:
          type: string
          title: Read Concern
          description: Read concern the cluster time was read under
          default: snapshot
        cluster_time_start:
          anyOf:
            - $ref: '#/components/schemas/ClusterTime'
            - type: 'null'
          description: Cluster time read before the collection dumps began
        cluster_time_end:
          anyOf:
            - $ref: '#/components/schemas/ClusterTime'
            - type: 'null'
          description: Cluster time read after the collection dumps finished
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
          description: Why a cluster time could not be read, when it could not
      type: object
      title: MongoFrontier
    VectorFrontier:
      properties:
        capture_mode:
          type: string
          title: Capture Mode
          description: >-
            'scroll_bracketed': vectors were exported by a scroll while writes
            continued, so the export lies between shards_start and shards_end
            and matches no single commit. 'not_captured': this snapshot exported
            no vectors.
          default: scroll_bracketed
        shards_start:
          additionalProperties:
            $ref: '#/components/schemas/ShardFrontier'
          type: object
          title: Shards Start
          description: Per-shard frontier read before the export
        shards_end:
          additionalProperties:
            $ref: '#/components/schemas/ShardFrontier'
          type: object
          title: Shards End
          description: Per-shard frontier read after the export
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
      type: object
      title: VectorFrontier
    ObjectFrontier:
      properties:
        generation_cutoff:
          anyOf:
            - type: integer
            - type: 'null'
          title: Generation Cutoff
          description: >-
            Highest object generation in the recorded inventory (GCS); null on
            stores without generations
        last_modified_cutoff:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Modified Cutoff
          description: Latest last-modified time in the recorded inventory
        objects_listed:
          type: integer
          title: Objects Listed
          default: 0
      type: object
      title: ObjectFrontier
    ArtifactDigest:
      properties:
        sha256:
          type: string
          title: Sha256
        size:
          type: integer
          title: Size
      type: object
      required:
        - sha256
        - size
      title: ArtifactDigest
    SecretVersion:
      properties:
        name:
          type: string
          title: Name
        version:
          type: string
          title: Version
          description: >-
            Version name of the stored value at snapshot time; the value itself
            is never recorded
      type: object
      required:
        - name
        - version
      title: SecretVersion
    RestoreCollectionOutcome:
      properties:
        collection:
          type: string
          title: Collection
        expected:
          type: integer
          title: Expected
        restored:
          type: integer
          title: Restored
        status:
          type: string
          title: Status
          description: >-
            'restored' (full), 'partial' (restored < expected), 'failed', or
            'skipped' (left out on purpose: a restore beside the source does not
            clone history, telemetry or secrets)
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
      type: object
      required:
        - collection
        - expected
        - restored
        - status
      title: RestoreCollectionOutcome
    RetrieverParityResult:
      properties:
        retriever_name:
          type: string
          title: Retriever Name
        status:
          type: string
          title: Status
          description: >-
            'match' (same ordered top-k), 'mismatch', 'skipped' (no probe
            input), 'missing_in_target', or 'error'
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
        probe_inputs:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Probe Inputs
        source_top_k:
          items:
            type: string
          type: array
          title: Source Top K
        target_top_k:
          items:
            type: string
          type: array
          title: Target Top K
        overlap:
          anyOf:
            - type: integer
            - type: 'null'
          title: Overlap
          description: Document ids the two top-k lists share
      type: object
      required:
        - retriever_name
        - status
      title: RetrieverParityResult
      description: One retriever's top-k answer in the source vs the restored namespace.
    ClusterTime:
      properties:
        t:
          type: integer
          title: T
          description: Mongo cluster time seconds component
        i:
          type: integer
          title: I
          description: Mongo cluster time increment component
      type: object
      required:
        - t
        - i
      title: ClusterTime
    ShardFrontier:
      properties:
        history_id:
          type: string
          title: History Id
          description: WAL lineage of the shard
          default: ''
        durable_confirmed_seq:
          type: integer
          title: Durable Confirmed Seq
          description: WAL seq of the shard's last durable snapshot
          default: 0
        shipped_wal_highwater:
          type: integer
          title: Shipped Wal Highwater
          description: Newest sealed and shipped WAL seq
          default: 0
        frontier_seq:
          type: integer
          title: Frontier Seq
          description: >-
            max(durable_confirmed_seq, shipped_wal_highwater): every write at or
            below this seq survives a cold restore of the shard
          default: 0
        note:
          anyOf:
            - type: string
            - type: 'null'
          title: Note
          description: >-
            Why the shard reported no WAL lineage for this namespace, e.g. a
            namespace served from a shared dataset
      type: object
      title: ShardFrontier
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Mixpeek API key, sent as `Authorization: Bearer mxp_sk_...`. Create one
        in Studio under Settings → API Keys, or with an admin key via `POST
        /v1/organizations/users/{user_email}/api-keys`. A missing, malformed,
        unknown, revoked, inactive or expired key returns 401; a key without the
        permission, scope or plan an operation needs returns 403.

````

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