atteq API
  • Guides
  • Recipes
  • Cookbook
  • API Reference
Information
agents
    List AgentsgetCreate AgentpostDocument AttachmentsgetGet VersiongetEdit DraftpatchReplace Draft GraphputPublish VersionpostGet AgentgetDelete AgentdeleteCopy AgentpostGet DraftgetGet Agent MapgetPending ChangesgetList PlacementsgetRestore VersionpostList VersionsgetGet Mapget
voice_agent
    Open Browser CallpostEnd Browser CalldeleteGet Agent Test LinkgetGet Bridge CeilinggetSet Bridge Ceilingpatch
ai_profiles
    Get Ai Profile CapabilitiesgetList Live SettingsgetCreate Live SettingspostDelete Live SettingsdeleteUpdate Live SettingspatchList Llm SettingsgetCreate Llm SettingspostDelete Llm SettingsdeleteUpdate Llm SettingspatchList ProfilesgetCreate ProfilepostGet ProfilegetDelete ProfiledeleteUpdate ProfilepatchCopy ProfilepostSet Text SectionputSet Voice SectionputList Stt SettingsgetCreate Stt SettingspostDelete Stt SettingsdeleteUpdate Stt SettingspatchList Tts SettingsgetCreate Tts SettingspostDelete Tts SettingsdeleteUpdate Tts SettingspatchList Vad SettingsgetCreate Vad SettingspostDelete Vad SettingsdeleteUpdate Vad Settingspatch
analyst
    List Agent FindingsgetCall Back FindingpostDismiss FindingpostUndo Finding DismissaldeleteTeach FindingpostWatch FindingpostList Question ChartsgetList Tracked QuestionsgetCreate Tracked QuestionpostGet Question Search CostgetSearch For Tracked QuestionpostPropose Tracked QuestionpostDelete Tracked QuestiondeleteUpdate Tracked QuestionpatchGet Reading SwitchgetSet Reading SwitchputGet Agent Summaryget
analytics
    List ChartsgetCreate ChartpostPreview ChartpostGet ChartgetDelete ChartdeleteUpdate ChartpatchRun ChartpostList DatasetsgetList BoardsgetCreate BoardpostGet TraversalgetGet BoardgetDelete BoarddeleteUpdate Boardpatch
authentication
    List InvitationsgetInvite MemberpostRevoke InvitationdeleteResend InvitationpostList MembersgetRemove MemberdeleteGet Member Conversation AccessgetSet Member Conversation AccesspatchSet Member FlagspatchSet Member RolepatchGet OrganizationgetUpdate OrganizationpatchGet Role FlagsgetSet Role Flagspatch
automations
    List AutomationsgetCreate AutomationpostGet AutomationgetDelete AutomationdeleteUpdate AutomationpatchSet Automation EnabledputGet Automation MapgetRun AutomationpostList Automation RunsgetGet Automation Runget
billable-metrics
    List MetricsgetUsage SummarygetGet Metricget
outbound_calls
    Place CallpostList CampaignsgetCreate CampaignpostGet CampaigngetDelete CampaigndeleteUpdate CampaignpatchActivate CampaignpostLink CollectionpostAdd ContactspostAdd Contacts From CollectionpostRemove Contacts From CollectionpostSet Campaign HoursputPreview Campaign HourspostPause CampaignpostGet Campaign SummarygetExclude ContactpostInclude Contactpost
channels
    List ChannelsgetCreate ChannelpostList Thread SubjectsgetClose Channel ThreadpostList Thread DecisionsgetGet Thread Contact FilegetHand Thread To AgentpostList Thread MailgetGet Prepared ReplygetAsk Again For Prepared ReplypostDiscard Prepared ReplypostSend Prepared ReplypostReply On Channel ThreadpostGet ChannelgetDelete ChanneldeleteUpdate ChannelpatchSend On ChannelpostList Channel ThreadsgetList RostergetCreate Roster EntrypostGet Own Roster EntrygetGet Roster EntrygetDelete Roster EntrydeleteUpdate Roster EntrypatchAdd Roster AddresspostChange Roster AddressputRemove Roster Addressdelete
custom-data
    List CollectionsgetCreate CollectionpostList Collection NamesgetGet CollectiongetDelete CollectiondeleteUpdate CollectionpatchAdd FieldpostDelete FielddeleteUpdate FieldpatchImport RecordspostPlan ImportpostPropose ImportpostGet ImportgetList RecordsgetCreate RecordpostBulk Delete RecordspostBulk Set FieldpostCount RecordsgetList Records Of ContactgetDelete Records Of ContactdeleteGet RecordgetDelete RecorddeleteUpdate Recordpatch
connections
    List ConnectionsgetCreate ConnectionpostCreate Forwarded AddresspostCreate Mail ServerpostDiscover Mail ServerpostAuthorize Microsoft MailboxpostList ProvidersgetGet ConnectiongetDelete ConnectiondeleteUpdate ConnectionpatchGet Forwarded AddressgetCheck Forwarded AddresspostList Person GrantsgetSet Person GrantputRemove Person GrantdeleteGet Mail ServergetUpdate Mail ServerpatchList Mail Server FoldersgetEnter Mail Server PasswordputChange Mail Server ServersputTest Mail Server AgainpostGet Microsoft MailboxgetUpdate Microsoft MailboxpatchList Microsoft Mailbox FoldersgetConsent To Microsoft Mailbox WritespostWithdraw Microsoft Mailbox Writesdelete
custom-tools
    List Custom ToolsgetCreate Custom ToolpostGet Custom ToolgetDelete Custom TooldeleteGet Custom Tool DraftgetEdit Custom Tool DraftpatchPublish Custom ToolpostRestore Custom Tool VersionpostTry Custom ToolpostList Custom Tool Versionsget
rag
    List DocumentsgetUpload DocumentpostSearch DocumentspostGet DocumentgetDelete DocumentdeleteDownload DocumentgetReingest Documentpost
flows
    List FlowsgetCreate FlowpostGet FlowgetDelete FlowdeleteRename FlowpatchAdd Flow EdgepostDelete Flow EdgedeleteSet Entry SteppatchAdd SteppostDelete StepdeleteUpdate SteppatchTest FlowpostList Flow Testsget
dynamic_context
    Create GraphpostGet GraphgetDelete GraphdeleteAdd EdgepostDelete EdgedeleteAdd NodepostDelete NodedeleteUpdate NodepatchSet Rootput
inbox
    Get Inbox Open CountgetSet Inbox PreferencespatchGet Inbox RailgetCreate Inbox ViewpostDelete Inbox ViewdeleteUpdate Inbox Viewpatch
handoff
    Assign Threadpost
interactions
    List InteractionsgetCount InteractionsgetGet InteractiongetSet Conversation LabelspostGet TracegetGet TranscriptgetList LabelsgetCreate LabelpostDelete LabeldeleteUpdate Labelpatch
legal
    Agree To Processing AgreementpostAgree To TermspostLegal BoxesgetList Legal DocumentsgetRead Legal DocumentgetList Legal VersionsgetRead Legal VersiongetDownload Legal VersiongetOrganization Legal HistorygetOwn Legal HistorygetObject To SubprocessorspostWithdraw ObjectionpostLegal Pendingget
not-a-tool
    Agree To Processing AgreementpostAgree To TermspostObject To SubprocessorspostWithdraw Objectionpost
memory
    List MemoriesgetList Memory LinesgetCreate Memory LinepostDelete Memory LinedeleteUpdate Memory LinepatchList Memory PeoplegetGet Memory PersongetForget PersondeleteGet Memory SwitchgetSet Memory SwitchputWipe ContactdeleteGet Conversation MemorygetRecall MemoriespostGet MemorygetDelete MemorydeletePatch Memorypatch
notifications
    List InboxgetGet Unread CountgetMark ReadpostMark Unreaddelete
recipes
    List RecipesgetList Installed RecipesgetGet Installed RecipegetUninstall RecipedeleteSet Recipe EnabledputUpdate Recipe ParameterspatchUpdate RecipepostInstall Recipepost
data-retention
    Get RetentiongetSet Retentionpatch
text
    Open ConversationpostClose ConversationpostAnswer ConfirmationpostGet Sent FilegetSend MessagepostSet Modepatch
tools
    List ToolsgetCreate ToolpostList BuiltinsgetImport Mcp ServerpostImport OpenapipostPreview Openapi ImportpostSuggest Tool ExamplespostGet ToolgetDelete TooldeleteUpdate ToolpatchTest ToolpostList Tool Testsget
trunks
    List Transfer DirectorygetCreate Transfer Directory EntrypostGet Transfer Directory EntrygetDelete Transfer Directory EntrydeleteUpdate Transfer Directory EntrypatchList TrunksgetCreate TrunkpostGet TrunkgetDelete TrunkdeleteUpdate TrunkpatchList Forward Recordsget
Schemas
powered by Zudoku
attek API
attek API

ai_profiles


Get Ai Profile Capabilities

GET
/api/v1/ai-profiles/capabilities

What the backend will accept: which providers this deployment can run and their voices, every enabled model per kind, and each configuration class with the fields and bounds a component of it carries. Use before building a profile or a component, to know what values are valid. Not organization-scoped — actor is required only so every route on this surface carries the same authentication, not to select what comes back.

Get Ai Profile Capabilities › Responses

200

Successful Response

What the backend will accept — the one response a model picker, a voice picker, a slider's range, and the write path's own refusal all read, so a client and the server it talks to cannot end up disagreeing about what a value may be. A component's form is `models[kind]` filtered to `enabled`, then `classes[<the chosen row's configuration_class>].fields`.
AIProfileCapabilities
​object · required
​ModelsByKind · required

Every registry row, per kind, disabled rows included with enabled=false: a picker offers the enabled ones by display name, and a component already on a disabled one can still say what it is on and that it is no longer offered. The client filters; the server does not guess which rows a caller already has written.

​ProvidersByKind · required
​object · required
​ReaderCeilings

What the reader reads at most, every value filled in: the platform's own (PLATFORM_READER_CEILINGS) or a profile's lower one, as ReaderLimits.ceilings resolves them. What the text channel holds an attachment to.

Default: {"document_bytes":10485760,"document_chars":50000,"image_bytes":5242880,"image_side_px":800,"images_per_burst":5,"questions_per_turn":3,"scan_pages":20,"sheet_rows":300}
GET/api/v1/ai-profiles/capabilities
curl /api/v1/ai-profiles/capabilities \ --header 'Authorization: Bearer <token>'
Example Responses
{ "classes": { "key": { "carries_language": true, "carries_speed": true, "ends_own_turn": true, "fields": { "key": { "default": 0, "kind": "number", "max": 0, "max_items": 0, "max_length": 0, "min": 0, "options": [ "string" ], "pattern": "string", "step": 0 } }, "kind": "llm", "provider": "provider", "reads_images": true, "reads_temperature": true, "sends_language_hint": true } }, "models": { "live": [], "llm": [ { "configuration_class": "configuration_class", "display_name": "display_name", "enabled": true, "enabled_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "kind": "llm", "listed_by_provider": true, "listed_checked_at": "2024-08-25T15:00:00Z", "model": "model", "offered_as_pipeline_recognizer": true, "provider": "provider", "told_step_mid_call": true } ], "stt": [ { "configuration_class": "configuration_class", "display_name": "display_name", "enabled": true, "enabled_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "kind": "llm", "listed_by_provider": true, "listed_checked_at": "2024-08-25T15:00:00Z", "model": "model", "offered_as_pipeline_recognizer": true, "provider": "provider", "told_step_mid_call": true } ], "tts": [ { "configuration_class": "configuration_class", "display_name": "display_name", "enabled": true, "enabled_at": "2024-08-25T15:00:00Z", "id": "00000000-0000-0000-0000-000000000000", "kind": "llm", "listed_by_provider": true, "listed_checked_at": "2024-08-25T15:00:00Z", "model": "model", "offered_as_pipeline_recognizer": true, "provider": "provider", "told_step_mid_call": true } ] }, "providers": { "live": {}, "llm": { "key": { "available": true, "read_at": "2024-08-25T15:00:00Z", "stale": false, "voices": [ { "id": "id", "language": "string", "name": "name" } ] } }, "stt": { "key": { "available": true, "read_at": "2024-08-25T15:00:00Z", "stale": false, "voices": [ { "id": "id", "language": "string", "name": "name" } ] } }, "tts": { "key": { "available": true, "read_at": "2024-08-25T15:00:00Z", "stale": false, "voices": [ { "id": "id", "language": "string", "name": "name" } ] } }, "vad": { "key": { "available": true, "read_at": "2024-08-25T15:00:00Z", "stale": false, "voices": [ { "id": "id", "language": "string", "name": "name" } ] } } }, "reader_ceilings": { "document_bytes": 10485760, "document_chars": 50000, "image_bytes": 5242880, "image_side_px": 800, "images_per_burst": 5, "questions_per_turn": 3, "scan_pages": 20, "sheet_rows": 300 }, "vad": { "key": { "available": true, "fields": { "key": { "default": 0, "kind": "number", "max": 0, "max_items": 0, "max_length": 0, "min": 0, "options": [ "string" ], "pattern": "string", "step": 0 } } } } }
json
application/json

List Live Settings

GET
/api/v1/ai-profiles/live-settings

List the Live (speech-to-speech) components this organization can use: its own and the shared templates, each with the count of profiles pointing at it.

List Live Settings › Responses

200

Successful Response

​LiveSettingsOut[]
LiveSettingsOut
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
provider
​LiveProvider · enum · required

Who runs a live (speech-to-speech) model. ai-profiles.md, "The providers are an enumerated list, and the list grows by adding to it": Google first, OpenAI next (R11) -- a further provider is one more member here and the classes its models were measured into, never a new kind of component.

Enum values:
google
openai
voice
​string · required
​
​
Default: 5
​
GET/api/v1/ai-profiles/live-settings
curl /api/v1/ai-profiles/live-settings \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" } ]
json
application/json

Create Live Settings

POST
/api/v1/ai-profiles/live-settings

Create a Live component: one speech-to-speech model that hears, decides the turn, thinks and speaks by itself -- an enabled live model, one of its provider's live voices, the language it listens and speaks in, and its thinker where its class offers one. Use when a profile's voice section should run as one live model instead of separate STT/LLM/TTS/VAD components. It names no standby: its fallback is the next arrangement of a profile's voice section.

Create Live Settings › Request Body

LiveSettingsIn
language
​string · minLength: 1 · required
model
​string · minLength: 1 · required
name
​string · minLength: 1 · required
provider
​LiveProvider · enum · required

Who runs a live (speech-to-speech) model. ai-profiles.md, "The providers are an enumerated list, and the list grows by adding to it": Google first, OpenAI next (R11) -- a further provider is one more member here and the classes its models were measured into, never a new kind of component.

Enum values:
google
openai
voice
​string · minLength: 1 · required
​
Default: 5
​

Create Live Settings › Responses

Successful Response

LiveSettingsOut
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
provider
​LiveProvider · enum · required

Who runs a live (speech-to-speech) model. ai-profiles.md, "The providers are an enumerated list, and the list grows by adding to it": Google first, OpenAI next (R11) -- a further provider is one more member here and the classes its models were measured into, never a new kind of component.

Enum values:
google
openai
voice
​string · required
​
​
Default: 5
​
POST/api/v1/ai-profiles/live-settings
curl /api/v1/ai-profiles/live-settings \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "provider": "google", "thinking": "off", "voice": "voice" }'
Example Request Body
{ "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "provider": "google", "thinking": "off", "voice": "voice" }
json
Example Responses
{ "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }
json
application/json

Delete Live Settings

DELETE
/api/v1/ai-profiles/live-settings/{settings_id}

Delete one of this organization's Live components. Refused with the count while any profile points at it.

Delete Live Settings › path Parameters

settings_id
​string · uuid · required

Delete Live Settings › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/live-settings/{settings_id}
curl /api/v1/ai-profiles/live-settings/:settings_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Live Settings

PATCH
/api/v1/ai-profiles/live-settings/{settings_id}

Edit a Live component; only the fields sent change. If more than one profile uses it, send apply_to=all to change it for all of them, or apply_to=copy with profile_id to change a copy for that profile only.

Update Live Settings › path Parameters

settings_id
​string · uuid · required

Update Live Settings › query Parameters

apply_to
​
profile_id
​

Update Live Settings › Request Body

LiveSettingsUpdate
​
​
​
​
​
​
​

Update Live Settings › Responses

Successful Response

LiveSettingsOut
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
provider
​LiveProvider · enum · required

Who runs a live (speech-to-speech) model. ai-profiles.md, "The providers are an enumerated list, and the list grows by adding to it": Google first, OpenAI next (R11) -- a further provider is one more member here and the classes its models were measured into, never a new kind of component.

Enum values:
google
openai
voice
​string · required
​
​
Default: 5
​
PATCH/api/v1/ai-profiles/live-settings/{settings_id}
curl /api/v1/ai-profiles/live-settings/:settings_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "language": "string", "max_tool_rounds": 1, "model": "string", "name": "string", "provider": "google", "thinking": "off", "voice": "string" }'
Example Request Body
{ "language": "string", "max_tool_rounds": 1, "model": "string", "name": "string", "provider": "google", "thinking": "off", "voice": "string" }
json
Example Responses
{ "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }
json
application/json

List Llm Settings

GET
/api/v1/ai-profiles/llm-settings

List the language model components this organization can use: its own and the shared templates. Each carries in_use_by (profiles pointing at it) and standby_for (components naming it as their standby).

List Llm Settings › Responses

200

Successful Response

​LLMSettingsOut[]
LLMSettingsOut
id
​string · uuid · required
​required
​required
model
​string · required
name
​string · required
​required
provider
​LLMProvider · enum · required
Enum values:
openai
anthropic
google
azure_openai
groq
​required
temperature
​number · required
​
​
​
​
​
GET/api/v1/ai-profiles/llm-settings
curl /api/v1/ai-profiles/llm-settings \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" } ]
json
application/json

Create Llm Settings

POST
/api/v1/ai-profiles/llm-settings

Create a language model component: a provider, an enabled model and the settings its class carries. Use when a profile needs a new LLM ingredient instead of reusing an existing one. max_tool_rounds is how many rounds of tools one turn may chain before it is cut; omitted, it starts at the bounded default. null means no ceiling -- a turn chains rounds until the model answers and is never cut for looping. Write that only on purpose: an agent that runs twenty tools without a word to the person is usually looping, so a client agent should keep a bound.

Create Llm Settings › Request Body

LLMSettingsIn
model
​string · minLength: 1 · required
name
​string · minLength: 1 · required
provider
​LLMProvider · enum · required
Enum values:
openai
anthropic
google
azure_openai
groq
​
​
Default: 10
​
temperature
​number · min: 0 · max: 2
Default: 0.7
​

Create Llm Settings › Responses

Successful Response

LLMSettingsOut
id
​string · uuid · required
​required
​required
model
​string · required
name
​string · required
​required
provider
​LLMProvider · enum · required
Enum values:
openai
anthropic
google
azure_openai
groq
​required
temperature
​number · required
​
​
​
​
​
POST/api/v1/ai-profiles/llm-settings
curl /api/v1/ai-profiles/llm-settings \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "max_tokens": 1, "max_tool_rounds": 10, "model": "model", "name": "name", "provider": "openai", "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0.7, "thinking": "off" }'
Example Request Body
{ "max_tokens": 1, "max_tool_rounds": 10, "model": "model", "name": "name", "provider": "openai", "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0.7, "thinking": "off" }
json
Example Responses
{ "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }
json
application/json

Delete Llm Settings

DELETE
/api/v1/ai-profiles/llm-settings/{settings_id}

Delete one of this organization's language model components. Refused with the count while any profile points at it or any component names it as its standby.

Delete Llm Settings › path Parameters

settings_id
​string · uuid · required

Delete Llm Settings › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/llm-settings/{settings_id}
curl /api/v1/ai-profiles/llm-settings/:settings_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Llm Settings

PATCH
/api/v1/ai-profiles/llm-settings/{settings_id}

Edit a language model component; only the fields sent change. Use when an existing LLM component's settings need to change. Sending max_tool_rounds: null lifts the ceiling on rounds of tools per turn (see the create operation for what that means and why a client agent should keep a bound); leaving it out keeps the ceiling as it is.

Update Llm Settings › path Parameters

settings_id
​string · uuid · required

Update Llm Settings › query Parameters

apply_to
​
profile_id
​

Update Llm Settings › Request Body

LLMSettingsUpdate
​
​
​
​
​
​
​
​

Update Llm Settings › Responses

Successful Response

LLMSettingsOut
id
​string · uuid · required
​required
​required
model
​string · required
name
​string · required
​required
provider
​LLMProvider · enum · required
Enum values:
openai
anthropic
google
azure_openai
groq
​required
temperature
​number · required
​
​
​
​
​
PATCH/api/v1/ai-profiles/llm-settings/{settings_id}
curl /api/v1/ai-profiles/llm-settings/:settings_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "max_tokens": 1, "max_tool_rounds": 1, "model": "string", "name": "string", "provider": "openai", "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "off" }'
Example Request Body
{ "max_tokens": 1, "max_tool_rounds": 1, "model": "string", "name": "string", "provider": "openai", "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "off" }
json
Example Responses
{ "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }
json
application/json

List Profiles

GET
/api/v1/ai-profiles/profiles

List the AI profiles this organization can use: its own and the shared templates, each with its voice arrangements and text section resolved inline and in_use_by, the number of agents with a version on it.

List Profiles › Responses

200

Successful Response

​ProfileOut[]
The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
GET/api/v1/ai-profiles/profiles
curl /api/v1/ai-profiles/profiles \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] } ]
json
application/json

Create Profile

POST
/api/v1/ai-profiles/profiles

Create an AI profile — the bundle of model settings an agent pins. Use when an agent needs a new combination of voice/text components instead of reusing an existing profile.

Create Profile › Request Body

A new profile, written as its two sections: the text section, required because any agent can be reached by text, and the voice section's arrangements in the order a call tries them -- none for a profile that takes no calls. Unknown fields are refused, so a caller still sending the flat slot ids the sections replaced is told so (422) rather than answered 200 with them ignored.
ProfileIn
name
​string · minLength: 1 · required
description
​string
Default:
​
​
​ArrangementIn[]

Create Profile › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
POST/api/v1/ai-profiles/profiles
curl /api/v1/ai-profiles/profiles \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "description": "", "kind": "text", "name": "name", "text": { "llm_settings_id": "00000000-0000-0000-0000-000000000000", "reader_id": "00000000-0000-0000-0000-000000000000", "reader_limits": { "document_bytes": 1, "document_chars": 1, "image_bytes": 1, "image_side_px": 800, "images_per_burst": 1, "questions_per_turn": 1, "scan_pages": 1, "sheet_rows": 1 }, "transcriber_id": "00000000-0000-0000-0000-000000000000" }, "voice": [ { "kind": "pipeline", "live_settings_id": "00000000-0000-0000-0000-000000000000", "llm_settings_id": "00000000-0000-0000-0000-000000000000", "stt_settings_id": "00000000-0000-0000-0000-000000000000", "tts_settings_id": "00000000-0000-0000-0000-000000000000", "vad_settings_id": "00000000-0000-0000-0000-000000000000" } ] }'
Example Request Body
{ "description": "", "kind": "text", "name": "name", "text": { "llm_settings_id": "00000000-0000-0000-0000-000000000000", "reader_id": "00000000-0000-0000-0000-000000000000", "reader_limits": { "document_bytes": 1, "document_chars": 1, "image_bytes": 1, "image_side_px": 800, "images_per_burst": 1, "questions_per_turn": 1, "scan_pages": 1, "sheet_rows": 1 }, "transcriber_id": "00000000-0000-0000-0000-000000000000" }, "voice": [ { "kind": "pipeline", "live_settings_id": "00000000-0000-0000-0000-000000000000", "llm_settings_id": "00000000-0000-0000-0000-000000000000", "stt_settings_id": "00000000-0000-0000-0000-000000000000", "tts_settings_id": "00000000-0000-0000-0000-000000000000", "vad_settings_id": "00000000-0000-0000-0000-000000000000" } ] }
json
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

Get Profile

GET
/api/v1/ai-profiles/profiles/{profile_id}

Read one AI profile, own or shared template, with its voice arrangements (in the order a call tries them), its text section and in_use_by, the number of agents with a version on it. Another organization's profile is not found.

Get Profile › path Parameters

profile_id
​string · uuid · required

Get Profile › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
GET/api/v1/ai-profiles/profiles/{profile_id}
curl /api/v1/ai-profiles/profiles/:profile_id \ --header 'Authorization: Bearer <token>'
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

Delete Profile

DELETE
/api/v1/ai-profiles/profiles/{profile_id}

Delete an AI profile. Use when the profile should no longer exist. Refused while an agent still uses it; the refusal says how many.

Delete Profile › path Parameters

profile_id
​string · uuid · required

Delete Profile › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/profiles/{profile_id}
curl /api/v1/ai-profiles/profiles/:profile_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Profile

PATCH
/api/v1/ai-profiles/profiles/{profile_id}

Change which settings an AI profile points at. Use when an existing profile's name or pinned components need to change.

Update Profile › path Parameters

profile_id
​string · uuid · required

Update Profile › Request Body

Partial edit of what a profile is called. The sections are written by `set_voice_section` and `set_text_section`, each whole. Unknown fields -- the retired slot ids among them -- are refused rather than ignored.
ProfileUpdate
​
​

Update Profile › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
PATCH/api/v1/ai-profiles/profiles/{profile_id}
curl /api/v1/ai-profiles/profiles/:profile_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "description": "string", "name": "string" }'
Example Request Body
{ "description": "string", "name": "string" }
json
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

Copy Profile

POST
/api/v1/ai-profiles/profiles/{profile_id}/copy

Duplicate an AI profile as a new one. Use when starting a new profile from an existing one instead of from scratch — a route of its own, never a side effect of saving an edit.

Copy Profile › path Parameters

profile_id
​string · uuid · required

Copy Profile › Request Body

Taking a copy of a profile. The name is required and carries no default: the spec's whole complaint about the legacy fork is that the copy kept the template's name and the client ended up with two profiles called the same thing.
ProfileCopy
name
​string · minLength: 1 · required

Copy Profile › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
POST/api/v1/ai-profiles/profiles/{profile_id}/copy
curl /api/v1/ai-profiles/profiles/:profile_id/copy \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "name": "name" }'
Example Request Body
{ "name": "name" }
json
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

Set Text Section

PUT
/api/v1/ai-profiles/profiles/{profile_id}/text

Write a profile's text section: the model every written conversation is held by, the recognizer that reads a voice note -- or none, which announces voice notes instead of transcribing them -- and the language model that reads images and documents, with its ceilings. A reader or ceilings left out are kept as they are; reader_id: null removes the reader. Use when setting up or changing how this profile handles written conversations.

Set Text Section › path Parameters

profile_id
​string · uuid · required

Set Text Section › Request Body

The text section: the model every written conversation is held by -- required, because any agent can be reached by text -- and, optionally, the recognizer that reads a voice note and the language model that reads an image or a scanned page. With no transcriber a voice note is announced, not transcribed (ai-profiles.md, 2026-09-21); with no reader an image or a document is announced, not read (rule 75). On a rewrite of a profile's section, `reader_id` and `reader_limits` left out mean *unchanged* (rule 75, #1385): a writer that predates the reader keeps it. `reader_id: null` removes the reader, and `reader_limits` sent is written whole -- a ceiling left out of it is the platform's. On a new profile, left out is no reader and the platform's ceilings.
TextSectionIn
llm_settings_id
​string · uuid · required
​
​ReaderLimits

The reader's ceilings as a profile writes them (ai-profiles.md rule 77): each one the platform's, or lower -- None is "the platform's", which is what every profile starts with. The smallest image runs the other way: a profile may ask for a larger one, never a smaller. Unknown fields are refused, so a ceiling misspelled is a 422 rather than the platform's silently.

​

Set Text Section › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
PUT/api/v1/ai-profiles/profiles/{profile_id}/text
curl /api/v1/ai-profiles/profiles/:profile_id/text \ --request PUT \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "llm_settings_id": "00000000-0000-0000-0000-000000000000", "reader_id": "00000000-0000-0000-0000-000000000000", "reader_limits": { "document_bytes": 1, "document_chars": 1, "image_bytes": 1, "image_side_px": 800, "images_per_burst": 1, "questions_per_turn": 1, "scan_pages": 1, "sheet_rows": 1 }, "transcriber_id": "00000000-0000-0000-0000-000000000000" }'
Example Request Body
{ "llm_settings_id": "00000000-0000-0000-0000-000000000000", "reader_id": "00000000-0000-0000-0000-000000000000", "reader_limits": { "document_bytes": 1, "document_chars": 1, "image_bytes": 1, "image_side_px": 800, "images_per_burst": 1, "questions_per_turn": 1, "scan_pages": 1, "sheet_rows": 1 }, "transcriber_id": "00000000-0000-0000-0000-000000000000" }
json
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

Set Voice Section

PUT
/api/v1/ai-profiles/profiles/{profile_id}/voice

Write a profile's voice section whole: its arrangements, in the order a call tries them. Use when setting up or changing how this profile handles calls, including its fallback order. The first that can open takes the call; each is either a pipeline (recognizer, model, voice, detector) or a speech_to_speech arrangement (one Live component). An empty list is a profile that takes no calls.

Set Voice Section › path Parameters

profile_id
​string · uuid · required

Set Voice Section › Request Body

The whole voice section, in the order the arrangements are tried at the start of a call. Written whole: the order *is* the fallback, so a partial edit that could leave two arrangements at one position is not offered. An empty list is a profile that takes no calls.
VoiceSectionIn
​ArrangementIn[] · required

Set Voice Section › Responses

Successful Response

The bundle: a profile with its two sections resolved inline.
ProfileOut
​required
description
​string · required
id
​string · uuid · required
​required
kind
​string · enum · required
Enum values:
text
voice
Default: text
name
​string · required
​required
​required
​ArrangementOut[] · required
PUT/api/v1/ai-profiles/profiles/{profile_id}/voice
curl /api/v1/ai-profiles/profiles/:profile_id/voice \ --request PUT \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "arrangements": [ { "kind": "pipeline", "live_settings_id": "00000000-0000-0000-0000-000000000000", "llm_settings_id": "00000000-0000-0000-0000-000000000000", "stt_settings_id": "00000000-0000-0000-0000-000000000000", "tts_settings_id": "00000000-0000-0000-0000-000000000000", "vad_settings_id": "00000000-0000-0000-0000-000000000000" } ] }'
Example Request Body
{ "arrangements": [ { "kind": "pipeline", "live_settings_id": "00000000-0000-0000-0000-000000000000", "llm_settings_id": "00000000-0000-0000-0000-000000000000", "stt_settings_id": "00000000-0000-0000-0000-000000000000", "tts_settings_id": "00000000-0000-0000-0000-000000000000", "vad_settings_id": "00000000-0000-0000-0000-000000000000" } ] }
json
Example Responses
{ "copied_from_id": "00000000-0000-0000-0000-000000000000", "description": "description", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "kind": "text", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "text": { "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "reader_limits": {}, "transcriber": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } }, "voice": [ { "kind": "pipeline", "live": { "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "max_tool_rounds": 5, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "google", "thinking": "string", "voice": "voice" }, "llm": { "configuration_class": "string", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "max_tokens": 0, "max_tool_rounds": 0, "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "provider": "openai", "reads_images": true, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "temperature": 0, "thinking": "string" }, "position": 0, "stt": { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }, "tts": { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }, "vad": { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } } ] }
json
application/json

List Stt Settings

GET
/api/v1/ai-profiles/stt-settings

List the speech-to-text components this organization can use: its own and the shared templates, each with in_use_by and standby_for counts.

List Stt Settings › Responses

200

Successful Response

​STTSettingsOut[]
STTSettingsOut
eot_threshold
​number · required
eot_timeout_ms
​integer · required
filler_words
​boolean · required
id
​string · uuid · required
keyterms
​string[] · required
language
​string · required
model
​string · required
name
​string · required
numerals
​boolean · required
​required
profanity_filter
​boolean · required
provider
​STTProvider · enum · required
Enum values:
deepgram
deepgram_flux
openai
assemblyai
google
punctuate
​boolean · required
redact
​string[] · required
​required
​
​
​
GET/api/v1/ai-profiles/stt-settings
curl /api/v1/ai-profiles/stt-settings \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" } ]
json
application/json

Create Stt Settings

POST
/api/v1/ai-profiles/stt-settings

Create a speech-to-text component: a provider, an enabled model, the language it listens in and how it decides the caller has finished speaking. Values are checked against GET /ai-profiles/capabilities; standby_id names the component a text profile's transcriber falls back to -- on a call the standby is the recognizer in its place in the voice profile's next arrangement below.

Create Stt Settings › Request Body

STTSettingsIn
model
​string · minLength: 1 · required
name
​string · minLength: 1 · required
provider
​STTProvider · enum · required
Enum values:
deepgram
deepgram_flux
openai
assemblyai
google
​
eot_threshold
​number · min: 0 · max: 1
Default: 0.7
eot_timeout_ms
​integer · min: 100 · max: 60000
Default: 3000
filler_words
​boolean
Default: true
keyterms
​string[] · maxItems: 100
Default: []
​
numerals
​boolean
Default: false
profanity_filter
​boolean
Default: false
punctuate
​boolean
Default: true
redact
​string[]
Enum values:
pci
pii
numbers
Default: []
​

Create Stt Settings › Responses

Successful Response

STTSettingsOut
eot_threshold
​number · required
eot_timeout_ms
​integer · required
filler_words
​boolean · required
id
​string · uuid · required
keyterms
​string[] · required
language
​string · required
model
​string · required
name
​string · required
numerals
​boolean · required
​required
profanity_filter
​boolean · required
provider
​STTProvider · enum · required
Enum values:
deepgram
deepgram_flux
openai
assemblyai
google
punctuate
​boolean · required
redact
​string[] · required
​required
​
​
​
POST/api/v1/ai-profiles/stt-settings
curl /api/v1/ai-profiles/stt-settings \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "eager_eot_threshold": 0, "eot_threshold": 0.7, "eot_timeout_ms": 3000, "filler_words": true, "keyterms": [], "language": "string", "model": "model", "name": "name", "numerals": false, "profanity_filter": false, "provider": "deepgram", "punctuate": true, "redact": [], "standby_id": "00000000-0000-0000-0000-000000000000" }'
Example Request Body
{ "eager_eot_threshold": 0, "eot_threshold": 0.7, "eot_timeout_ms": 3000, "filler_words": true, "keyterms": [], "language": "string", "model": "model", "name": "name", "numerals": false, "profanity_filter": false, "provider": "deepgram", "punctuate": true, "redact": [], "standby_id": "00000000-0000-0000-0000-000000000000" }
json
Example Responses
{ "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }
json
application/json

Delete Stt Settings

DELETE
/api/v1/ai-profiles/stt-settings/{settings_id}

Delete one of this organization's speech-to-text components. Refused with the count while any profile points at it or any component names it as its standby.

Delete Stt Settings › path Parameters

settings_id
​string · uuid · required

Delete Stt Settings › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/stt-settings/{settings_id}
curl /api/v1/ai-profiles/stt-settings/:settings_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Stt Settings

PATCH
/api/v1/ai-profiles/stt-settings/{settings_id}

Edit a speech-to-text component; only the fields sent change. If more than one profile uses it, send apply_to=all to change it for all of them, or apply_to=copy with profile_id to change a copy for that profile only.

Update Stt Settings › path Parameters

settings_id
​string · uuid · required

Update Stt Settings › query Parameters

apply_to
​
profile_id
​

Update Stt Settings › Request Body

STTSettingsUpdate
​
​
​
​
​
​
​
​
​
​
​
​
​
​

Update Stt Settings › Responses

Successful Response

STTSettingsOut
eot_threshold
​number · required
eot_timeout_ms
​integer · required
filler_words
​boolean · required
id
​string · uuid · required
keyterms
​string[] · required
language
​string · required
model
​string · required
name
​string · required
numerals
​boolean · required
​required
profanity_filter
​boolean · required
provider
​STTProvider · enum · required
Enum values:
deepgram
deepgram_flux
openai
assemblyai
google
punctuate
​boolean · required
redact
​string[] · required
​required
​
​
​
PATCH/api/v1/ai-profiles/stt-settings/{settings_id}
curl /api/v1/ai-profiles/stt-settings/:settings_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 100, "filler_words": true, "keyterms": [ "string" ], "language": "string", "model": "string", "name": "string", "numerals": true, "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "pci" ], "standby_id": "00000000-0000-0000-0000-000000000000" }'
Example Request Body
{ "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 100, "filler_words": true, "keyterms": [ "string" ], "language": "string", "model": "string", "name": "string", "numerals": true, "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "pci" ], "standby_id": "00000000-0000-0000-0000-000000000000" }
json
Example Responses
{ "eager_eot_threshold": 0, "eot_threshold": 0, "eot_timeout_ms": 0, "filler_words": true, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "keyterms": [ "string" ], "language": "language", "model": "model", "name": "name", "numerals": true, "org_id": "00000000-0000-0000-0000-000000000000", "profanity_filter": true, "provider": "deepgram", "punctuate": true, "redact": [ "string" ], "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000" }
json
application/json

List Tts Settings

GET
/api/v1/ai-profiles/tts-settings

List the text-to-speech components this organization can use: its own and the shared templates, each with in_use_by and standby_for counts.

List Tts Settings › Responses

200

Successful Response

​TTSSettingsOut[]
TTSSettingsOut
emotion
​string · required
emotion_intensity
​string · required
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
​required
provider
​TTSProvider · enum · required
Enum values:
openai
elevenlabs
cartesia
google
speed
​number · required
​required
voice
​string · required
volume
​number · required
​
​
GET/api/v1/ai-profiles/tts-settings
curl /api/v1/ai-profiles/tts-settings \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 } ]
json
application/json

Create Tts Settings

POST
/api/v1/ai-profiles/tts-settings

Create a text-to-speech component: a provider, an enabled model and one of its voices, with language, speed, volume, emotion and an optional pronunciation dictionary. A pronunciation_dict_id the provider says does not exist is refused, and so is a standby_id: a voice's standby on a call is the voice in its place in the profile's next arrangement below, so set it there.

Create Tts Settings › Request Body

TTSSettingsIn
model
​string · minLength: 1 · required
name
​string · minLength: 1 · required
provider
​TTSProvider · enum · required
Enum values:
openai
elevenlabs
cartesia
google
voice
​string · minLength: 1 · required
emotion
​string · enum
Enum values:
neutral
anger
curiosity
positivity
sadness
surprise
Default: neutral
emotion_intensity
​string · enum
Enum values:
lowest
low
normal
high
Default: normal
​
​
speed
​number · min: 0.25 · max: 4
Default: 1
​
volume
​number · min: 0.25 · max: 4
Default: 1

Create Tts Settings › Responses

Successful Response

TTSSettingsOut
emotion
​string · required
emotion_intensity
​string · required
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
​required
provider
​TTSProvider · enum · required
Enum values:
openai
elevenlabs
cartesia
google
speed
​number · required
​required
voice
​string · required
volume
​number · required
​
​
POST/api/v1/ai-profiles/tts-settings
curl /api/v1/ai-profiles/tts-settings \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "emotion": "neutral", "emotion_intensity": "normal", "language": "string", "model": "model", "name": "name", "pronunciation_dict_id": "string", "provider": "openai", "speed": 1, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 1 }'
Example Request Body
{ "emotion": "neutral", "emotion_intensity": "normal", "language": "string", "model": "model", "name": "name", "pronunciation_dict_id": "string", "provider": "openai", "speed": 1, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 1 }
json
Example Responses
{ "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }
json
application/json

Delete Tts Settings

DELETE
/api/v1/ai-profiles/tts-settings/{settings_id}

Delete one of this organization's text-to-speech components. Refused with the count while any profile points at it; a voice naming it as a standby no longer counts, and that standby is cleared.

Delete Tts Settings › path Parameters

settings_id
​string · uuid · required

Delete Tts Settings › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/tts-settings/{settings_id}
curl /api/v1/ai-profiles/tts-settings/:settings_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Tts Settings

PATCH
/api/v1/ai-profiles/tts-settings/{settings_id}

Edit a text-to-speech component; only the fields sent change. If more than one profile uses it, send apply_to=all to change it for all of them, or apply_to=copy with profile_id to change a copy for that profile only. A standby_id other than null is refused: add a row below in the profile instead.

Update Tts Settings › path Parameters

settings_id
​string · uuid · required

Update Tts Settings › query Parameters

apply_to
​
profile_id
​

Update Tts Settings › Request Body

TTSSettingsUpdate
​
​
​
​
​
​
​
​
​
​
​

Update Tts Settings › Responses

Successful Response

TTSSettingsOut
emotion
​string · required
emotion_intensity
​string · required
id
​string · uuid · required
language
​string · required
model
​string · required
name
​string · required
​required
​required
provider
​TTSProvider · enum · required
Enum values:
openai
elevenlabs
cartesia
google
speed
​number · required
​required
voice
​string · required
volume
​number · required
​
​
PATCH/api/v1/ai-profiles/tts-settings/{settings_id}
curl /api/v1/ai-profiles/tts-settings/:settings_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "emotion": "neutral", "emotion_intensity": "lowest", "language": "string", "model": "string", "name": "string", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0.25, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "string", "volume": 0.25 }'
Example Request Body
{ "emotion": "neutral", "emotion_intensity": "lowest", "language": "string", "model": "string", "name": "string", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0.25, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "string", "volume": 0.25 }
json
Example Responses
{ "emotion": "emotion", "emotion_intensity": "emotion_intensity", "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "language": "language", "model": "model", "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "pronunciation_dict_id": "string", "provider": "openai", "speed": 0, "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "voice": "voice", "volume": 0 }
json
application/json

List Vad Settings

GET
/api/v1/ai-profiles/vad-settings

List the voice activity detection components this organization can use: its own and the shared templates, each with in_use_by and standby_for counts.

List Vad Settings › Responses

200

Successful Response

​VADSettingsOut[]
VADSettingsOut
allow_interruptions
​boolean · required
deactivation_gap
​number · required
id
​string · uuid · required
min_silence_ms
​integer · required
min_speech_ms
​integer · required
name
​string · required
​required
prefix_padding_ms
​integer · required
provider
​VADProvider · enum · required
Enum values:
silero
livekit
​required
threshold
​number · required
​
​
GET/api/v1/ai-profiles/vad-settings
curl /api/v1/ai-profiles/vad-settings \ --header 'Authorization: Bearer <token>'
Example Responses
[ { "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 } ]
json
application/json

Create Vad Settings

POST
/api/v1/ai-profiles/vad-settings

Create a voice activity detection component: how loud and how long sound must be to count as speech, how much silence ends it, and whether the caller may interrupt the agent. Every field has a default. A standby_id is refused: a detector's standby on a call is the detector in its place in the profile's next arrangement below, so set it there.

Create Vad Settings › Request Body

VADSettingsIn
name
​string · minLength: 1 · required
allow_interruptions
​boolean
Default: true
deactivation_gap
​number · min: 0 · max: 0.5
Default: 0.15
min_silence_ms
​integer · min: 200 · max: 5000
Default: 500
min_speech_ms
​integer · min: 0 · max: 500
Default: 50
prefix_padding_ms
​integer · min: 0 · max: 2000
Default: 300
provider
​VADProvider · enum
Enum values:
silero
livekit
Default: silero
​
threshold
​number · min: 0 · max: 1
Default: 0.5

Create Vad Settings › Responses

Successful Response

VADSettingsOut
allow_interruptions
​boolean · required
deactivation_gap
​number · required
id
​string · uuid · required
min_silence_ms
​integer · required
min_speech_ms
​integer · required
name
​string · required
​required
prefix_padding_ms
​integer · required
provider
​VADProvider · enum · required
Enum values:
silero
livekit
​required
threshold
​number · required
​
​
POST/api/v1/ai-profiles/vad-settings
curl /api/v1/ai-profiles/vad-settings \ --request POST \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "allow_interruptions": true, "deactivation_gap": 0.15, "min_silence_ms": 500, "min_speech_ms": 50, "name": "name", "prefix_padding_ms": 300, "provider": "silero", "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0.5 }'
Example Request Body
{ "allow_interruptions": true, "deactivation_gap": 0.15, "min_silence_ms": 500, "min_speech_ms": 50, "name": "name", "prefix_padding_ms": 300, "provider": "silero", "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0.5 }
json
Example Responses
{ "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 }
json
application/json

Delete Vad Settings

DELETE
/api/v1/ai-profiles/vad-settings/{settings_id}

Delete one of this organization's voice activity detection components. Refused with the count while any profile points at it; a detector naming it as a standby no longer counts, and that standby is cleared.

Delete Vad Settings › path Parameters

settings_id
​string · uuid · required

Delete Vad Settings › Responses

Successful Response

No data returned
DELETE/api/v1/ai-profiles/vad-settings/{settings_id}
curl /api/v1/ai-profiles/vad-settings/:settings_id \ --request DELETE \ --header 'Authorization: Bearer <token>'
Example Responses
No example specified for this content type

Update Vad Settings

PATCH
/api/v1/ai-profiles/vad-settings/{settings_id}

Edit a voice activity detection component; only the fields sent change. If more than one profile uses it, send apply_to=all to change it for all of them, or apply_to=copy with profile_id to change a copy for that profile only. A standby_id other than null is refused: add a row below in the profile instead.

Update Vad Settings › path Parameters

settings_id
​string · uuid · required

Update Vad Settings › query Parameters

apply_to
​
profile_id
​

Update Vad Settings › Request Body

VADSettingsUpdate
​
​
​
​
​
​
​
​
​

Update Vad Settings › Responses

Successful Response

VADSettingsOut
allow_interruptions
​boolean · required
deactivation_gap
​number · required
id
​string · uuid · required
min_silence_ms
​integer · required
min_speech_ms
​integer · required
name
​string · required
​required
prefix_padding_ms
​integer · required
provider
​VADProvider · enum · required
Enum values:
silero
livekit
​required
threshold
​number · required
​
​
PATCH/api/v1/ai-profiles/vad-settings/{settings_id}
curl /api/v1/ai-profiles/vad-settings/:settings_id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <token>' \ --data '{ "allow_interruptions": true, "deactivation_gap": 0, "min_silence_ms": 200, "min_speech_ms": 0, "name": "string", "prefix_padding_ms": 0, "provider": "silero", "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 }'
Example Request Body
{ "allow_interruptions": true, "deactivation_gap": 0, "min_silence_ms": 200, "min_speech_ms": 0, "name": "string", "prefix_padding_ms": 0, "provider": "silero", "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 }
json
Example Responses
{ "allow_interruptions": true, "deactivation_gap": 0, "id": "00000000-0000-0000-0000-000000000000", "in_use_by": 0, "min_silence_ms": 0, "min_speech_ms": 0, "name": "name", "org_id": "00000000-0000-0000-0000-000000000000", "prefix_padding_ms": 0, "provider": "silero", "standby_for": 0, "standby_id": "00000000-0000-0000-0000-000000000000", "threshold": 0 }
json
application/json

voice_agentanalyst