Snapshots
Per-index snapshot endpoints — create, list, read with a download link, delete and restore.
Concepts, contents and plan limits are on the Snapshots data
page. This page is the endpoint reference. Every path is under
/api/v1/indexes/{slug}.
| Method | Path | Scopes | Success |
|---|---|---|---|
POST | /snapshots[?prune=true] | settings:write + documents:write | 202 { job_id, snapshot_id, status, pruned, request_id } |
GET | /snapshots | documents:read | 200 { index, snapshots[], request_id }, newest first |
GET | /snapshots/{snapshotId} | documents:read | 200 { snapshot, download, request_id } |
DELETE | /snapshots/{snapshotId} | settings:write + documents:write | 200 { deleted: true, id, request_id } |
POST | /snapshots/{snapshotId}/restore | settings:write + documents:write | 202 { job_id, status, request_id } |
Create and restore are jobs: poll GET /jobs/{jobId}.
Snapshot object
| Field | Meaning |
|---|---|
id | snap_…, sortable by creation time |
index | Index slug |
created_at | ISO timestamp |
document_count | Documents in the snapshot |
bytes | Stored size of all files, manifest excluded |
engine_version | Engine version at export |
embed_model | Embedding model of the index at export, or null |
checksum | sha256 over the per-file hashes |
counts | { synonyms, curations, stemming, stopwords, rules, profiles } |
download on GET /snapshots/{id}:
{ url, expires_at, content_encoding: "gzip", format: "ndjson" }. The URL is
valid for 15 minutes.
Errors
| Status | Code | When |
|---|---|---|
| 403 | FORBIDDEN | A required scope is missing |
| 404 | INDEX_NOT_FOUND | Unknown slug in the key's organization |
| 404 | SNAPSHOT_NOT_FOUND | Unknown id, or a snapshot of another index or tenant |
| 409 | SNAPSHOT_LIMIT_REACHED | Plan's snapshotsPerIndex reached; details has limit, existing and a hint to use ?prune=true |
| 409 | JOB_CONFLICT | Restore while a reindex or restore is queued or running; details.job_id, details.type |
curl -sS -X POST "$AAC_API/indexes/products/snapshots" -H "Authorization: Bearer $AAC_KEY"{
"error": {
"code": "SNAPSHOT_LIMIT_REACHED",
"message": "…",
"details": {
"limit": 10,
"existing": 10,
"hint": "Delete a snapshot or retry with ?prune=true to remove the oldest one."
},
"request_id": "req_…"
}
}Platform snapshots are different
POST /admin/snapshot, GET/DELETE /admin/snapshots copy the whole engine data
directory for operators. They need the platform admin token and answer
503 SNAPSHOT_NOT_CONFIGURED when SEARCH_SNAPSHOT_DIR is not set. Tenants use the
per-index endpoints above.