Create Disposition Extractor
curl --request POST \
--url https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"key": "<string>",
"name": "<string>",
"description": {},
"scopedToAgent": true,
"systemPromptMd": "<string>",
"promptMd": "<string>",
"outputSchema": {
"kind": "<string>",
"description": "<string>",
"format": "<string>",
"options": [
{}
],
"items": {},
"minItems": 123,
"maxItems": 123,
"properties": {},
"required": [
{}
]
},
"inferenceConfig": {
"contextSources": [
{}
],
"modelProfileKey": "<string>",
"temperature": {},
"maxOutputTokens": {},
"thinking": {}
}
}
'import requests
url = "https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors"
payload = {
"key": "<string>",
"name": "<string>",
"description": {},
"scopedToAgent": True,
"systemPromptMd": "<string>",
"promptMd": "<string>",
"outputSchema": {
"kind": "<string>",
"description": "<string>",
"format": "<string>",
"options": [{}],
"items": {},
"minItems": 123,
"maxItems": 123,
"properties": {},
"required": [{}]
},
"inferenceConfig": {
"contextSources": [{}],
"modelProfileKey": "<string>",
"temperature": {},
"maxOutputTokens": {},
"thinking": {}
}
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
key: '<string>',
name: '<string>',
description: {},
scopedToAgent: true,
systemPromptMd: '<string>',
promptMd: '<string>',
outputSchema: {
kind: '<string>',
description: '<string>',
format: '<string>',
options: [{}],
items: {},
minItems: 123,
maxItems: 123,
properties: {},
required: [{}]
},
inferenceConfig: {
contextSources: [{}],
modelProfileKey: '<string>',
temperature: {},
maxOutputTokens: {},
thinking: {}
}
})
};
fetch('https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors', 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.bland.ai/v2/agents/{agent_id}/dispositions/extractors",
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([
'key' => '<string>',
'name' => '<string>',
'description' => [
],
'scopedToAgent' => true,
'systemPromptMd' => '<string>',
'promptMd' => '<string>',
'outputSchema' => [
'kind' => '<string>',
'description' => '<string>',
'format' => '<string>',
'options' => [
[
]
],
'items' => [
],
'minItems' => 123,
'maxItems' => 123,
'properties' => [
],
'required' => [
[
]
]
],
'inferenceConfig' => [
'contextSources' => [
[
]
],
'modelProfileKey' => '<string>',
'temperature' => [
],
'maxOutputTokens' => [
],
'thinking' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v2/agents/{agent_id}/dispositions/extractors"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v2/agents/{agent_id}/dispositions/extractors")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"extractor": {
"id": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"agentId": null,
"key": "appointment_outcome",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"currentVersionId": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"activeVersionId": null,
"draftRevision": 1,
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.318Z"
},
"currentVersion": {
"id": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"extractorId": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"versionNumber": 1,
"state": "editable",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"systemPromptMd": "",
"promptMd": "Decide whether the caller booked, rescheduled, or declined an appointment. Return unclear if the call ended before a decision.",
"outputSchema": {
"kind": "enum",
"description": "Final appointment outcome for this call.",
"options": [
{ "key": "booked", "label": "Booked" },
{ "key": "rescheduled", "label": "Rescheduled" },
{ "key": "declined", "label": "Declined" },
{ "key": "unclear", "label": "Unclear" }
]
},
"inferenceConfig": {
"modelProfileKey": "balanced",
"thinking": "low",
"contextSources": ["transcript", "call_metadata"]
},
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.312Z"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Invalid request body",
"ext": "{\"errors\":[\"/promptMd: Expected required property\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Extractor definition failed validation",
"ext": "{\"problems\":[\"Call audio extraction requires an audio-capable model profile\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "CONFLICT",
"message": "An extractor with key \"appointment_outcome\" already exists"
}
]
}
Extractors
Create Disposition Extractor
Create an extractor with its first editable version.
POST
/
v2
/
agents
/
{agent_id}
/
dispositions
/
extractors
Create Disposition Extractor
curl --request POST \
--url https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"key": "<string>",
"name": "<string>",
"description": {},
"scopedToAgent": true,
"systemPromptMd": "<string>",
"promptMd": "<string>",
"outputSchema": {
"kind": "<string>",
"description": "<string>",
"format": "<string>",
"options": [
{}
],
"items": {},
"minItems": 123,
"maxItems": 123,
"properties": {},
"required": [
{}
]
},
"inferenceConfig": {
"contextSources": [
{}
],
"modelProfileKey": "<string>",
"temperature": {},
"maxOutputTokens": {},
"thinking": {}
}
}
'import requests
url = "https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors"
payload = {
"key": "<string>",
"name": "<string>",
"description": {},
"scopedToAgent": True,
"systemPromptMd": "<string>",
"promptMd": "<string>",
"outputSchema": {
"kind": "<string>",
"description": "<string>",
"format": "<string>",
"options": [{}],
"items": {},
"minItems": 123,
"maxItems": 123,
"properties": {},
"required": [{}]
},
"inferenceConfig": {
"contextSources": [{}],
"modelProfileKey": "<string>",
"temperature": {},
"maxOutputTokens": {},
"thinking": {}
}
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
key: '<string>',
name: '<string>',
description: {},
scopedToAgent: true,
systemPromptMd: '<string>',
promptMd: '<string>',
outputSchema: {
kind: '<string>',
description: '<string>',
format: '<string>',
options: [{}],
items: {},
minItems: 123,
maxItems: 123,
properties: {},
required: [{}]
},
inferenceConfig: {
contextSources: [{}],
modelProfileKey: '<string>',
temperature: {},
maxOutputTokens: {},
thinking: {}
}
})
};
fetch('https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors', 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.bland.ai/v2/agents/{agent_id}/dispositions/extractors",
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([
'key' => '<string>',
'name' => '<string>',
'description' => [
],
'scopedToAgent' => true,
'systemPromptMd' => '<string>',
'promptMd' => '<string>',
'outputSchema' => [
'kind' => '<string>',
'description' => '<string>',
'format' => '<string>',
'options' => [
[
]
],
'items' => [
],
'minItems' => 123,
'maxItems' => 123,
'properties' => [
],
'required' => [
[
]
]
],
'inferenceConfig' => [
'contextSources' => [
[
]
],
'modelProfileKey' => '<string>',
'temperature' => [
],
'maxOutputTokens' => [
],
'thinking' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v2/agents/{agent_id}/dispositions/extractors"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v2/agents/{agent_id}/dispositions/extractors")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v2/agents/{agent_id}/dispositions/extractors")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": {},\n \"scopedToAgent\": true,\n \"systemPromptMd\": \"<string>\",\n \"promptMd\": \"<string>\",\n \"outputSchema\": {\n \"kind\": \"<string>\",\n \"description\": \"<string>\",\n \"format\": \"<string>\",\n \"options\": [\n {}\n ],\n \"items\": {},\n \"minItems\": 123,\n \"maxItems\": 123,\n \"properties\": {},\n \"required\": [\n {}\n ]\n },\n \"inferenceConfig\": {\n \"contextSources\": [\n {}\n ],\n \"modelProfileKey\": \"<string>\",\n \"temperature\": {},\n \"maxOutputTokens\": {},\n \"thinking\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"extractor": {
"id": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"agentId": null,
"key": "appointment_outcome",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"currentVersionId": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"activeVersionId": null,
"draftRevision": 1,
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.318Z"
},
"currentVersion": {
"id": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"extractorId": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"versionNumber": 1,
"state": "editable",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"systemPromptMd": "",
"promptMd": "Decide whether the caller booked, rescheduled, or declined an appointment. Return unclear if the call ended before a decision.",
"outputSchema": {
"kind": "enum",
"description": "Final appointment outcome for this call.",
"options": [
{ "key": "booked", "label": "Booked" },
{ "key": "rescheduled", "label": "Rescheduled" },
{ "key": "declined", "label": "Declined" },
{ "key": "unclear", "label": "Unclear" }
]
},
"inferenceConfig": {
"modelProfileKey": "balanced",
"thinking": "low",
"contextSources": ["transcript", "call_metadata"]
},
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.312Z"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Invalid request body",
"ext": "{\"errors\":[\"/promptMd: Expected required property\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Extractor definition failed validation",
"ext": "{\"problems\":[\"Call audio extraction requires an audio-capable model profile\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "CONFLICT",
"message": "An extractor with key \"appointment_outcome\" already exists"
}
]
}
Overview
Dispositions are enabled per organization. If your organization does not have access, these endpoints return
404.1 in the editable state. An extractor is a prompt plus an output schema that pulls a structured value out of call evidence; a disposition value pins a published extractor version to run it after each call. Edit the draft with Update Disposition Extractor Draft, then make it pinnable with Publish Disposition Extractor.
Requires an admin, owner, operator, or prompter role.
Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The agent’s unique identifier. A malformed id returns
400 with the message agentId must be a valid UUID.Body Parameters
Unknown fields are rejected. A body that fails shape validation returns400 with the message Invalid request body; a body that passes shape validation but breaks a prompt, schema, or model-profile rule returns 400 with the message Extractor definition failed validation. In both cases the error’s ext field is a JSON string listing each problem.
string
required
Stable machine key for the extractor. 1 to 64 characters matching
^[a-z][a-z0-9_]*$. Must be unique within your organization; a duplicate returns 409 CONFLICT.string
required
Display name. 1 to 120 characters.
string | null
Optional description, up to 2000 characters.
boolean
default:"false"
true limits the extractor to this agent. When false or omitted, the extractor is organization-wide and available to every agent’s dispositions.string
default:""
Optional system prompt in Markdown. Up to 8000 characters and 8000 UTF-8 bytes.
string
required
The extraction prompt in Markdown. 1 to 8000 characters, up to 8000 UTF-8 bytes, and must contain non-whitespace text.
systemPromptMd and promptMd together may not exceed 16000 UTF-8 bytes.object
required
The shape of the value the extractor produces. A schema node is an object with a
kind plus kind-specific fields; array and object nodes nest further schema nodes. The whole schema may nest at most 8 levels deep, contain at most 200 nodes, and serialize to at most 64 KB.Show outputSchema fields
Show outputSchema fields
string
required
One of
boolean, string, number, enum, array, object.string
Optional guidance for the model, up to 2000 characters. Allowed on every kind.
string
string only. The single accepted value is date-time.array
enum only, required for that kind. 1 to 24 objects of the form { "key": "booked", "label": "Booked" }. key is 1 to 64 characters and must be unique within the enum; label is 1 to 120 characters.object
array only, required for that kind. A nested schema node describing each element.integer
array only. Minimum 0, at most 1000, and not greater than maxItems.integer
array only. Minimum 1, at most 1000.object
object only, required for that kind. Map of property names (up to 64 characters each, at most 64 properties) to nested schema nodes. __proto__, constructor, and prototype are not allowed as names.array
object only, required for that kind. Property names that must be present in the produced value. Each must be declared in properties, with no duplicates. Pass [] when nothing is required.object
required
How the extractor runs. Unknown fields are rejected.
Show inferenceConfig fields
Show inferenceConfig fields
array
required
Evidence the extractor reads. 1 to 8 unique values from
transcript, audio_recording, call_metadata, pathway_logs, tool_logs, variables, agent_config, call_config. Including audio_recording requires a model profile whose supportsAudio is true.string
default:"balanced"
One of the
key values returned by Get Model Profile Catalog. 1 to 120 characters. A key that is not in the catalog returns 400 with the message Extractor model profile is not available.number | null
Sampling temperature between
0 and 2.integer | null
Output token cap between
1 and 64000.string | null
Reasoning effort:
low, medium, or high.Response
Returns201 on success.
object
The new extractor.
Show extractor object
Show extractor object
string
Unique identifier for the extractor.
string | null
null for an organization-wide extractor. Otherwise this agent’s id.string
The
key you supplied.string
The extractor’s display name.
string | null
Optional description.
string
The
editable draft version, the same id as data.currentVersion.id. Pass it as expectedVersionId when updating or publishing.null
Always
null on a new extractor; set by the first publish.integer
Always
1 on a new extractor. Pass it as expectedDraftRevision when updating or publishing.string
ISO 8601 timestamp of creation.
string
ISO 8601 timestamp of the last update.
object
Version
1, in the editable state.Show version object
Show version object
string
Unique identifier for the version.
string
The extractor this version belongs to.
integer
1 for a new extractor. Increments on each publish.string
editable for the live draft, archived once published.string
Display name at this version.
string | null
Description at this version.
string
The system prompt. Empty string when none was supplied.
string
The extraction prompt.
object
The schema you supplied.
object
The configuration you supplied, with
modelProfileKey always populated (defaulted to balanced when omitted). temperature, maxOutputTokens, and thinking are omitted when you did not send them.string
ISO 8601 timestamp of creation.
string
ISO 8601 timestamp of the last update.
null | array
null on success, or a list of error objects if the request failed.{
"data": {
"extractor": {
"id": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"agentId": null,
"key": "appointment_outcome",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"currentVersionId": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"activeVersionId": null,
"draftRevision": 1,
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.318Z"
},
"currentVersion": {
"id": "ca112e02-a762-49b0-ba0e-dff4c57ee8ad",
"extractorId": "d6486956-e583-448f-9cb2-3f98dcc0fada",
"versionNumber": 1,
"state": "editable",
"name": "Appointment outcome",
"description": "Whether an appointment was booked, rescheduled, or declined.",
"systemPromptMd": "",
"promptMd": "Decide whether the caller booked, rescheduled, or declined an appointment. Return unclear if the call ended before a decision.",
"outputSchema": {
"kind": "enum",
"description": "Final appointment outcome for this call.",
"options": [
{ "key": "booked", "label": "Booked" },
{ "key": "rescheduled", "label": "Rescheduled" },
{ "key": "declined", "label": "Declined" },
{ "key": "unclear", "label": "Unclear" }
]
},
"inferenceConfig": {
"modelProfileKey": "balanced",
"thinking": "low",
"contextSources": ["transcript", "call_metadata"]
},
"createdAt": "2026-09-10T16:20:45.312Z",
"updatedAt": "2026-09-10T16:20:45.312Z"
}
},
"errors": null
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Invalid request body",
"ext": "{\"errors\":[\"/promptMd: Expected required property\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "BAD_REQUEST",
"message": "Extractor definition failed validation",
"ext": "{\"problems\":[\"Call audio extraction requires an audio-capable model profile\"]}"
}
]
}
{
"data": null,
"errors": [
{
"error": "CONFLICT",
"message": "An extractor with key \"appointment_outcome\" already exists"
}
]
}
Docs for agents: llms.txt
Was this page helpful?