curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vector_mappings": [
{
"existing_index": "<string>",
"inference_service": "<string>"
}
],
"add_vectors": [
{
"name": "<string>",
"dimension": 2,
"metric": "cosine",
"inference_service": "<string>"
}
]
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate"
payload = {
"vector_mappings": [
{
"existing_index": "<string>",
"inference_service": "<string>"
}
],
"add_vectors": [
{
"name": "<string>",
"dimension": 2,
"metric": "cosine",
"inference_service": "<string>"
}
]
}
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({
vector_mappings: [{existing_index: '<string>', inference_service: '<string>'}],
add_vectors: [
{
name: '<string>',
dimension: 2,
metric: 'cosine',
inference_service: '<string>'
}
]
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate', 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_id}/promote/validate",
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([
'vector_mappings' => [
[
'existing_index' => '<string>',
'inference_service' => '<string>'
]
],
'add_vectors' => [
[
'name' => '<string>',
'dimension' => 2,
'metric' => 'cosine',
'inference_service' => '<string>'
]
]
]),
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_id}/promote/validate"
payload := strings.NewReader("{\n \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\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_id}/promote/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate")
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 \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"namespace_id": "<string>",
"current_mode": "<string>",
"valid": true,
"required_user_action": "<string>",
"vector_configs": [
{}
],
"suggestions": [
{}
],
"errors": [
{}
]
}{
"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
}Dry-run validate a standalone → managed promotion
Validate a proposed promotion without mutating the namespace. Returns per-index mapping suggestions (dimension-matched candidates, flagged low-confidence) and validates any supplied vector_mappings / add_vectors for unknown indexes, unknown inference services, and dimension mismatches. Returns HTTP 422 when supplied mappings are invalid so callers can fix them before the real promote call.
curl --request POST \
--url https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vector_mappings": [
{
"existing_index": "<string>",
"inference_service": "<string>"
}
],
"add_vectors": [
{
"name": "<string>",
"dimension": 2,
"metric": "cosine",
"inference_service": "<string>"
}
]
}
'import requests
url = "https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate"
payload = {
"vector_mappings": [
{
"existing_index": "<string>",
"inference_service": "<string>"
}
],
"add_vectors": [
{
"name": "<string>",
"dimension": 2,
"metric": "cosine",
"inference_service": "<string>"
}
]
}
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({
vector_mappings: [{existing_index: '<string>', inference_service: '<string>'}],
add_vectors: [
{
name: '<string>',
dimension: 2,
metric: 'cosine',
inference_service: '<string>'
}
]
})
};
fetch('https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate', 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_id}/promote/validate",
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([
'vector_mappings' => [
[
'existing_index' => '<string>',
'inference_service' => '<string>'
]
],
'add_vectors' => [
[
'name' => '<string>',
'dimension' => 2,
'metric' => 'cosine',
'inference_service' => '<string>'
]
]
]),
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_id}/promote/validate"
payload := strings.NewReader("{\n \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\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_id}/promote/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/namespaces/{namespace_id}/promote/validate")
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 \"vector_mappings\": [\n {\n \"existing_index\": \"<string>\",\n \"inference_service\": \"<string>\"\n }\n ],\n \"add_vectors\": [\n {\n \"name\": \"<string>\",\n \"dimension\": 2,\n \"metric\": \"cosine\",\n \"inference_service\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"namespace_id": "<string>",
"current_mode": "<string>",
"valid": true,
"required_user_action": "<string>",
"vector_configs": [
{}
],
"suggestions": [
{}
],
"errors": [
{}
]
}{
"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 to validate promotion for
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.
Was this page helpful?

