---
title: "Get Snapshot"
method: GET
path: "/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}"
tags: ["Namespace Snapshots"]
---

# Get Snapshot

`GET /v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}`

## Request

- Base URL: `https://api.mixpeek.com`
- URL: `https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}`
- Auth: HTTP bearer

Get details of a specific snapshot. With download=true the response also carries a signed URL and the sha256 for every artifact (configuration, Mongo dumps, vector export, object manifest), valid for one hour, so you can download the namespace.

## Path parameters

- `namespace_identifier` string, required: Namespace name or ID
- `snapshot_id` string, required: Snapshot ID (e.g. snap_xxxxxxxxxxxx)

## Query parameters

- `download` boolean: Return signed download URLs and sha256 digests for every artifact. Only a completed snapshot can be downloaded.

## Response `200`

Successful Response

- SnapshotDetailResponse
  - `snapshot_id` string
  - `namespace_id` string, required
  - `namespace_name` string, required
  - `internal_id` string, required
  - `snapshot_type` 'daily' | 'pre_delete' | 'manual', required
  - `status` 'pending' | 'in_progress' | 'completed' | 'partial' | 'failed' | 'expired'
  - `created_at` string, date-time, nullable
  - `dispatch_at` string, date-time, nullable: When the snapshot's work was due to start (created_at plus any dispatch stagger)
  - `completed_at` string, date-time, nullable
  - `expires_at` string, date-time, nullable
  - `schema_version` integer
  - `s3_prefix` string
  - `s3_objects_copied` boolean
  - `manifest` SnapshotManifest
    - `snapshot_id` string, required
    - `namespace_id` string, required
    - `namespace_name` string, required
    - `schema_version` integer
    - `created_at` string, date-time, required
    - `snapshot_type` string, required
    - `mongo_collections` object: Map of collection name to document count
    - `vector_point_count` integer
    - `s3_object_count` integer
    - `s3_total_bytes` integer
    - `s3_objects_copied` boolean
    - `include_vectors` boolean: Whether this snapshot exported the namespace's own vector points. Daily and manual snapshots export them. False marks a metadata-only snapshot: it holds the namespace's records but no vector points, and restoring it writes no vectors.
    - `vector_shard_key` string, nullable: Physical shard this namespace's vectors lived on when the snapshot was taken.
    - `frontier` SnapshotFrontier: 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.
      - `consistency` string: 'bracketed': each store's capture lies between its recorded start and end positions
      - `mongo` MongoFrontier
        - `read_concern` string: Read concern the cluster time was read under
        - `cluster_time_start` ClusterTime
          - `t` integer, required: Mongo cluster time seconds component
          - `i` integer, required: Mongo cluster time increment component
        - `cluster_time_end` ClusterTime
          - `t` integer, required: Mongo cluster time seconds component
          - `i` integer, required: Mongo cluster time increment component
        - `error` string, nullable: Why a cluster time could not be read, when it could not
      - `vectors` VectorFrontier
        - `capture_mode` string: '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.
        - `shards_start` object: Per-shard frontier read before the export
        - `shards_end` object: Per-shard frontier read after the export
        - `error` string, nullable
      - `objects` ObjectFrontier
        - `generation_cutoff` integer, nullable: Highest object generation in the recorded inventory (GCS); null on stores without generations
        - `last_modified_cutoff` string, nullable: Latest last-modified time in the recorded inventory
        - `objects_listed` integer
      - `config_yaml` string, nullable: The namespace's configuration exported as a manifest YAML, secrets replaced by placeholders
      - `config_yaml_error` string, nullable
      - `digests` object: sha256 and size of every artifact, keyed by path under the snapshot prefix
      - `schema_versions` object: Format version of the manifest and of each artifact kind
      - `secrets` SecretVersion[]: Organization secrets by name and version at snapshot time
        - `name` string, required
        - `version` string, required: Version name of the stored value at snapshot time; the value itself is never recorded
  - `error` string, nullable
  - `task_id` string, nullable
  - `include_vectors` boolean: False for a metadata-only snapshot, which holds the namespace's records but no vector points; restoring it writes no vectors.
  - `vector_shard_key` string, nullable
  - `copy_out` SnapshotCopyOut: The snapshot's copy in the plane's backup bucket (plan 18.4).
    - `status` string, required: 'copied', 'failed', 'not_configured' (no backup bucket on this plane), or 'skipped' (a daily snapshot, covered by retention)
    - `bucket` string, nullable
    - `objects` integer
    - `bytes` integer
    - `mismatched` string[]: Artifacts whose copy did not hash to the manifest's digest
    - `error` string, nullable
  - `imported_from` object, nullable: For an imported snapshot, the bucket and prefix it was copied from and the source snapshot's id
  - `last_restore` RestoreReport: 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.
    - `snapshot_id` string, required
    - `target_namespace_id` string, required
    - `complete` boolean, required: True iff every non-empty collection AND the vectors were fully restored
    - `collections` RestoreCollectionOutcome[]
      - `collection` string, required
      - `expected` integer, required
      - `restored` integer, required
      - `status` string, required: '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` string, nullable
    - `vector_expected` integer
    - `vector_restored` integer
    - `vector_source` string, nullable
    - `vector_status` string: 'restored', 'partial', 'failed', or 'none' (snapshot carried no vectors)
    - `skipped_summary` string[]: Human-readable list of everything not fully restored (empty when complete)
    - `retriever_parity` RetrieverParityResult[]: Top-k parity per retriever between the source and the restored namespace; filled for a restore into a different namespace
      - `retriever_name` string, required
      - `status` string, required: 'match' (same ordered top-k), 'mismatch', 'skipped' (no probe input), 'missing_in_target', or 'error'
      - `reason` string, nullable
      - `probe_inputs` object, nullable
      - `source_top_k` string[]
      - `target_top_k` string[]
      - `overlap` integer, nullable: Document ids the two top-k lists share
    - `restore_point` string, nullable: The restore_point the vectors were restored to
    - `resolved_seq` integer, nullable: The WAL seq the shard's replica actually reached (frontier_seq)
    - `fork_id` string, nullable: The point-in-time replica the vectors were read from
    - `write_gap` object, nullable: 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)
  - `download` SnapshotDownload
    - `expires_at` string, date-time, required: When every URL in artifacts stops working
    - `artifacts` SnapshotDownloadArtifact[], required: Every artifact of the snapshot: manifest.json, config.yaml, the Mongo dumps, the vector export and the object manifest
      - `path` string, required: The artifact's path inside the snapshot, e.g. mongo/buckets.ndjson.gz
      - `url` string, required: A signed GET URL for the artifact; expires at download.expires_at
      - `sha256` string, required: The artifact's sha256, recorded when the snapshot was taken
      - `size` integer, required: The artifact's size in bytes

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Too Many Requests
- `500`: Internal Server Error
- `503`: Service Unavailable

## Changes

- **2026-10-19** `927e674bf5df`: 1 warning
  - added the new `partial` enum value to the `status` response property for the response status `200`
- **2026-10-09** `61a175e8eb9a`: 1 warning, 5 info
  - removed the optional property `detail` from the response with the `422` status
  - added the non-success response with the status `429`
  - added the non-success response with the status `503`
  - added the optional property `success` to the response with the `422` status
  - …2 more
- **2026-10-05** `8d925c1cf55f`: 3 info
  - added the new optional `query` request parameter `download`
  - added the optional property `download` to the response with the `200` status
  - added the optional property `imported_from` to the response with the `200` status
- **2026-10-04** `38e0822db900`: 9 info
  - added the optional property `copy_out` to the response with the `200` status
  - added the optional property `dispatch_at` to the response with the `200` status
  - added the optional property `last_restore/anyOf[subschema #1: RestoreReport]/fork_id` to the response with the `200` status
  - added the optional property `last_restore/anyOf[subschema #1: RestoreReport]/resolved_seq` to the response with the `200` status
  - …5 more
- **2026-10-01** `436f07a84cc9`: 1 info
  - added the optional property `manifest/anyOf[subschema #1: SnapshotManifest]/frontier` to the response with the `200` status

[Operation history](https://skmtc.dev/mixpeek/apis/mixpeek-api/changes/v1/namespaces/:namespace_identifier/snapshots/:snapshot_id/get.md)

---

[API](https://skmtc.dev/mixpeek/apis/mixpeek-api.md) - [All operations](https://skmtc.dev/mixpeek/apis/mixpeek-api/llms.txt) - [OpenAPI document](https://skmtc.dev/mixpeek/apis/mixpeek-api/revisions/790bc16455f6?raw)
