curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_namespace_name": "<string>",
"confirm_in_place": false,
"restore_point": "2026-10-01T18:00:00Z",
"isolated": false
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore"
payload = {
"target_namespace_name": "<string>",
"confirm_in_place": False,
"restore_point": "2026-10-01T18:00:00Z",
"isolated": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
target_namespace_name: '<string>',
confirm_in_place: false,
restore_point: '2026-10-01T18:00:00Z',
isolated: false
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore', 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}/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_namespace_name' => '<string>',
'confirm_in_place' => false,
'restore_point' => '2026-10-01T18:00:00Z',
'isolated' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore"
payload := strings.NewReader("{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"snapshot_id": "<string>",
"target_namespace_id": "<string>",
"message": "<string>",
"restore_point": "<string>",
"fork_id": "<string>",
"resolved_seq": 123,
"isolated": 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
}{
"error": {
"details": {
"id": "ns_123",
"resource": "namespace"
},
"message": "Namespace not found",
"type": "NotFoundError"
},
"status": 404,
"success": false
}Restore From Snapshot
Restore a namespace from a snapshot. If target_namespace_name is provided, creates a new namespace with the restored data. Otherwise, restores in-place (replaces current namespace data).
curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"target_namespace_name": "<string>",
"confirm_in_place": false,
"restore_point": "2026-10-01T18:00:00Z",
"isolated": false
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore"
payload = {
"target_namespace_name": "<string>",
"confirm_in_place": False,
"restore_point": "2026-10-01T18:00:00Z",
"isolated": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
target_namespace_name: '<string>',
confirm_in_place: false,
restore_point: '2026-10-01T18:00:00Z',
isolated: false
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore', 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}/restore",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'target_namespace_name' => '<string>',
'confirm_in_place' => false,
'restore_point' => '2026-10-01T18:00:00Z',
'isolated' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore"
payload := strings.NewReader("{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/snapshots/{snapshot_id}/restore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"target_namespace_name\": \"<string>\",\n \"confirm_in_place\": false,\n \"restore_point\": \"2026-10-01T18:00:00Z\",\n \"isolated\": false\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"snapshot_id": "<string>",
"target_namespace_id": "<string>",
"message": "<string>",
"restore_point": "<string>",
"fork_id": "<string>",
"resolved_seq": 123,
"isolated": 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
}{
"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 restore from
Body
Keys this body does not declare are ignored, and the response's warnings name them, until 2026-11-02; from 2026-11-02 they are refused with 422 extra_forbidden naming the accepted keys.
Name for the restored namespace. If omitted, restores in-place (deletes current data and replaces with snapshot data), which requires confirm_in_place.
Required to restore in place (no target_namespace_name): the namespace's current data is deleted and replaced by the snapshot's. While the restore runs the namespace is read-only; writes are refused with a 409 to retry after it completes.
Restore the namespace as it was at this point: an RFC 3339 instant (e.g. 2026-10-01T18:00:00Z) or a vector-store WAL seq. Requires target_namespace_name. The snapshot supplies the configuration (collections, retrievers, buckets) and must have been taken at or before the point; the vectors and payloads are the shard's state at the point, replayed from its retained WAL. A point outside the retained window is refused naming the window. Omit to restore the snapshot as taken.
"2026-10-01T18:00:00Z"
Restore beside the source onto a temporary vector shard of its own instead of the plane's shared one. Requires target_namespace_name. The copy is for checking or measuring a restore: its shard stops after six hours, and deleting the copy's namespace stops it sooner. One isolated copy runs at a time; a second request while one is up is refused naming the namespace that holds it.
Response
Successful Response
The restore_point requested, normalized
Identifies the point-in-time replica this restore reads from; the task's restore_report carries the same id
The WAL seq the restore targets. Known here when restore_point is a seq; for an instant the shard resolves it during the restore, and the task's restore_report records it.
True when the copy goes onto a temporary shard of its own; the task creates the namespace once that shard is up
Was this page helpful?

