curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Staging clone with all data",
"namespace_name": "production_staging"
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone"
payload = {
"description": "Staging clone with all data",
"namespace_name": "production_staging"
}
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({
description: 'Staging clone with all data',
namespace_name: 'production_staging'
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone', 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}/clone",
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([
'description' => 'Staging clone with all data',
'namespace_name' => 'production_staging'
]),
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}/clone"
payload := strings.NewReader("{\n \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\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}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone")
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 \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\n}"
response = http.request(request)
puts response.read_body{
"namespace": {
"namespace_name": "product-search",
"object": "namespace",
"namespace_id": "<string>",
"namespace_type": "standard",
"scope": "org",
"infrastructure": {
"autoscaling_enabled": false,
"max_concurrent_jobs": 10
},
"cost_cap_override": {
"daily_usd": 250,
"reason": "Nightly re-index of the full catalog, about $180/day, approved by finance",
"owner": "data-platform@example.com",
"expires_at": "2023-11-07T05:31:56Z",
"set_by": "<string>",
"set_at": "2023-11-07T05:31:56Z"
},
"tiering": {
"enabled": true,
"idle_days": {
"cold": 2,
"frozen": 2
},
"exempt": "<string>"
},
"spend_budget": {},
"budget": {},
"cluster_id": "iclstr_abc123xyz",
"description": "<string>",
"feature_extractors": [
{
"feature_extractor_name": "<string>",
"version": "<string>",
"feature_extractor_id": "<string>",
"params": {}
}
],
"payload_indexes": [
{
"description": "User-created text index for full-text search",
"field_name": "metadata.description",
"is_protected": false,
"type": "text"
}
],
"payload_index_count": 123,
"document_count": 123,
"bucket_count": 123,
"collection_count": 123,
"object_count": 123,
"auto_create_indexes": false,
"adaptive_indexing": false,
"vector_inference_map": {},
"dynamic_vector_indexes": true,
"mode": "<string>",
"vector_configs": [
{}
],
"clone_status": "<string>",
"clone_error": "<string>",
"clone_phase": "<string>",
"clone_task_id": "<string>",
"clone_dispatched_at": "2023-11-07T05:31:56Z",
"source_namespace_id": "<string>",
"namespace_ready": false,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"source_namespace_id": "<string>",
"status": "cloning",
"task_id": "<string>",
"cloned_resources": {
"collections": 0,
"retrievers": 0,
"taxonomies": 0,
"buckets": 0,
"objects": 0,
"points": 0
},
"primary_retriever_id": "<string>"
}{
"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
}Clone Namespace
Clone a namespace with all its data.
What gets cloned:
- Namespace configuration (extractors, payload indexes)
- Buckets (metadata, references same S3 files)
- Collections (full copy of all vectors/embeddings)
- Retrievers (pipeline configuration)
Use Cases:
- Create staging environment from production
- Backup namespace with all data
- Fork namespace for experimentation
For a config-only copy (no data): export the namespace with POST /v1/manifest/export and apply the manifest with POST /v1/manifest/apply.
curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Staging clone with all data",
"namespace_name": "production_staging"
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone"
payload = {
"description": "Staging clone with all data",
"namespace_name": "production_staging"
}
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({
description: 'Staging clone with all data',
namespace_name: 'production_staging'
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone', 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}/clone",
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([
'description' => 'Staging clone with all data',
'namespace_name' => 'production_staging'
]),
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}/clone"
payload := strings.NewReader("{\n \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\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}/clone")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_identifier}/clone")
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 \"description\": \"Staging clone with all data\",\n \"namespace_name\": \"production_staging\"\n}"
response = http.request(request)
puts response.read_body{
"namespace": {
"namespace_name": "product-search",
"object": "namespace",
"namespace_id": "<string>",
"namespace_type": "standard",
"scope": "org",
"infrastructure": {
"autoscaling_enabled": false,
"max_concurrent_jobs": 10
},
"cost_cap_override": {
"daily_usd": 250,
"reason": "Nightly re-index of the full catalog, about $180/day, approved by finance",
"owner": "data-platform@example.com",
"expires_at": "2023-11-07T05:31:56Z",
"set_by": "<string>",
"set_at": "2023-11-07T05:31:56Z"
},
"tiering": {
"enabled": true,
"idle_days": {
"cold": 2,
"frozen": 2
},
"exempt": "<string>"
},
"spend_budget": {},
"budget": {},
"cluster_id": "iclstr_abc123xyz",
"description": "<string>",
"feature_extractors": [
{
"feature_extractor_name": "<string>",
"version": "<string>",
"feature_extractor_id": "<string>",
"params": {}
}
],
"payload_indexes": [
{
"description": "User-created text index for full-text search",
"field_name": "metadata.description",
"is_protected": false,
"type": "text"
}
],
"payload_index_count": 123,
"document_count": 123,
"bucket_count": 123,
"collection_count": 123,
"object_count": 123,
"auto_create_indexes": false,
"adaptive_indexing": false,
"vector_inference_map": {},
"dynamic_vector_indexes": true,
"mode": "<string>",
"vector_configs": [
{}
],
"clone_status": "<string>",
"clone_error": "<string>",
"clone_phase": "<string>",
"clone_task_id": "<string>",
"clone_dispatched_at": "2023-11-07T05:31:56Z",
"source_namespace_id": "<string>",
"namespace_ready": false,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"expires_at": "2023-11-07T05:31:56Z"
},
"source_namespace_id": "<string>",
"status": "cloning",
"task_id": "<string>",
"cloned_resources": {
"collections": 0,
"retrievers": 0,
"taxonomies": 0,
"buckets": 0,
"objects": 0,
"points": 0
},
"primary_retriever_id": "<string>"
}{
"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
Source namespace ID or name to clone 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.
Request to clone a namespace with all its data.
Clone creates a full copy of a namespace including:
- Namespace configuration (extractors, indexes)
- Buckets (metadata, references same S3 files)
- Collections (full copy of all vectors/embeddings)
- Retrievers (pipeline configuration)
Use Cases:
- Create staging environment from production
- Backup namespace with all data
- Fork namespace for experimentation
For a config-only copy (no data): export the namespace with POST /v1/manifest/export and apply the manifest with POST /v1/manifest/apply.
Name for the cloned namespace (must be unique)
1"production_staging"
"backup_2024_01"
Which resources to include. Defaults to collections + retrievers.
Show child attributes
Show child attributes
Override description. If omitted, copies from source.
"Staging clone from production"
Source org ID for cross-org cloning (admin only).
"org_abc123"
'copy' writes every vector into the new namespace. 'branch' will make a copy-on-write fork that shares the source's storage until either side writes; it is not available yet and is refused, naming what it waits on.
copy, branch "copy"
Time-to-live in seconds for the new namespace, as on namespace create: it is deleted automatically after this duration. Omit for no expiry.
x >= 6086400
Response
Successful Response
Response after initiating namespace clone.
Cloned namespace with new namespace_id
Show child attributes
Show child attributes
Source namespace that was cloned
Clone status: 'cloning', 'ready', or 'failed'
Task ID for tracking clone progress
Summary of cloned resources (present when ready)
Show child attributes
Show child attributes
Pre-allocated retriever ID for the primary cloned retriever. Present immediately so callers can navigate to the retriever detail page while the background task hydrates the rest of the data. None if source namespace has no retrievers.
Was this page helpful?

