---
title: "Full archival record of one snapshot."
method: GET
path: "/api/v1/passports/{id}/snapshots/{snapshotId}"
tags: ["Passports"]
---

# Full archival record of one snapshot.

`GET /api/v1/passports/{id}/snapshots/{snapshotId}`

## Request

- Base URL: `https://app.tracepass.eu`
- URL: `https://app.tracepass.eu/api/v1/passports/{id}/snapshots/{snapshotId}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.tracepass.eu/api/oauth/authorize`, token URL `https://app.tracepass.eu/api/oauth/token`, scopes: `passports:read`)

Returns the complete authority-level **JSON-LD** the passport
asserted at snapshot time, plus a re-verification of the content
hash. A tampered at-rest document surfaces as `hashValid: false`
rather than being silently trusted.

The same tenant-scoping and 404-for-foreign-ids semantics as
the parent list endpoint apply: an unknown snapshot id and a
snapshot that belongs to a different passport or company both
return 404.

Read-only; counts as one v1 passport read against the daily cap.

## Response `200`

Snapshot detail.

- SnapshotDetail: Full archival record for one snapshot — all `SnapshotEntry` fields plus the complete authority-level JSON-LD the passport asserted at snapshot time.
  - `id` string, required: The snapshot's TracePass id (MongoDB ObjectId hex).
  - `version` integer, required: The passport version counter at the time of this snapshot.
  - `reason` 'published' | 'republished' | 'manual' | 'field_edit' | 'status_change' | 'parties' | 'supplier' | 'ai' | 'restore' | 'system' | 'baseline', required: Why this snapshot was taken.
  - `actor` string: Who caused the change, when known: `user:<id>`, `apikey:<prefix>`, `oauth:<clientId>`, `supplier:<requestId>` or `system:<job>`.
  - `snapshotAt` string, date-time, required: When the snapshot was taken (ISO 8601).
  - `contentHash` string, required: SHA-256 hex digest of the canonical JSON-LD archived at snapshot time. Re-verified on every read — if the stored document was tampered with at rest, `hashValid` is false.
  - `hashValid` boolean, required: True when the freshly-computed sha256(jsonLd) matches the stored `contentHash`. False indicates at-rest tampering.
  - `restorable` boolean, required: True when the snapshot carries `rawFields` and can drive a field-level restore. Snapshots taken before `rawFields` was captured are evidence-only (permanently `restorable: false`).
  - `fieldCount` integer, nullable, required: Number of fields captured in `rawFields`, or `null` for pre-`rawFields` snapshots.
  - `jsonLd` object, required: The complete JSON-LD document archived at snapshot time — what the public passport viewer would have returned for this passport on the snapshot date. The content hash covers this field only.

## Other responses

- `401`: Missing or invalid API key.
- `404`: Resource doesn't exist or is in a different workspace.
- `429`: Daily v1 write or passport-read budget exhausted. Resets at 00:00 UTC.

---

[API](https://skmtc.dev/tracepass/apis/tracepass-api.md) · [All operations](https://skmtc.dev/tracepass/apis/tracepass-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tracepass/apis/tracepass-api/revisions/60ddeb25638b?raw)
