curl --request GET \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"snapshot_id": "<string>",
"status": "<string>",
"restorable": true,
"issues": [
{
"code": "<string>",
"severity": "<string>",
"detail": "<string>"
}
],
"collections_verified": 0,
"vector_source": "<string>",
"vector_capture": "could_not_measure",
"frontier": {
"consistency": "bracketed",
"mongo": {
"read_concern": "snapshot",
"cluster_time_start": {
"t": 123,
"i": 123
},
"cluster_time_end": {
"t": 123,
"i": 123
},
"error": "<string>"
},
"vectors": {
"capture_mode": "scroll_bracketed",
"shards_start": {},
"shards_end": {},
"error": "<string>"
},
"objects": {
"generation_cutoff": 123,
"last_modified_cutoff": "<string>",
"objects_listed": 0
},
"config_yaml": "<string>",
"config_yaml_error": "<string>",
"digests": {},
"schema_versions": {},
"secrets": [
{
"name": "<string>",
"version": "<string>"
}
]
},
"mongo_backup": {
"provider": "<string>",
"covered": true,
"base_backup": "<string>",
"base_backup_time": 123,
"oplog_end_time": 123,
"reason": "<string>"
},
"digests_verified": 0,
"last_restore": {
"snapshot_id": "<string>",
"target_namespace_id": "<string>",
"complete": true,
"collections": [
{
"collection": "<string>",
"expected": 123,
"restored": 123,
"status": "<string>",
"reason": "<string>"
}
],
"vector_expected": 0,
"vector_restored": 0,
"vector_source": "<string>",
"vector_status": "none",
"skipped_summary": [
"<string>"
],
"retriever_parity": [
{
"retriever_name": "<string>",
"status": "<string>",
"reason": "<string>",
"probe_inputs": {},
"source_top_k": [
"<string>"
],
"target_top_k": [
"<string>"
],
"overlap": 123
}
],
"restore_point": "<string>",
"resolved_seq": 123,
"fork_id": "<string>",
"write_gap": {}
}
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}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.
curl --request GET \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/verify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"snapshot_id": "<string>",
"status": "<string>",
"restorable": true,
"issues": [
{
"code": "<string>",
"severity": "<string>",
"detail": "<string>"
}
],
"collections_verified": 0,
"vector_source": "<string>",
"vector_capture": "could_not_measure",
"frontier": {
"consistency": "bracketed",
"mongo": {
"read_concern": "snapshot",
"cluster_time_start": {
"t": 123,
"i": 123
},
"cluster_time_end": {
"t": 123,
"i": 123
},
"error": "<string>"
},
"vectors": {
"capture_mode": "scroll_bracketed",
"shards_start": {},
"shards_end": {},
"error": "<string>"
},
"objects": {
"generation_cutoff": 123,
"last_modified_cutoff": "<string>",
"objects_listed": 0
},
"config_yaml": "<string>",
"config_yaml_error": "<string>",
"digests": {},
"schema_versions": {},
"secrets": [
{
"name": "<string>",
"version": "<string>"
}
]
},
"mongo_backup": {
"provider": "<string>",
"covered": true,
"base_backup": "<string>",
"base_backup_time": 123,
"oplog_end_time": 123,
"reason": "<string>"
},
"digests_verified": 0,
"last_restore": {
"snapshot_id": "<string>",
"target_namespace_id": "<string>",
"complete": true,
"collections": [
{
"collection": "<string>",
"expected": 123,
"restored": 123,
"status": "<string>",
"reason": "<string>"
}
],
"vector_expected": 0,
"vector_restored": 0,
"vector_source": "<string>",
"vector_status": "none",
"skipped_summary": [
"<string>"
],
"retriever_parity": [
{
"retriever_name": "<string>",
"status": "<string>",
"reason": "<string>",
"probe_inputs": {},
"source_top_k": [
"<string>"
],
"target_top_k": [
"<string>"
],
"overlap": 123
}
],
"restore_point": "<string>",
"resolved_seq": 123,
"fork_id": "<string>",
"write_gap": {}
}
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Authorizations
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.
Path Parameters
Namespace name or ID
Snapshot ID to verify (e.g. snap_xxxxxxxxxxxx)
Query Parameters
Also decompress each collection dump to detect truncated artifacts
Response
Successful Response
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).
True iff there are no error-severity issues (a clean restore is possible)
Show child attributes
Show child attributes
Count of expected (non-empty) collection dumps found present
Where vectors would restore from: 'self', the shard-representative prefix (coalesced), 'none', or null if unresolved
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).
The frontier read back from the stored manifest.json
Show child attributes
Show child attributes
Whether the plane's Mongo backups can restore to the snapshot's recorded cluster time, asked at verify time
Show child attributes
Show child attributes
Artifacts whose sha256 was recomputed and matched the manifest (deep verify only)
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.
Show child attributes
Show child attributes
Was this page helpful?

