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,
"compute_tier": "shared",
"max_concurrent_jobs": 10,
"qdrant_collection": "ns_dev",
"ray_head_node_url": "ray://shared-cluster:10001"
},
"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,
"vector_inference_map": {},
"dynamic_vector_indexes": true,
"mode": "<string>",
"vector_configs": [
{}
],
"qdrant_status": {},
"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
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"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 config-only copy (no data), use templates instead:
- POST /templates/namespaces/from-namespace/
- POST /templates/namespaces//instantiate
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,
"compute_tier": "shared",
"max_concurrent_jobs": 10,
"qdrant_collection": "ns_dev",
"ray_head_node_url": "ray://shared-cluster:10001"
},
"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,
"vector_inference_map": {},
"dynamic_vector_indexes": true,
"mode": "<string>",
"vector_configs": [
{}
],
"qdrant_status": {},
"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
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"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 header returns 403; an invalid or revoked key returns 401.
Path Parameters
Source namespace ID or name to clone from
Body
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 config-only copy (no data), use templates instead:
- POST /templates/namespaces/from-namespace/{id}
- POST /templates/namespaces/{template_id}/instantiate
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"
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?

