Get a typed answer with a calibrated probability, instead of prose to parse.
Send your application state plus named questions. Each question declares its
own type: choice picks one of your options and reports a probability for each,
score rates against an ordered scale, and noul returns a single probability.
noul is a probability in [0, 1], not a true/false — despite the name.
The answers come back keyed by your own question names. This endpoint is beta:
it rides an upstream path we do not control, so the contract may change.
POST
/
v1
/
evaluate
Make a structured decision
curl --request POST \ --url https://api.meshapi.ai/v1/evaluate \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "typesafe/jev-1.13", "questions": { "department": { "criteria": { "billing": "Payments, refunds and invoices", "technical": "Bugs, outages and integration problems" }, "instructions": "Which team should handle this ticket?", "type": "choice" }, "needs_human": { "instructions": "Probability that this needs a human reply.", "type": "noul" }, "urgency": { "criteria": [ "Can wait a week", "Within a day", "Immediately" ], "instructions": "How urgently does this need a reply?", "type": "score" } }, "state": { "plan": "pro", "subject": "Refund for order 4821 never arrived" }}'
import requests
url = "https://api.meshapi.ai/v1/evaluate"
payload = {
"model": "typesafe/jev-1.13",
"questions": {
"department": {
"criteria": {
"billing": "Payments, refunds and invoices",
"technical": "Bugs, outages and integration problems"
},
"instructions": "Which team should handle this ticket?",
"type": "choice"
},
"needs_human": {
"instructions": "Probability that this needs a human reply.",
"type": "noul"
},
"urgency": {
"criteria": ["Can wait a week", "Within a day", "Immediately"],
"instructions": "How urgently does this need a reply?",
"type": "score"
}
},
"state": {
"plan": "pro",
"subject": "Refund for order 4821 never arrived"
}
}
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({
model: 'typesafe/jev-1.13',
questions: {
department: {
criteria: {
billing: 'Payments, refunds and invoices',
technical: 'Bugs, outages and integration problems'
},
instructions: 'Which team should handle this ticket?',
type: 'choice'
},
needs_human: {instructions: 'Probability that this needs a human reply.', type: 'noul'},
urgency: {
criteria: ['Can wait a week', 'Within a day', 'Immediately'],
instructions: 'How urgently does this need a reply?',
type: 'score'
}
},
state: {plan: 'pro', subject: 'Refund for order 4821 never arrived'}
})
};
fetch('https://api.meshapi.ai/v1/evaluate', 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.meshapi.ai/v1/evaluate",
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([
'model' => 'typesafe/jev-1.13',
'questions' => [
'department' => [
'criteria' => [
'billing' => 'Payments, refunds and invoices',
'technical' => 'Bugs, outages and integration problems'
],
'instructions' => 'Which team should handle this ticket?',
'type' => 'choice'
],
'needs_human' => [
'instructions' => 'Probability that this needs a human reply.',
'type' => 'noul'
],
'urgency' => [
'criteria' => [
'Can wait a week',
'Within a day',
'Immediately'
],
'instructions' => 'How urgently does this need a reply?',
'type' => 'score'
]
],
'state' => [
'plan' => 'pro',
'subject' => 'Refund for order 4821 never arrived'
]
]),
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.meshapi.ai/v1/evaluate"
payload := strings.NewReader("{\n \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\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.meshapi.ai/v1/evaluate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.meshapi.ai/v1/evaluate")
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 \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\n }\n}"
response = http.request(request)
puts response.read_body
Dated version of the API contract to pin this request to. Omit it and the request is served under 2026-08 — the oldest supported version, so an existing integration is never moved by a release. A malformed or unsupported value is rejected with 400 invalid_api_version rather than falling back silently. The version actually served is echoed as X-Mesh-Version on every response, including errors.
Your own labels for this request, echoed back on the usage row and available as a filter and a group-by dimension in the usage API. String keys to string values. Never put personal or sensitive data here — tags are stored with the usage record and are not redacted.
A stable, anonymised identifier for the end user making this request, recorded on the usage row and available as a filter and a group-by dimension in the usage API. Supersedes the deprecated user field. Use an opaque id, not an email address or a name.
Maximum string length: 256
Response
Typed answers, one per question
⌘I
Make a structured decision
curl --request POST \ --url https://api.meshapi.ai/v1/evaluate \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "typesafe/jev-1.13", "questions": { "department": { "criteria": { "billing": "Payments, refunds and invoices", "technical": "Bugs, outages and integration problems" }, "instructions": "Which team should handle this ticket?", "type": "choice" }, "needs_human": { "instructions": "Probability that this needs a human reply.", "type": "noul" }, "urgency": { "criteria": [ "Can wait a week", "Within a day", "Immediately" ], "instructions": "How urgently does this need a reply?", "type": "score" } }, "state": { "plan": "pro", "subject": "Refund for order 4821 never arrived" }}'
import requests
url = "https://api.meshapi.ai/v1/evaluate"
payload = {
"model": "typesafe/jev-1.13",
"questions": {
"department": {
"criteria": {
"billing": "Payments, refunds and invoices",
"technical": "Bugs, outages and integration problems"
},
"instructions": "Which team should handle this ticket?",
"type": "choice"
},
"needs_human": {
"instructions": "Probability that this needs a human reply.",
"type": "noul"
},
"urgency": {
"criteria": ["Can wait a week", "Within a day", "Immediately"],
"instructions": "How urgently does this need a reply?",
"type": "score"
}
},
"state": {
"plan": "pro",
"subject": "Refund for order 4821 never arrived"
}
}
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({
model: 'typesafe/jev-1.13',
questions: {
department: {
criteria: {
billing: 'Payments, refunds and invoices',
technical: 'Bugs, outages and integration problems'
},
instructions: 'Which team should handle this ticket?',
type: 'choice'
},
needs_human: {instructions: 'Probability that this needs a human reply.', type: 'noul'},
urgency: {
criteria: ['Can wait a week', 'Within a day', 'Immediately'],
instructions: 'How urgently does this need a reply?',
type: 'score'
}
},
state: {plan: 'pro', subject: 'Refund for order 4821 never arrived'}
})
};
fetch('https://api.meshapi.ai/v1/evaluate', 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.meshapi.ai/v1/evaluate",
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([
'model' => 'typesafe/jev-1.13',
'questions' => [
'department' => [
'criteria' => [
'billing' => 'Payments, refunds and invoices',
'technical' => 'Bugs, outages and integration problems'
],
'instructions' => 'Which team should handle this ticket?',
'type' => 'choice'
],
'needs_human' => [
'instructions' => 'Probability that this needs a human reply.',
'type' => 'noul'
],
'urgency' => [
'criteria' => [
'Can wait a week',
'Within a day',
'Immediately'
],
'instructions' => 'How urgently does this need a reply?',
'type' => 'score'
]
],
'state' => [
'plan' => 'pro',
'subject' => 'Refund for order 4821 never arrived'
]
]),
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.meshapi.ai/v1/evaluate"
payload := strings.NewReader("{\n \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\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.meshapi.ai/v1/evaluate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.meshapi.ai/v1/evaluate")
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 \"model\": \"typesafe/jev-1.13\",\n \"questions\": {\n \"department\": {\n \"criteria\": {\n \"billing\": \"Payments, refunds and invoices\",\n \"technical\": \"Bugs, outages and integration problems\"\n },\n \"instructions\": \"Which team should handle this ticket?\",\n \"type\": \"choice\"\n },\n \"needs_human\": {\n \"instructions\": \"Probability that this needs a human reply.\",\n \"type\": \"noul\"\n },\n \"urgency\": {\n \"criteria\": [\n \"Can wait a week\",\n \"Within a day\",\n \"Immediately\"\n ],\n \"instructions\": \"How urgently does this need a reply?\",\n \"type\": \"score\"\n }\n },\n \"state\": {\n \"plan\": \"pro\",\n \"subject\": \"Refund for order 4821 never arrived\"\n }\n}"
response = http.request(request)
puts response.read_body
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Mesh API","description":"One key, all AI models. The unified gateway for your AI infrastructure.","colors":{"primary":"#7C6DFA","light":"#9D91FC","dark":"#7C6DFA"},"logo":{"light":"https://mintcdn.com/meshapi/sQNc2eoy3Yx6MrBO/logo/light.svg?fit=max\u0026auto=format\u0026n=sQNc2eoy3Yx6MrBO\u0026q=85\u0026s=36fe9d501df415b719e7da15959b36b6","dark":"https://mintcdn.com/meshapi/sQNc2eoy3Yx6MrBO/logo/dark.svg?fit=max\u0026auto=format\u0026n=sQNc2eoy3Yx6MrBO\u0026q=85\u0026s=411f4d038a8dbf667d66460a9e4aae42"},"favicon":"https://mintcdn.com/meshapi/sQNc2eoy3Yx6MrBO/favicon.svg?fit=max\u0026auto=format\u0026n=sQNc2eoy3Yx6MrBO\u0026q=85\u0026s=c47294b9c052ace1bf68a9f020dd5f83","appearance":{"default":"system"},"navbar":{"links":[{"href":"mailto:contact@meshapi.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.meshapi.ai"}},"footer":{"socials":{"website":"https://meshapi.ai"}},"contextual":{"options":["copy","view",{"title":"Open in AI Fiesta","description":"Ask questions about this page","icon":"https://chat.aifiesta.ai/static/images/logo/transparent-logo.svg","href":{"base":"https://chat.aifiesta.ai","query":[{"key":"q","value":"Read from https://developers.meshapi.ai$path so I can ask questions about it."}]}},"chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"meshapi","hasAudioNarration":false,"actualSubdomain":"meshapi","customDomains":["developers.meshapi.ai"],"gitSource":{"type":"github","owner":"aifiesta","repo":"mesh-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"2ebfb090-9476-45f3-8094-ab720713f19b","liveDeploymentHistoryId":"6aec98a0fcdd00e0441068dd","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec98a0fcdd00e0441068dd"},"entitlements":{},"buildId":"6aec98a0fcdd00e0441068dd","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API Reference","count":88},{"language":"default","tag":"Endpoints","count":87},{"language":"default","tag":"Documentation","count":52},{"language":"default","tag":"Troubleshooting","count":17},{"language":"default","tag":"SDKs","count":16},{"language":"default","tag":"SDK Reference","count":16},{"language":"default","tag":"Mesh API","count":15},{"language":"default","tag":"Core Inference","count":14},{"language":"default","tag":"Templates","count":14},{"language":"default","tag":"Memory","count":12}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":true},"customCss":[{"filePath":"assets/docs-assistant.css","content":"#mesh-assistant-root{--primary: #7c6dfa;--primary-foreground: #ffffff;--accent: initial;--accent-foreground: initial;--border: initial;--destructive: initial;--input: initial;--muted: initial;--muted-foreground: initial;--popover: initial;--popover-foreground: initial;--ring: initial}"}],"page":{"pagePath":"api/evaluate/make-a-structured-decision","slug":"/api/evaluate/make-a-structured-decision","pageMetadata":{"title":"Make a structured decision","description":"Get a typed answer with a calibrated probability, instead of prose to parse.\n\nSend your application `state` plus named `questions`. Each question declares its\nown `type`: `choice` picks one of your options and reports a probability for each,\n`score` rates against an ordered scale, and `noul` returns a single probability.\n\n`noul` is a **probability in [0, 1]**, not a true/false — despite the name.\n\nThe answers come back keyed by your own question names. This endpoint is **beta**:\nit rides an upstream path we do not control, so the contract may change.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/evaluate","href":"/api/evaluate/make-a-structured-decision","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Get a typed answer with a calibrated probability, instead of prose to parse.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send your application \", _jsx(_components.code, {\n children: \"state\"\n }), \" plus named \", _jsx(_components.code, {\n children: \"questions\"\n }), \". Each question declares its\\nown \", _jsx(_components.code, {\n children: \"type\"\n }), \": \", _jsx(_components.code, {\n children: \"choice\"\n }), \" picks one of your options and reports a probability for each,\\n\", _jsx(_components.code, {\n children: \"score\"\n }), \" rates against an ordered scale, and \", _jsx(_components.code, {\n children: \"noul\"\n }), \" returns a single probability.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"noul\"\n }), \" is a \", _jsx(_components.strong, {\n children: \"probability in [0, 1]\"\n }), \", not a true/false — despite the name.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The answers come back keyed by your own question names. This endpoint is \", _jsx(_components.strong, {\n children: \"beta\"\n }), \":\\nit rides an upstream path we do not control, so the contract may change.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Make a structured decision","description":"Get a typed answer with a calibrated probability, instead of prose to parse.\n\nSend your application `state` plus named `questions`. Each question declares its\nown `type`: `choice` picks one of your options and reports a probability for each,\n`score` rates against an ordered scale, and `noul` returns a single probability.\n\n`noul` is a **probability in [0, 1]**, not a true/false — despite the name.\n\nThe answers come back keyed by your own question names. This endpoint is **beta**:\nit rides an upstream path we do not control, so the contract may change.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/evaluate","href":"/api/evaluate/make-a-structured-decision","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/meshapi/a0645baa84a1b38a/assets/docs-assistant.js"],"openApiReferenceData":{"operation":{"tags":["Evaluate"],"summary":"Make a structured decision","description":"Get a typed answer with a calibrated probability, instead of prose to parse.\n\nSend your application `state` plus named `questions`. Each question declares its\nown `type`: `choice` picks one of your options and reports a probability for each,\n`score` rates against an ordered scale, and `noul` returns a single probability.\n\n`noul` is a **probability in [0, 1]**, not a true/false — despite the name.\n\nThe answers come back keyed by your own question names. This endpoint is **beta**:\nit rides an upstream path we do not control, so the contract may change.","operationId":"create_evaluation","requestBody":"abacd5fb-6c0d-4c30-9ed9-78d7183960fd","responses":{"200":"809e903b-c106-4256-984a-8f6e8fff5d7a","400":"64e5aaef-180d-4f07-a956-ef6f220775ba","401":"77794763-16e6-421a-ba2d-03f2d452f6a5","402":"fa765498-31d0-4cf5-9b08-d5ff96ba88b6","403":"c019aa51-5eed-4ac9-80eb-d37b982cbd57","422":"b10360cd-a3a1-404d-b78b-4e50fb854121","429":"45dcff2d-5da0-4d7d-85f9-2eea3b348f6d","500":"efe63d4d-68d9-4dfd-9326-5ab6c8c26926","503":"70b02682-cd29-47c2-b93a-bb8bb786ea30","504":"48ca6168-1606-4a6c-b583-072d0c9fc44d"},"security":["4cbb305d-177c-4283-90b4-fa97207f35fd"],"parameters":["fd699afd-20c7-45e6-9e33-269692b70b41"],"method":"post","type":"path","servers":["f0040169-94e3-4d57-99cb-e932f71150fd"],"path":"/v1/evaluate","baseUrlOptions":["https://api.meshapi.ai"],"title":"Make a structured decision","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"fd699afd-20c7-45e6-9e33-269692b70b41":{"in":"header","name":"X-Mesh-Version","required":false,"schema":{"type":"string","enum":["2026-08","2026-09","2026-11"],"default":"2026-08","isRequired":false,"description":"Dated version of the API contract to pin this request to. Omit it and the request is served under `2026-08` — the oldest supported version, so an existing integration is never moved by a release. A malformed or unsupported value is rejected with `400 invalid_api_version` rather than falling back silently. The version actually served is echoed as `X-Mesh-Version` on every response, including errors.","uniqueKey":"","typeLabel":"enum\u003cstring>"},"example":"2026-11","description":"Dated version of the API contract to pin this request to. Omit it and the request is served under `2026-08` — the oldest supported version, so an existing integration is never moved by a release. A malformed or unsupported value is rejected with `400 invalid_api_version` rather than falling back silently. The version actually served is echoed as `X-Mesh-Version` on every response, including errors."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"model":{"type":"string","title":"Model","description":"Which model decides. Use an id from GET /v1/models.","isRequired":true,"uniqueKey":"model","typeLabel":"string"},"state":{"oneOf":[{"type":"string","title":"State","description":"The application state to judge — free text, or any JSON object or array. Every question is answered against this same state.","isRequired":true,"uniqueKey":"state.oneOf.0","typeLabel":"string"},{"type":"object","title":"State","description":"The application state to judge — free text, or any JSON object or array. Every question is answered against this same state.","additionalProperties":true,"isRequired":true,"uniqueKey":"state.oneOf.1","typeLabel":"State · object"},{"type":"array","items":{"oneOf":[{}],"uniqueKey":"state.oneOf.2.items.[INDEX]","typeLabel":"any"},"title":"State","description":"The application state to judge — free text, or any JSON object or array. Every question is answered against this same state.","isRequired":true,"uniqueKey":"state.oneOf.2","typeLabel":"any[]"}],"isRequired":true,"uniqueKey":"state","typeLabel":"string | State · object | any[]"},"questions":{"patternProperties":{"^[A-Za-z0-9_-]{1,64}$":{"oneOf":[{"$ref":"#/components/schemas/NoulQuestion"},{"$ref":"#/components/schemas/ChoiceQuestion"},{"$ref":"#/components/schemas/ScoreQuestion"}],"discriminator":{"propertyName":"type","mapping":{"choice":"#/components/schemas/ChoiceQuestion","noul":"#/components/schemas/NoulQuestion","score":"#/components/schemas/ScoreQuestion"}}}},"type":"object","minProperties":1,"title":"Questions","description":"The questions to answer, keyed by your own name for each. Those names are the keys of the answers you get back.","isRequired":true,"uniqueKey":"questions","typeLabel":"Questions · object"},"tags":{"oneOf":[{"type":"object","title":"Tags","description":"Your own labels for this request, echoed back on the usage row and available as a filter and a group-by dimension in the usage API. String keys to string values. Never put personal or sensitive data here — tags are stored with the usage record and are not redacted.","example":{"env":"prod","feature":"summariser"},"additionalProperties":{"type":"string","uniqueKey":"tags.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"tags.oneOf.0","typeLabel":"Tags · object"},{"type":"null","title":"Tags","description":"Your own labels for this request, echoed back on the usage row and available as a filter and a group-by dimension in the usage API. String keys to string values. Never put personal or sensitive data here — tags are stored with the usage record and are not redacted.","example":{"env":"prod","feature":"summariser"},"uniqueKey":"tags.oneOf.1","typeLabel":"null"}],"uniqueKey":"tags","typeLabel":"Tags · object | null"},"safety_identifier":{"oneOf":[{"type":"string","title":"Safety Identifier","description":"A stable, anonymised identifier for the end user making this request, recorded on the usage row and available as a filter and a group-by dimension in the usage API. Supersedes the deprecated `user` field. Use an opaque id, not an email address or a name.","maxLength":256,"uniqueKey":"safety_identifier.oneOf.0","typeLabel":"string"},{"type":"null","title":"Safety Identifier","description":"A stable, anonymised identifier for the end user making this request, recorded on the usage row and available as a filter and a group-by dimension in the usage API. Supersedes the deprecated `user` field. Use an opaque id, not an email address or a name.","uniqueKey":"safety_identifier.oneOf.1","typeLabel":"null"}],"uniqueKey":"safety_identifier","typeLabel":"string | null"}},"additionalProperties":false,"type":"object","required":["model","state","questions"],"title":"EvaluateRequest","description":"Request body for ``POST /v1/evaluate``.","example":{"model":"typesafe/jev-1.13","questions":{"department":{"criteria":{"billing":"Payments, refunds and invoices","technical":"Bugs, outages and integration problems"},"instructions":"Which team should handle this ticket?","type":"choice"},"needs_human":{"instructions":"Probability that this needs a human reply.","type":"noul"},"urgency":{"criteria":["Can wait a week","Within a day","Immediately"],"instructions":"How urgently does this need a reply?","type":"score"}},"state":{"plan":"pro","subject":"Refund for order 4821 never arrived"}},"uniqueKey":"","typeLabel":"EvaluateRequest · object"},"examples":{"Example":{"title":"Example","value":{"model":"typesafe/jev-1.13","questions":{"department":{"criteria":{"billing":"Payments, refunds and invoices","technical":"Bugs, outages and integration problems"},"instructions":"Which team should handle this ticket?","type":"choice"},"needs_human":{"instructions":"Probability that this needs a human reply.","type":"noul"},"urgency":{"criteria":["Can wait a week","Within a day","Immediately"],"instructions":"How urgently does this need a reply?","type":"score"}},"state":{"plan":"pro","subject":"Refund for order 4821 never arrived"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"809e903b-c106-4256-984a-8f6e8fff5d7a":{"description":"Typed answers, one per question","content":{"application/json":{"schema":{}}},"exampleType":"generated"},"64e5aaef-180d-4f07-a956-ef6f220775ba":{"description":"The model does not exist, or cannot serve this request","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"77794763-16e6-421a-ba2d-03f2d452f6a5":{"description":"Missing or invalid API key","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"fa765498-31d0-4cf5-9b08-d5ff96ba88b6":{"description":"Insufficient credits","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"c019aa51-5eed-4ac9-80eb-d37b982cbd57":{"description":"API key is suspended, or lacks the evaluate:write scope","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"b10360cd-a3a1-404d-b78b-4e50fb854121":{"description":"Request validation failed","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"45dcff2d-5da0-4d7d-85f9-2eea3b348f6d":{"description":"Rate limit exceeded (RPM or RPD)","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"efe63d4d-68d9-4dfd-9326-5ab6c8c26926":{"description":"Mesh-internal error — do not retry","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"70b02682-cd29-47c2-b93a-bb8bb786ea30":{"description":"Upstream provider error, or credentials not configured","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"48ca6168-1606-4a6c-b583-072d0c9fc44d":{"description":"Upstream provider did not respond in time","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"4cbb305d-177c-4283-90b4-fa97207f35fd":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Enter your MeshAPI key (`rsk_...`) or, for the admin-keys endpoints, a dashboard session token — sent as `Authorization: Bearer \u003ctoken>`.","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"f0040169-94e3-4d57-99cb-e932f71150fd":{"url":"https://api.meshapi.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Enter your MeshAPI key (`rsk_...`) or, for the admin-keys endpoints, a dashboard session token — sent as `Authorization: Bearer \u003ctoken>`.","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Enter your MeshAPI key (`rsk_...`) or, for the admin-keys endpoints, a dashboard session token — sent as `Authorization: Bearer \u003ctoken>`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api/openapi.json"},"subdomain":"meshapi","siteName":"Mesh API","title":"Make a structured decision - Mesh API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T09:17:16.127Z","originalFileLocation":"api/evaluate/make-a-structured-decision.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Get a typed answer with a calibrated probability, instead of prose to parse. Send your application state plus named questions. Each question declares its own type: choice picks one of your options and reports a probability for each, score rates against an ordered scale, and noul returns a single probability. noul is a probability in [0, 1], not a true/false — despite the name. The answers come back keyed by your own question names. This endpoint is beta: it rides an upstream path we do not control, so the contract may change.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Mesh API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Make a structured decision - Mesh API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Get a typed answer with a calibrated probability, instead of prose to parse. Send your application state plus named questions. Each question declares its own type: choice picks one of your options and reports a probability for each, score rates against an ordered scale, and noul returns a single probability. noul is a probability in [0, 1], not a true/false — despite the name. The answers come back keyed by your own question names. This endpoint is beta: it rides an upstream path we do not control, so the contract may change.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Mesh API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://meshapi.mintlify.site/_mintlify/api/og/v2?division=Evaluate\u0026amp;title=Make+a+structured+decision\u0026amp;description=Get+a+typed+answer+with+a+calibrated+probability%2C+instead+of+prose+to+parse.%0A%0ASend+your+application+%60state%60+plus+named+%60questions%60.+Each+question+declares+its%0Ao\u0026amp;theme=9366e8ba02d0811025c19e55\u0026amp;signature=83cd18a0f18952abbdad62fc8961759487777917b1636cc02317312dc3c6a8c6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Make a structured decision - Mesh API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Get a typed answer with a calibrated probability, instead of prose to parse. Send your application state plus named questions. Each question declares its own type: choice picks one of your options and reports a probability for each, score rates against an ordered scale, and noul returns a single probability. noul is a probability in [0, 1], not a true/false — despite the name. The answers come back keyed by your own question names. This endpoint is beta: it rides an upstream path we do not control, so the contract may change.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://meshapi.mintlify.site/_mintlify/api/og/v2?division=Evaluate\u0026amp;title=Make+a+structured+decision\u0026amp;description=Get+a+typed+answer+with+a+calibrated+probability%2C+instead+of+prose+to+parse.%0A%0ASend+your+application+%60state%60+plus+named+%60questions%60.+Each+question+declares+its%0Ao\u0026amp;theme=9366e8ba02d0811025c19e55\u0026amp;signature=83cd18a0f18952abbdad62fc8961759487777917b1636cc02317312dc3c6a8c6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/meshapi/hujnplAy9_MTdLYc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Mesh API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7C6DFA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/evaluate/make-a-structured-decision.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.meshapi.ai/#organization\",\"name\":\"Mesh API\",\"url\":\"https://developers.meshapi.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/meshapi/sQNc2eoy3Yx6MrBO/logo/light.svg?fit=max\u0026auto=format\u0026n=sQNc2eoy3Yx6MrBO\u0026q=85\u0026s=36fe9d501df415b719e7da15959b36b6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.meshapi.ai#website\",\"name\":\"Mesh API\",\"url\":\"https://developers.meshapi.ai\",\"publisher\":{\"@id\":\"https://developers.meshapi.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision#webpage\",\"url\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision\",\"name\":\"Make a structured decision\",\"description\":\"Get a typed answer with a calibrated probability, instead of prose to parse. Send your application state plus named questions. Each question declares its own type: choice picks one of your options and reports a probability for each, score rates against an ordered scale, and noul returns a single probability. noul is a probability in [0, 1], not a true/false — despite the name. The answers come back keyed by your own question names. This endpoint is beta: it rides an upstream path we do not control, so the contract may change.\",\"dateModified\":\"2026-11-04T09:17:16.127Z\",\"isPartOf\":{\"@id\":\"https://developers.meshapi.ai#website\"},\"breadcrumb\":{\"@id\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developers.meshapi.ai/api/chat/chat-completions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Make a structured decision\",\"item\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision#apireference\",\"headline\":\"Make a structured decision\",\"name\":\"Make a structured decision\",\"description\":\"Get a typed answer with a calibrated probability, instead of prose to parse. Send your application state plus named questions. Each question declares its own type: choice picks one of your options and reports a probability for each, score rates against an ordered scale, and noul returns a single probability. noul is a probability in [0, 1], not a true/false — despite the name. The answers come back keyed by your own question names. This endpoint is beta: it rides an upstream path we do not control, so the contract may change.\",\"url\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision\",\"mainEntityOfPage\":{\"@id\":\"https://developers.meshapi.ai/api/evaluate/make-a-structured-decision#webpage\"},\"dateModified\":\"2026-11-04T09:17:16.127Z\",\"publisher\":{\"@id\":\"https://developers.meshapi.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.meshapi.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Mesh API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Mesh API","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","pages":[{"title":"Documentation","href":""}]},{"tab":"Changelog","icon":"rss","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"API Reference","icon":"puzzle-piece","groups":[{"group":"Overview","pages":[{"title":"API reference","icon":"book","href":"/docs/reference/api-overview"}]},{"group":"Endpoints","pages":[{"group":"Chat","pages":[{"title":"Chat Completions","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/chat/completions","href":"/api/chat/chat-completions"},{"title":"Chat Compare","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/chat/compare","href":"/api/chat/chat-compare"}]},{"group":"Images","pages":[{"title":"Generate Image","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/images/generations","href":"/api/images/generate-image"},{"title":"Edit an image","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/images/edits","href":"/api/images/edit-an-image"}]},{"group":"Video","pages":[{"title":"List Video Generations","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/video/generations","href":"/api/video/list-video-generations"},{"title":"Create Video Generation","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/video/generations","href":"/api/video/create-video-generation"},{"title":"Get Video Generation","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/video/generations/{task_id}","href":"/api/video/get-video-generation"}]},{"group":"Batch","pages":[{"title":"List Batches","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/batches","href":"/api/batch/list-batches"},{"title":"Create Batch","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/batches","href":"/api/batch/create-batch"},{"title":"Get Batch","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/batches/{batch_id}","href":"/api/batch/get-batch"},{"title":"Cancel Batch","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/batches/{batch_id}/cancel","href":"/api/batch/cancel-batch"}]},{"group":"Responses","pages":[{"title":"Create Response","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/responses","href":"/api/responses/create-response"},{"title":"Count Response Input Tokens","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/responses/input_tokens","href":"/api/responses/count-response-input-tokens"}]},{"group":"Messages","pages":[{"title":"Create Message","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/messages","href":"/api/messages/create-message"},{"title":"Count Message Tokens","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/messages/count_tokens","href":"/api/messages/count-message-tokens"}]},{"group":"Embeddings","pages":[{"title":"Create Embeddings","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/embeddings","href":"/api/embeddings/create-embeddings"}]},{"group":"Moderations","pages":[{"title":"Classify content against the content policy","description":"Check text or images against the content policy before you act on them.\n\nOpenAI-compatible: `input` accepts a string, a batch of strings, or multimodal parts\nwith image URLs. Each result reports `flagged` plus per-category booleans and scores,\nso you can set your own threshold rather than only trusting the flag.\n\nImages must be PNG, JPEG, GIF or WebP; anything else is rejected up front rather\nthan failing upstream.\n\nModeration is deliberately **not** gated by per-model allow-lists or usage caps — it\nis a safety primitive, and making it refusable would push callers toward skipping the\ncheck. Your key's rate limits still apply.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/moderations","href":"/api/moderations/classify-content-against-the-content-policy"}]},{"group":"Evaluate","pages":[{"title":"Make a structured decision","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/evaluate","href":"/api/evaluate/make-a-structured-decision"}]},{"group":"Audio","pages":[{"title":"Create Speech","description":"Convert text to speech.\n\nProvider is resolved automatically from the model name via the model_offerings\ntable — no hardcoded provider branching. Streaming is used when the provider\nadapter supports it and `stream=true` (the default).\n\nThe `voice` field is required for ElevenLabs models. Sarvam models use\n`speaker` instead.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/audio/speech","href":"/api/audio/create-speech"},{"title":"Create Transcription","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/audio/transcriptions","href":"/api/audio/create-transcription"},{"title":"Create Translation","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/audio/translations","href":"/api/audio/create-translation"},{"title":"Create Transcription Translate","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/audio/transcriptions/translate","href":"/api/audio/create-transcription-translate"},{"title":"List Voices","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/audio/voices","href":"/api/audio/list-voices"},{"title":"Get Voice","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/audio/voices/{voice_id}","href":"/api/audio/get-voice"}]},{"group":"Router","pages":[{"title":"Router Select","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/router/select","href":"/api/router/router-select"}]},{"group":"Admin Keys","pages":[{"title":"List Admin Keys","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/admin-keys","href":"/api/admin-keys/list-admin-keys"},{"title":"Create Admin Key","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/admin-keys","href":"/api/admin-keys/create-admin-key"},{"title":"Get Admin Key","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/admin-keys/{key_id}","href":"/api/admin-keys/get-admin-key"},{"title":"Revoke Admin Key","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/admin-keys/{key_id}","href":"/api/admin-keys/revoke-admin-key"},{"title":"Rotate Admin Key","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/admin-keys/{key_id}/rotate","href":"/api/admin-keys/rotate-admin-key"}]},{"group":"Balance","pages":[{"title":"Get Balance","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/balance","href":"/api/balance/get-balance"}]},{"group":"Errors","pages":[{"title":"Get Error Catalog","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/errors","href":"/api/errors/get-error-catalog"}]},{"group":"Usage","pages":[{"title":"Query Usage Summary","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/usage","href":"/api/usage/query-usage-summary"},{"title":"Query Usage Events","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/usage/events","href":"/api/usage/query-usage-events"},{"title":"Query Rejections","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/usage/rejections","href":"/api/usage/query-rejections"},{"title":"Get Request","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/usage/requests/{request_id}","href":"/api/usage/get-request"},{"title":"Get Usage Event Attempts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/usage/events/{event_id}/attempts","href":"/api/usage/get-usage-event-attempts"},{"title":"Get Rate Limits","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/usage/rate-limits","href":"/api/usage/get-rate-limits"},{"title":"Get Spend Trend","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/usage/spend-trend","href":"/api/usage/get-spend-trend"}]},{"group":"Audit Logs","pages":[{"title":"List Audit Logs","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/audit-logs","href":"/api/audit-logs/list-audit-logs"},{"title":"Export Audit Logs Csv","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/audit-logs.csv","href":"/api/audit-logs/export-audit-logs-csv"}]},{"group":"Templates","pages":[{"title":"List Catalog","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates/catalog","href":"/api/templates/list-catalog"},{"title":"List Categories","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates/catalog/categories","href":"/api/templates/list-categories"},{"title":"Enable Template","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/templates/catalog/{template_id}/enable","href":"/api/templates/enable-template"},{"title":"Disable Template","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/templates/catalog/{template_id}/enable","href":"/api/templates/disable-template"},{"title":"List Templates","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates","href":"/api/templates/list-templates"},{"title":"Create Template","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/templates","href":"/api/templates/create-template"},{"title":"Get Template","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates/{template_id}","href":"/api/templates/get-template"},{"title":"Delete Template","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/templates/{template_id}","href":"/api/templates/delete-template"},{"title":"Update Template","deprecated":null,"version":null,"openapi":"/api/openapi.json patch /v1/templates/{template_id}","href":"/api/templates/update-template"},{"title":"List Versions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates/{template_id}/versions","href":"/api/templates/list-versions"},{"title":"Save Version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/templates/{template_id}/versions","href":"/api/templates/save-version"},{"title":"Get Version","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/templates/{template_id}/versions/{version_id}","href":"/api/templates/get-version"},{"title":"Publish Template","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/templates/{template_id}/publish","href":"/api/templates/publish-template"},{"title":"Rollback Version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/templates/{template_id}/versions/{version_id}/rollback","href":"/api/templates/rollback-version"}]},{"group":"Playground","pages":[{"title":"List Threads","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/playground/threads","href":"/api/playground/list-threads"},{"title":"Create Thread","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/playground/threads","href":"/api/playground/create-thread"},{"title":"Get Thread","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/playground/threads/{thread_id}","href":"/api/playground/get-thread"},{"title":"Delete Thread","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/playground/threads/{thread_id}","href":"/api/playground/delete-thread"},{"title":"Update Thread","deprecated":null,"version":null,"openapi":"/api/openapi.json patch /v1/playground/threads/{thread_id}","href":"/api/playground/update-thread"}]},{"group":"Memory","pages":[{"title":"List Memories","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/memories","href":"/api/memory/list-memories"},{"title":"Create Memory","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/memories","href":"/api/memory/create-memory"},{"title":"Memory Usage","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/memories/usage","href":"/api/memory/memory-usage"},{"title":"Memory Counts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/memories/counts","href":"/api/memory/memory-counts"},{"title":"Get Memory","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/memories/{slug_or_id}","href":"/api/memory/get-memory"},{"title":"Delete Memory","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/memories/{slug_or_id}","href":"/api/memory/delete-memory"},{"title":"Update Memory","deprecated":null,"version":null,"openapi":"/api/openapi.json patch /v1/memories/{slug_or_id}","href":"/api/memory/update-memory"},{"title":"List Memory Items","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/memories/{slug_or_id}/items","href":"/api/memory/list-memory-items"},{"title":"Add Memory Item","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/memories/{slug_or_id}/items","href":"/api/memory/add-memory-item"},{"title":"Revive Expired Items","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/memories/{slug_or_id}/items/revive-expired","href":"/api/memory/revive-expired-items"},{"title":"Delete Memory Item","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/memories/{slug_or_id}/items/{item_id}","href":"/api/memory/delete-memory-item"},{"title":"Update Memory Item","deprecated":null,"version":null,"openapi":"/api/openapi.json patch /v1/memories/{slug_or_id}/items/{item_id}","href":"/api/memory/update-memory-item"}]},{"group":"End users","pages":[{"title":"Erase an end user's identifier","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/end-users/erasures","href":"/api/end-users/erase-an-end-users-identifier"}]},{"group":"API Versions","pages":[{"title":"List dated API versions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/api-versions","href":"/api/api-versions/list-dated-api-versions"}]},{"group":"Providers","pages":[{"title":"List providers an API key can be pinned to","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/providers/pinnable","href":"/api/providers/list-providers-an-api-key-can-be-pinned-to"},{"title":"List the models one provider serves","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/providers/{provider}/models","href":"/api/providers/list-the-models-one-provider-serves"}]},{"group":"Models","pages":[{"title":"List Models","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/models","href":"/api/models/list-models"},{"title":"Search Models","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/models/search","href":"/api/models/search-models"},{"title":"List a model's providers and their prices","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/models/{model_id}/providers","href":"/api/models/list-a-models-providers-and-their-prices"},{"title":"Get Model","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/models/{model_id}","href":"/api/models/get-model"}]},{"group":"RAG","pages":[{"title":"List Files","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/files","href":"/api/rag/list-files"},{"title":"Init Upload","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/files","href":"/api/rag/init-upload"},{"title":"Get File Status","deprecated":null,"version":null,"openapi":"/api/openapi.json get /v1/files/{file_id}","href":"/api/rag/get-file-status"},{"title":"Delete File","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /v1/files/{file_id}","href":"/api/rag/delete-file"},{"title":"Trigger Embedding Bulk","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/files/embed","href":"/api/rag/trigger-embedding-bulk"},{"title":"Vector Search","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/files/search","href":"/api/rag/vector-search"}]},{"group":"Web Search","pages":[{"title":"Web Search","deprecated":null,"version":null,"openapi":"/api/openapi.json post /v1/web/search","href":"/api/web-search/web-search"}]}]}]},{"tab":"SDKs","icon":"code","pages":[{"title":"SDKs","href":"/sdk/overview"}]},{"tab":"Agent","icon":"robot","pages":[{"title":"Agent","href":"/agent/mcp"}]},{"tab":"Troubleshooting","icon":"bug","pages":[{"title":"Troubleshooting","href":"/debug/mesh-api"}]}]},"basePath":"","title":"Make a structured decision - Mesh API","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-CxAy5y67.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}