curl --request POST \
--url https://api.mixpeek.com/v1/manifest/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "<string>",
"manifest_name": "generated-manifest",
"inventory": {},
"queries_per_month": 0
}
'import requests
url = "https://api.mixpeek.com/v1/manifest/generate"
payload = {
"description": "<string>",
"manifest_name": "generated-manifest",
"inventory": {},
"queries_per_month": 0
}
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: '<string>',
manifest_name: 'generated-manifest',
inventory: {},
queries_per_month: 0
})
};
fetch('https://api.mixpeek.com/v1/manifest/generate', 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/manifest/generate",
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' => '<string>',
'manifest_name' => 'generated-manifest',
'inventory' => [
],
'queries_per_month' => 0
]),
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/manifest/generate"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\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/manifest/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/manifest/generate")
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\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\n}"
response = http.request(request)
puts response.read_body{
"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
}Generate Manifest
Generate a manifest from natural language description.
Uses AI to create a valid YAML manifest from a natural language description of desired resources. The generated manifest can be reviewed and applied.
Example:
curl -X POST /v1/manifest/generate \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "I need a bucket of images that feeds into a multimodal extractor and a retriever",
"manifest_name": "image-search-setup"
}'
The model is given the live extractor and retriever-stage catalogs. The answer is checked with the same rules as POST /v1/manifest/validate, and when that finds errors the model is shown them and asked to repair its answer, up to 2 times.
Response:
{
"manifest": "version: '1.0'
metadata:
name: image-search-setup
...",
"format": "yaml",
"manifest_name": "image-search-setup",
"description": "I need a bucket of images...",
"validation": {"valid": true, "errors": [], "warnings": []},
"repair_rounds": 1,
"cost_estimate": {"per_1k_items_usd": 1.5, "per_month_usd": 15.4, "...": "..."},
"suggested": {"templates": ["..."], "models": ["siglip-base-patch16-224"]}
}
cost_estimate prices the returned manifest at list rates: per 1,000 items,
and per month at the volume in monthly_volume. suggested names the
namespace templates and catalog models the generator was offered as the
closest matches to the description.
validation.valid is false when the manifest still has errors after the
repair rounds; the errors are listed so you can fix them by hand.
Send the fields as a JSON body (above) or as query parameters. With an
inventory the answer also carries quote: what indexing those files is
charged, the monthly price and the unit prices, the same quote
POST /v1/organizations/billing/estimate returns for this manifest. A bucket
in inventory that the generated manifest does not declare is reported in
quote.error.
Next Steps:
- Review the generated manifest
- Apply it using POST /v1/manifest/apply
curl --request POST \
--url https://api.mixpeek.com/v1/manifest/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "<string>",
"manifest_name": "generated-manifest",
"inventory": {},
"queries_per_month": 0
}
'import requests
url = "https://api.mixpeek.com/v1/manifest/generate"
payload = {
"description": "<string>",
"manifest_name": "generated-manifest",
"inventory": {},
"queries_per_month": 0
}
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: '<string>',
manifest_name: 'generated-manifest',
inventory: {},
queries_per_month: 0
})
};
fetch('https://api.mixpeek.com/v1/manifest/generate', 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/manifest/generate",
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' => '<string>',
'manifest_name' => 'generated-manifest',
'inventory' => [
],
'queries_per_month' => 0
]),
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/manifest/generate"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\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/manifest/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mixpeek.com/v1/manifest/generate")
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\": \"<string>\",\n \"manifest_name\": \"generated-manifest\",\n \"inventory\": {},\n \"queries_per_month\": 0\n}"
response = http.request(request)
puts response.read_body{
"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.
Query Parameters
Body
Keys this body does not declare are refused with 422 extra_forbidden naming the accepted keys (since 2026-11-02).
Response
Successful Response
Was this page helpful?

