API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.
Per-agent website chat widget settings. A JSON object; set only the keys you need. Enabling the widget the first time mints a public embed key (returned as the read-only 'widgetKey' on the agent).
Optional outbound-specific opening. On outbound calls it is spoken instead of firstMessage; null or empty means firstMessage is used for both directions. Supports {{variables}}.
Who opens the conversation. agent (default) speaks the opening. user keeps the agent silent, including the re-engagement prompt, until the caller speaks (see beginAfterUserSilenceMs).
Milliseconds to wait after the call is reported answered before the opening is spoken. Null or 0 speaks it immediately. Useful on routes that report a call answered while the phone is still ringing. If the caller speaks during the pause the opening is skipped.
For calls where the caller speaks first (startSpeaker or startSpeakerOutbound set to user): if the caller has said nothing after this many milliseconds, the agent speaks its opening. If the caller speaks first, the agent replies to them as usual. Null (default) keeps waiting. Keep it shorter than silenceEndCallTimeoutSeconds, otherwise a silent call ends before the agent speaks.
How the agent opens the call. "static" (default) speaks the first message text. "dynamic" generates the opening line from the agent's prompt, so one agent can greet inbound and outbound callers differently. When omitted, the agent speaks the first message if set, otherwise waits for the caller.
Language model tier powering the agent. Usage is billed per minute at the tier's rate: revring-standard $0.03/min, revring-max $0.05/min, revring-ultra $0.065/min. Defaults to revring-standard.
Payload shape of the post-call webhook. retell sends Retell's call_ended and call_analyzed events; elevenlabs sends post_call_transcription (or call_initiation_failure for dials that never connected). See compatibility formats.
Extra events sent to the post-call webhook URL. call.started is sent once when a call connects; transfer.started, transfer.bridged and transfer.cancelled report transfers as they happen.
Success criteria judged after every call (see PostCallEvaluationConfig). null = off
Show child attributes
Example:
{ "criteria": [ { "name": "appointment_confirmed", "description": "The caller confirmed an appointment date and time" }, { "name": "callback_requested", "description": "The caller asked to be called back" } ] }
What call content is kept. full keeps everything; redact_pii removes personal details from the transcript and summary before the call is stored or sent. See Data Controls.
Backup voice ID for seamless voice continuity: in the rare case the primary voice is temporarily unavailable, the agent switches to this voice automatically. Omit or set null to let the platform pick a standard backup voice.
Minimum speech duration (ms) before the caller's speech is registered as an interruption. Lower values make the agent easier to interrupt. Range: 100-2000, default 500.
Acknowledgment words or short phrases that never interrupt the agent while it is speaking (for example "okay", "yeah", "uh-huh"). Anything beyond a brief acknowledgment still interrupts normally, and these words behave normally when the agent is not speaking. null (default) uses the recommended platform list, [] disables the feature, and a list fully replaces the recommended list.
Names or terms to boost in speech recognition, such as brand names, product names, or uncommon personal names. Merged with the stt_keyterms call variable and automatic boosting of name variables. Null means none.
Background noise suppression on the caller's audio before the agent listens: background noise and competing voices are suppressed so the agent hears the person on the line. On by default for every agent; set off to disable for this agent.
Number of transcribed words required before the caller's speech interrupts the agent while it is speaking. Default 1 keeps the agent responsive. Higher values make the agent harder to interrupt. 0 interrupts on any caller sound, including background noise.
After each call, detect a caller's request not to be called again; when they asked, the call shows doNotCallRequested: true and their number goes on your do-not-call list. See Do-not-call list.
Callback recognition: an inbound caller your account dialed within windowDays is treated as calling back. The call carries the outbound call's variables plus is_callback, callback_call_id, last_call_time and last_call_outcome, the agent is told how that call went, and it greets a returning caller (your greeting, or its first message adapted) instead of an opening written for calls it places. On by default. See Callbacks.
Contact memory: update adds what each call taught about the person to a memory kept for their phone number; read gives the agent that memory at the start of inbound and outbound calls. Both off by default. See Contact memory.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"RevRing AI Documentation","colors":{"primary":"#005cdd","light":"#5b9efa","dark":"#005cdd"},"logo":{"light":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/light.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=e28235c04eceefff5b3adb1cb7c33353","dark":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/dark.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=0ceef80328d53157b1b3a45914fb58a1"},"favicon":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/favicon.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=3161414ca314cb968d3be90385506fbb","navbar":{"links":[{"href":"mailto:contact@revring.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.revring.ai"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/revring"}},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"revringinc","hasAudioNarration":false,"actualSubdomain":"revringinc","customDomains":["docs.revring.ai"],"gitSource":{"type":"github","owner":"revringai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6accccd3f03b0dc1b4aaf120","collectionId":"aa92e730-203f-4efe-931c-075be62f32cc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6accccd3f03b0dc1b4aaf120"},"entitlements":{},"buildId":"6accccd3f03b0dc1b4aaf120","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":148},{"language":"default","tag":"Guides","count":26},{"language":"default","tag":"Platform","count":22},{"language":"default","tag":"Campaigns","count":11},{"language":"default","tag":"Agents","count":10},{"language":"default","tag":"Calls","count":10},{"language":"default","tag":"Voices","count":10},{"language":"default","tag":"Alerts","count":8},{"language":"default","tag":"SIP Trunks","count":8},{"language":"default","tag":"Test Runs","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/agents/create","slug":"/api-reference/agents/create","pageMetadata":{"title":"Create Agent","openapi":"POST /agents","description":"Create a new AI voice agent with specified configuration","href":"/api-reference/agents/create"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a new AI voice agent with specified configuration\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create Agent","openapi":"POST /agents","description":"Create a new AI voice agent with specified configuration","href":"/api-reference/agents/create"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Create Agent","description":"Create a new AI voice agent with specified configuration","operationId":"createAgent","tags":["Agents"],"requestBody":"1c6b965c-a875-47d5-8d9d-6b12fba68c3b","responses":{"201":"6ecf1406-ece6-4457-acba-05cb36e805e1","400":"6ca36f1a-6d5b-4c2a-9e97-5b97e5ef1e4d","401":"e9aebcdb-108d-490d-af74-2628f177be2b","402":"ade12603-d572-4d88-8eaa-19e6e05db868","409":"fd1d51bb-2b2f-4d9c-bc31-89510700d3e9"},"method":"post","type":"path","servers":["9d0997fe-7397-47d9-a3af-b8c62abb4b63"],"security":["6fa6cbe6-9d37-480e-b7e5-09d33fd7b619"],"path":"/agents","baseUrlOptions":["https://api.revring.ai/v1"],"title":"Create Agent","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Create a new AI voice agent","properties":{"name":{"type":"string","maxLength":128,"description":"Agent name","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"promptTemplate":{"type":"string","description":"System prompt with {{variable}} placeholders","isRequired":true,"uniqueKey":"promptTemplate","typeLabel":"string"},"messagingConnectionId":{"oneOf":[{"type":"string","description":"ID of the messaging connection this agent sends and receives texts through (see Messaging Connections).","uniqueKey":"messagingConnectionId.oneOf.0","typeLabel":"string"},{"type":"null","description":"ID of the messaging connection this agent sends and receives texts through (see Messaging Connections).","uniqueKey":"messagingConnectionId.oneOf.1","typeLabel":"null"}],"uniqueKey":"messagingConnectionId","typeLabel":"string | null"},"messagingConfig":{"type":"object","description":"Per-agent messaging settings. A JSON object; set only the keys you need.","properties":{"smsPrompt":{"type":"string","description":"Optional instructions for composing text replies. If omitted, the agent uses its main prompt. Set it to give texting its own tone, separate from the call prompt.","uniqueKey":"messagingConfig.smsPrompt","typeLabel":"string"},"inboundMode":{"type":"string","enum":["auto_reply","notify"],"description":"What happens when someone texts in: 'auto_reply' (RevRing composes and sends a reply from smsPrompt) or 'notify' (RevRing forwards the message to inboundWebhookUrl and you send the reply).","uniqueKey":"messagingConfig.inboundMode","typeLabel":"enum\u003cstring>"},"inboundWebhookUrl":{"type":"string","description":"Where RevRing POSTs incoming texts when inboundMode is 'notify'.","uniqueKey":"messagingConfig.inboundWebhookUrl","typeLabel":"string"},"fromNumber":{"type":"string","description":"Default sender number in E.164. If unset, the connection's Messaging Service chooses the sender.","uniqueKey":"messagingConfig.fromNumber","typeLabel":"string"},"sendMessageEnabled":{"type":"boolean","description":"Allow the agent to send a text during a live call.","uniqueKey":"messagingConfig.sendMessageEnabled","typeLabel":"boolean"},"sendMessageDescriptionOverride":{"type":"string","description":"Custom instructions for when and how the agent texts during a call.","uniqueKey":"messagingConfig.sendMessageDescriptionOverride","typeLabel":"string"},"conversationIdleResetDays":{"type":"integer","description":"Days of inactivity after which earlier conversation history is no longer used as reply context. Defaults to 30.","uniqueKey":"messagingConfig.conversationIdleResetDays","typeLabel":"integer"}},"uniqueKey":"messagingConfig","typeLabel":"object"},"widgetConfig":{"type":"object","description":"Per-agent website chat widget settings. A JSON object; set only the keys you need. Enabling the widget the first time mints a public embed key (returned as the read-only 'widgetKey' on the agent).","properties":{"enabled":{"type":"boolean","description":"Whether the website chat widget is live. When true, the widget loads on the allowed domains.","uniqueKey":"widgetConfig.enabled","typeLabel":"boolean"},"modes":{"type":"object","description":"Which interaction modes the widget offers. Chat is always on; voice is opt-in.","properties":{"chat":{"type":"boolean","description":"Text chat (always available; defaults to true).","uniqueKey":"widgetConfig.modes.chat","typeLabel":"boolean"},"voice":{"type":"boolean","description":"In-browser voice calls. Adds a call button to the widget. Defaults to false.","uniqueKey":"widgetConfig.modes.voice","typeLabel":"boolean"}},"uniqueKey":"widgetConfig.modes","typeLabel":"object"},"continuity":{"type":"object","description":"Continue-mode behaviors for voice widget calls. Both default true.","properties":{"resumeCalls":{"type":"boolean","description":"A voice call survives the visitor navigating to another page or reloading (it resumes the same call), and silently redials if it fully dropped. Default true. False = a navigation ends the call, like a normal phone call.","uniqueKey":"widgetConfig.continuity.resumeCalls","typeLabel":"boolean"},"sharedMemory":{"type":"boolean","description":"Chat and voice share one visitor memory: a call knows the chat history and later chat knows the call. Default true. False = chat and voice stay separate.","uniqueKey":"widgetConfig.continuity.sharedMemory","typeLabel":"boolean"}},"uniqueKey":"widgetConfig.continuity","typeLabel":"object"},"allowedDomains":{"type":"array","items":{"type":"string","uniqueKey":"widgetConfig.allowedDomains.items.[INDEX]","typeLabel":"string"},"description":"Hostnames the widget may run on (e.g. 'www.example.com'). Subdomains are listed separately. Requests from any other origin are refused.","uniqueKey":"widgetConfig.allowedDomains","typeLabel":"string[]"},"webchatPrompt":{"type":"string","description":"Optional instructions for composing web chat replies. If omitted, the agent uses its main prompt. Set it to give website chat its own tone, separate from calls and texting.","uniqueKey":"widgetConfig.webchatPrompt","typeLabel":"string"},"appearance":{"type":"object","description":"Visual customization for the widget.","properties":{"position":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Corner the launcher bubble sits in. Defaults to 'bottom-right'.","uniqueKey":"widgetConfig.appearance.position","typeLabel":"enum\u003cstring>"},"accentColor":{"type":"string","description":"Brand color as a 3- or 6-digit hex (e.g. '#1a56db'). Defaults to '#1a56db'.","uniqueKey":"widgetConfig.appearance.accentColor","typeLabel":"string"},"theme":{"type":"string","enum":["light","dark","auto"],"description":"Color theme. 'auto' follows the visitor's device. Defaults to 'auto'.","uniqueKey":"widgetConfig.appearance.theme","typeLabel":"enum\u003cstring>"},"launcherLabel":{"type":"string","description":"Text on the launcher bubble. Defaults to 'Chat with us'.","uniqueKey":"widgetConfig.appearance.launcherLabel","typeLabel":"string"},"agentDisplayName":{"type":"string","description":"Name shown in the chat header. Defaults to the agent's name.","uniqueKey":"widgetConfig.appearance.agentDisplayName","typeLabel":"string"},"avatarUrl":{"type":"string","description":"Image URL shown as the agent avatar.","uniqueKey":"widgetConfig.appearance.avatarUrl","typeLabel":"string"},"welcomeMessage":{"type":"string","description":"Message shown when a visitor opens the chat for the first time.","uniqueKey":"widgetConfig.appearance.welcomeMessage","typeLabel":"string"},"chatPlaceholder":{"type":"string","description":"Placeholder text in the message input. Defaults to 'Type a message...'.","uniqueKey":"widgetConfig.appearance.chatPlaceholder","typeLabel":"string"}},"uniqueKey":"widgetConfig.appearance","typeLabel":"object"},"limits":{"type":"object","description":"Usage limits for the widget.","properties":{"messagesPerDay":{"type":"integer","description":"Maximum visitor messages answered per conversation per rolling day. Defaults to 300.","uniqueKey":"widgetConfig.limits.messagesPerDay","typeLabel":"integer"}},"uniqueKey":"widgetConfig.limits","typeLabel":"object"}},"uniqueKey":"widgetConfig","typeLabel":"object"},"sipTrunkId":{"oneOf":[{"type":"string","format":"uuid","description":"SIP trunk ID to use for this agent's calls","uniqueKey":"sipTrunkId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"SIP trunk ID to use for this agent's calls","uniqueKey":"sipTrunkId.oneOf.1","typeLabel":"null"}],"uniqueKey":"sipTrunkId","typeLabel":"string\u003cuuid> | null"},"folderId":{"oneOf":[{"type":"string","format":"uuid","description":"Folder to place this agent in. Omit or pass null for uncategorized.","uniqueKey":"folderId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"Folder to place this agent in. Omit or pass null for uncategorized.","uniqueKey":"folderId.oneOf.1","typeLabel":"null"}],"uniqueKey":"folderId","typeLabel":"string\u003cuuid> | null"},"status":{"type":"string","enum":["active","disabled"],"description":"Agent status (active = can receive calls, disabled = inactive)","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"defaultVariables":{"type":"object","description":"Default values for template variables","uniqueKey":"defaultVariables","typeLabel":"object"},"firstMessage":{"type":"string","maxLength":4000,"description":"Agent's opening message","uniqueKey":"firstMessage","typeLabel":"string"},"firstMessageOutbound":{"oneOf":[{"type":"string","maxLength":4000,"description":"Optional outbound-specific opening. On outbound calls it is spoken instead of firstMessage; null or empty means firstMessage is used for both directions. Supports {{variables}}.","uniqueKey":"firstMessageOutbound.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"description":"Optional outbound-specific opening. On outbound calls it is spoken instead of firstMessage; null or empty means firstMessage is used for both directions. Supports {{variables}}.","uniqueKey":"firstMessageOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"firstMessageOutbound","typeLabel":"string | null"},"startSpeaker":{"oneOf":[{"type":"string","enum":["agent","user"],"description":"Who opens the conversation. `agent` (default) speaks the opening. `user` keeps the agent silent, including the re-engagement prompt, until the caller speaks (see `beginAfterUserSilenceMs`).","uniqueKey":"startSpeaker.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["agent","user"],"description":"Who opens the conversation. `agent` (default) speaks the opening. `user` keeps the agent silent, including the re-engagement prompt, until the caller speaks (see `beginAfterUserSilenceMs`).","uniqueKey":"startSpeaker.oneOf.1","typeLabel":"null"}],"uniqueKey":"startSpeaker","typeLabel":"enum\u003cstring> | null"},"firstMessageDelayMs":{"oneOf":[{"type":"integer","minimum":0,"maximum":15000,"description":"Milliseconds to wait after the call is reported answered before the opening is spoken. Null or 0 speaks it immediately. Useful on routes that report a call answered while the phone is still ringing. If the caller speaks during the pause the opening is skipped.","uniqueKey":"firstMessageDelayMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"maximum":15000,"description":"Milliseconds to wait after the call is reported answered before the opening is spoken. Null or 0 speaks it immediately. Useful on routes that report a call answered while the phone is still ringing. If the caller speaks during the pause the opening is skipped.","uniqueKey":"firstMessageDelayMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"firstMessageDelayMs","typeLabel":"integer | null"},"startSpeakerOutbound":{"oneOf":[{"type":"string","enum":["agent","user"],"description":"`startSpeaker` for outbound calls only. Null (default) uses `startSpeaker` for every call. Inbound and web calls always use `startSpeaker`.","uniqueKey":"startSpeakerOutbound.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["agent","user"],"description":"`startSpeaker` for outbound calls only. Null (default) uses `startSpeaker` for every call. Inbound and web calls always use `startSpeaker`.","uniqueKey":"startSpeakerOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"startSpeakerOutbound","typeLabel":"enum\u003cstring> | null"},"firstMessageDelayMsOutbound":{"oneOf":[{"type":"integer","minimum":0,"maximum":15000,"description":"`firstMessageDelayMs` for outbound calls only. Null (default) uses `firstMessageDelayMs` for every call. 0 is a real value: no pause on outbound calls.","uniqueKey":"firstMessageDelayMsOutbound.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"maximum":15000,"description":"`firstMessageDelayMs` for outbound calls only. Null (default) uses `firstMessageDelayMs` for every call. 0 is a real value: no pause on outbound calls.","uniqueKey":"firstMessageDelayMsOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"firstMessageDelayMsOutbound","typeLabel":"integer | null"},"beginAfterUserSilenceMs":{"oneOf":[{"type":"integer","minimum":500,"maximum":60000,"description":"For calls where the caller speaks first (`startSpeaker` or `startSpeakerOutbound` set to `user`): if the caller has said nothing after this many milliseconds, the agent speaks its opening. If the caller speaks first, the agent replies to them as usual. Null (default) keeps waiting. Keep it shorter than `silenceEndCallTimeoutSeconds`, otherwise a silent call ends before the agent speaks.","uniqueKey":"beginAfterUserSilenceMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":500,"maximum":60000,"description":"For calls where the caller speaks first (`startSpeaker` or `startSpeakerOutbound` set to `user`): if the caller has said nothing after this many milliseconds, the agent speaks its opening. If the caller speaks first, the agent replies to them as usual. Null (default) keeps waiting. Keep it shorter than `silenceEndCallTimeoutSeconds`, otherwise a silent call ends before the agent speaks.","uniqueKey":"beginAfterUserSilenceMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"beginAfterUserSilenceMs","typeLabel":"integer | null"},"firstMessageMode":{"type":"string","enum":["static","dynamic"],"description":"How the agent opens the call. \"static\" (default) speaks the first message text. \"dynamic\" generates the opening line from the agent's prompt, so one agent can greet inbound and outbound callers differently. When omitted, the agent speaks the first message if set, otherwise waits for the caller.","uniqueKey":"firstMessageMode","typeLabel":"enum\u003cstring>"},"turnTimeoutSeconds":{"type":"integer","minimum":-1,"description":"Seconds to wait for user response (-1 = no timeout)","uniqueKey":"turnTimeoutSeconds","typeLabel":"integer"},"silenceEndCallTimeoutSeconds":{"type":"integer","minimum":-1,"description":"Silence duration before ending call (-1 = no timeout)","uniqueKey":"silenceEndCallTimeoutSeconds","typeLabel":"integer"},"maxConversationDurationSeconds":{"type":"integer","minimum":1,"description":"Maximum call duration in seconds","uniqueKey":"maxConversationDurationSeconds","typeLabel":"integer"},"llmTemperature":{"type":"number","minimum":0,"maximum":2,"description":"LLM temperature for response randomness (0-2)","uniqueKey":"llmTemperature","typeLabel":"number"},"llmModel":{"type":"string","enum":["revring-standard","revring-max","revring-ultra"],"description":"Language model tier powering the agent. Usage is billed per minute at the tier's rate: revring-standard $0.03/min, revring-max $0.05/min, revring-ultra $0.065/min. Defaults to revring-standard.","uniqueKey":"llmModel","typeLabel":"enum\u003cstring>"},"timezone":{"type":"string","description":"IANA timezone identifier (e.g., America/New_York)","uniqueKey":"timezone","typeLabel":"string"},"language":{"type":"string","description":"Language code (e.g., en, es, fr)","uniqueKey":"language","typeLabel":"string"},"preCallWebhookUrl":{"type":"string","format":"uri","description":"Webhook URL called before answering (optional)","uniqueKey":"preCallWebhookUrl","typeLabel":"string\u003curi>"},"postCallWebhookUrl":{"type":"string","format":"uri","description":"Webhook URL called after call ends (optional)","uniqueKey":"postCallWebhookUrl","typeLabel":"string\u003curi>"},"postCallWebhookFormat":{"type":"string","enum":["revring","retell","elevenlabs"],"default":"revring","description":"Payload shape of the post-call webhook. `retell` sends Retell's `call_ended` and `call_analyzed` events; `elevenlabs` sends `post_call_transcription` (or `call_initiation_failure` for dials that never connected). See [compatibility formats](/platform/webhooks#compatibility-formats).","uniqueKey":"postCallWebhookFormat","typeLabel":"enum\u003cstring>"},"webhookEvents":{"type":"array","items":{"type":"string","enum":["call.started","transfer.started","transfer.bridged","transfer.cancelled"],"uniqueKey":"webhookEvents.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Extra events sent to the post-call webhook URL. `call.started` is sent once when a call connects; transfer.started, transfer.bridged and transfer.cancelled report transfers as they happen.","uniqueKey":"webhookEvents","typeLabel":"enum\u003cstring>[]"},"postCallExtraction":{"oneOf":[{"type":"object","description":"Fields to extract from the transcript after every call (see PostCallExtractionConfig). null = off","required":["fields"],"example":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"properties":{"fields":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["name","description","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the extraction result. Letters, digits and underscores, starting with a letter (max 64)","isRequired":true,"uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","maxLength":500,"description":"What to extract, written for the model: for example \"The caller's preferred callback day\"","isRequired":true,"uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","enum":["string","number","boolean","enum"],"description":"Value type. Anything not stated on the call comes back as null","isRequired":true,"uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"type":"array","items":{"type":"string","uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":20,"description":"Allowed values when type is `enum` (required for enum, not allowed otherwise)","uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"postCallExtraction.oneOf.0.fields.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"postCallExtraction.oneOf.0.fields","typeLabel":"object[]"}},"uniqueKey":"postCallExtraction.oneOf.0","typeLabel":"object"},{"type":"null","description":"Fields to extract from the transcript after every call (see PostCallExtractionConfig). null = off","required":["fields"],"example":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"properties":{"fields":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["name","description","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the extraction result. Letters, digits and underscores, starting with a letter (max 64)"},"description":{"type":"string","maxLength":500,"description":"What to extract, written for the model: for example \"The caller's preferred callback day\""},"type":{"type":"string","enum":["string","number","boolean","enum"],"description":"Value type. Anything not stated on the call comes back as null"},"values":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20,"description":"Allowed values when type is `enum` (required for enum, not allowed otherwise)"}}}}},"uniqueKey":"postCallExtraction.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"postCallExtraction.oneOf.2","typeLabel":"null"}],"uniqueKey":"postCallExtraction","typeLabel":"object · null · null"},"postCallEvaluation":{"oneOf":[{"type":"object","description":"Success criteria judged after every call (see PostCallEvaluationConfig). null = off","required":["criteria"],"example":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"properties":{"criteria":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["name","description"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the evaluation result. Letters, digits and underscores, starting with a letter (max 64)","isRequired":true,"uniqueKey":"postCallEvaluation.oneOf.0.criteria.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","maxLength":1000,"description":"The criterion in plain language, for example \"The caller confirmed the appointment date and time\"","isRequired":true,"uniqueKey":"postCallEvaluation.oneOf.0.criteria.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"postCallEvaluation.oneOf.0.criteria.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"postCallEvaluation.oneOf.0.criteria","typeLabel":"object[]"}},"uniqueKey":"postCallEvaluation.oneOf.0","typeLabel":"object"},{"type":"null","description":"Success criteria judged after every call (see PostCallEvaluationConfig). null = off","required":["criteria"],"example":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"properties":{"criteria":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["name","description"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the evaluation result. Letters, digits and underscores, starting with a letter (max 64)"},"description":{"type":"string","maxLength":1000,"description":"The criterion in plain language, for example \"The caller confirmed the appointment date and time\""}}}}},"uniqueKey":"postCallEvaluation.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"postCallEvaluation.oneOf.2","typeLabel":"null"}],"uniqueKey":"postCallEvaluation","typeLabel":"object · null · null"},"storageMode":{"oneOf":[{"type":"string","enum":["full","redact_pii"],"description":"What call content is kept. `full` keeps everything; `redact_pii` removes personal details from the transcript and summary before the call is stored or sent. See [Data Controls](/platform/data-controls).","uniqueKey":"storageMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["full","redact_pii"],"description":"What call content is kept. `full` keeps everything; `redact_pii` removes personal details from the transcript and summary before the call is stored or sent. See [Data Controls](/platform/data-controls).","uniqueKey":"storageMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"storageMode","typeLabel":"enum\u003cstring> | null"},"piiCategories":{"oneOf":[{"type":"array","items":{"type":"string","enum":["person_name","phone_number","email","address","date_of_birth","government_id","payment_card","bank_account","account_number","password_or_pin","medical_record_number"],"uniqueKey":"piiCategories.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Personal detail categories removed in `redact_pii` mode. Default: all.","uniqueKey":"piiCategories.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["person_name","phone_number","email","address","date_of_birth","government_id","payment_card","bank_account","account_number","password_or_pin","medical_record_number"]},"description":"Personal detail categories removed in `redact_pii` mode. Default: all.","uniqueKey":"piiCategories.oneOf.1","typeLabel":"null"}],"uniqueKey":"piiCategories","typeLabel":"enum\u003cstring>[] | null"},"endCallEnabled":{"type":"boolean","description":"Allow agent to end calls","uniqueKey":"endCallEnabled","typeLabel":"boolean"},"endCallRulesOverride":{"type":"string","description":"Custom instructions for ending calls","uniqueKey":"endCallRulesOverride","typeLabel":"string"},"transferEnabled":{"type":"boolean","description":"Allow agent to transfer calls","uniqueKey":"transferEnabled","typeLabel":"boolean"},"transferRoutes":{"type":"array","description":"Available transfer destinations","items":{"type":"object","properties":{"to_number":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"Destination number (E.164)","isRequired":true,"uniqueKey":"transferRoutes.items.[INDEX].to_number","typeLabel":"string"},"condition":{"type":"string","description":"When to offer this transfer","isRequired":true,"uniqueKey":"transferRoutes.items.[INDEX].condition","typeLabel":"string"},"extension":{"type":"string","pattern":"^[0-9*#w]+$","description":"Optional touch-tone digits dialed after the call connects, to reach an extension behind a phone menu (e.g. \"123#\"). Allowed: 0-9, *, #, and w for a 0.5s pause. Warm transfers only.","uniqueKey":"transferRoutes.items.[INDEX].extension","typeLabel":"string"},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Per-route override of how long this destination may ring before the attempt is abandoned. Omit to inherit warmTransferConfig.dialTimeoutSeconds.","uniqueKey":"transferRoutes.items.[INDEX].dialTimeoutSeconds","typeLabel":"integer"},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Per-route override of how long to wait after this destination answers for a person to come on the line. Omit to inherit warmTransferConfig.waitForHumanSeconds.","uniqueKey":"transferRoutes.items.[INDEX].waitForHumanSeconds","typeLabel":"integer"}},"required":["to_number","condition"],"uniqueKey":"transferRoutes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"transferRoutes","typeLabel":"object[]"},"transferDescriptionOverride":{"type":"string","description":"Custom transfer instructions","uniqueKey":"transferDescriptionOverride","typeLabel":"string"},"voicemailEnabled":{"type":"boolean","description":"Detect voicemail","uniqueKey":"voicemailEnabled","typeLabel":"boolean"},"voicemailAction":{"type":"string","enum":["hangup","leave_message"],"description":"Action when voicemail detected","uniqueKey":"voicemailAction","typeLabel":"enum\u003cstring>"},"voicemailMessage":{"type":"string","description":"Message to leave on voicemail. Supports {{variables}} like the prompt and first message.","uniqueKey":"voicemailMessage","typeLabel":"string"},"voiceId":{"type":"string","description":"Voice ID (copy from dashboard Voice Library)","uniqueKey":"voiceId","typeLabel":"string"},"fallbackVoiceId":{"oneOf":[{"type":"string","description":"Backup voice ID for seamless voice continuity: in the rare case the primary voice is temporarily unavailable, the agent switches to this voice automatically. Omit or set null to let the platform pick a standard backup voice.","uniqueKey":"fallbackVoiceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Backup voice ID for seamless voice continuity: in the rare case the primary voice is temporarily unavailable, the agent switches to this voice automatically. Omit or set null to let the platform pick a standard backup voice.","uniqueKey":"fallbackVoiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"fallbackVoiceId","typeLabel":"string | null"},"voiceTemperature":{"type":"number","minimum":0,"maximum":1,"description":"Voice expressiveness (0 = consistent, 1 = more varied). Default 0.7.","uniqueKey":"voiceTemperature","typeLabel":"number"},"voiceSpeed":{"type":"number","minimum":0.5,"maximum":2,"description":"Speaking rate multiplier (0.5 = half speed, 2.0 = double speed). Default 1.0.","uniqueKey":"voiceSpeed","typeLabel":"number"},"voiceVolume":{"type":"number","minimum":-20,"maximum":20,"description":"Output level in decibels (-20 to 20; 0 = standard). Default 0.","uniqueKey":"voiceVolume","typeLabel":"number"},"voiceTopP":{"type":"number","minimum":0,"maximum":1,"description":"Advanced sampling range (0 to 1). Default 0.7.","uniqueKey":"voiceTopP","typeLabel":"number"},"runtimeConfig":{"type":"object","description":"Advanced runtime configuration (optional)","uniqueKey":"runtimeConfig","typeLabel":"object"},"mode":{"type":"string","enum":["single_prompt","conversation_flow"],"description":"Agent mode (immutable after creation). Defaults to `single_prompt`.","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"flowDefinition":{"oneOf":[{"type":"object","description":"Conversation flow definition (only used when mode is `conversation_flow`)","uniqueKey":"flowDefinition.oneOf.0","typeLabel":"object"},{"type":"null","description":"Conversation flow definition (only used when mode is `conversation_flow`)","uniqueKey":"flowDefinition.oneOf.1","typeLabel":"null"}],"uniqueKey":"flowDefinition","typeLabel":"object | null"},"testVariables":{"oneOf":[{"type":"object","description":"Variables used for test calls initiated from the dashboard","uniqueKey":"testVariables.oneOf.0","typeLabel":"object"},{"type":"null","description":"Variables used for test calls initiated from the dashboard","uniqueKey":"testVariables.oneOf.1","typeLabel":"null"}],"uniqueKey":"testVariables","typeLabel":"object | null"},"llmReasoningEffort":{"type":"string","enum":["low","medium","high"],"description":"Controls the reasoning effort of the language model. Higher values produce more thorough but slower responses.","uniqueKey":"llmReasoningEffort","typeLabel":"enum\u003cstring>"},"disableInterruptions":{"type":"boolean","description":"When enabled, the agent will not be interrupted by the caller while speaking","uniqueKey":"disableInterruptions","typeLabel":"boolean"},"interruptionThresholdMs":{"type":"integer","minimum":100,"maximum":2000,"default":500,"description":"Minimum speech duration (ms) before the caller's speech is registered as an interruption. Lower values make the agent easier to interrupt. Range: 100-2000, default 500.","uniqueKey":"interruptionThresholdMs","typeLabel":"integer"},"interruptionIgnoreWords":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"interruptionIgnoreWords.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Acknowledgment words or short phrases that never interrupt the agent while it is speaking (for example \"okay\", \"yeah\", \"uh-huh\"). Anything beyond a brief acknowledgment still interrupts normally, and these words behave normally when the agent is not speaking. null (default) uses the recommended platform list, [] disables the feature, and a list fully replaces the recommended list.","uniqueKey":"interruptionIgnoreWords.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","minLength":1,"maxLength":40},"maxItems":50,"description":"Acknowledgment words or short phrases that never interrupt the agent while it is speaking (for example \"okay\", \"yeah\", \"uh-huh\"). Anything beyond a brief acknowledgment still interrupts normally, and these words behave normally when the agent is not speaking. null (default) uses the recommended platform list, [] disables the feature, and a list fully replaces the recommended list.","uniqueKey":"interruptionIgnoreWords.oneOf.1","typeLabel":"null"}],"uniqueKey":"interruptionIgnoreWords","typeLabel":"string[] | null"},"sttKeyterms":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":60,"uniqueKey":"sttKeyterms.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Names or terms to boost in speech recognition, such as brand names, product names, or uncommon personal names. Merged with the stt_keyterms call variable and automatic boosting of name variables. Null means none.","uniqueKey":"sttKeyterms.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":50,"description":"Names or terms to boost in speech recognition, such as brand names, product names, or uncommon personal names. Merged with the stt_keyterms call variable and automatic boosting of name variables. Null means none.","uniqueKey":"sttKeyterms.oneOf.1","typeLabel":"null"}],"uniqueKey":"sttKeyterms","typeLabel":"string[] | null"},"noiseCancellation":{"type":"string","enum":["on","off"],"default":"on","description":"Background noise suppression on the caller's audio before the agent listens: background noise and competing voices are suppressed so the agent hears the person on the line. On by default for every agent; set `off` to disable for this agent.","uniqueKey":"noiseCancellation","typeLabel":"enum\u003cstring>"},"minInterruptionWords":{"type":"integer","minimum":0,"maximum":10,"default":1,"description":"Number of transcribed words required before the caller's speech interrupts the agent while it is speaking. Default 1 keeps the agent responsive. Higher values make the agent harder to interrupt. 0 interrupts on any caller sound, including background noise.","uniqueKey":"minInterruptionWords","typeLabel":"integer"},"transferMode":{"type":"string","enum":["cold","warm"],"description":"Transfer mode. `cold` disconnects the AI before connecting to the destination. `warm` keeps the AI on the line to introduce the caller.","uniqueKey":"transferMode","typeLabel":"enum\u003cstring>"},"warmTransferConfig":{"oneOf":[{"type":"object","description":"Configuration for warm transfers (only used when transferMode is `warm`)","properties":{"holdMessage":{"type":"string","maxLength":500,"description":"Message played to the caller while on hold","uniqueKey":"warmTransferConfig.oneOf.0.holdMessage","typeLabel":"string"},"holdMusicEnabled":{"type":"boolean","description":"Whether to play hold music while the caller waits","uniqueKey":"warmTransferConfig.oneOf.0.holdMusicEnabled","typeLabel":"boolean"},"summaryPrompt":{"type":"string","maxLength":2000,"description":"Prompt used to generate a conversation summary for the human agent","uniqueKey":"warmTransferConfig.oneOf.0.summaryPrompt","typeLabel":"string"},"introMessage":{"type":"string","maxLength":500,"description":"Message the AI speaks to the human agent before connecting the caller","uniqueKey":"warmTransferConfig.oneOf.0.introMessage","typeLabel":"string"},"continueRecordingAfterTransfer":{"type":"boolean","description":"Keep recording after the warm handoff completes, so the recording also includes the human agent and caller conversation.","uniqueKey":"warmTransferConfig.oneOf.0.continueRecordingAfterTransfer","typeLabel":"boolean"},"callerIdMode":{"type":"string","enum":["agent","original_caller"],"default":"agent","description":"Caller ID presented to the warm transfer recipient. \"agent\" (default) shows the agent's own number for the call. \"original_caller\" shows the customer's number. A warm transfer places a new outbound call over your own trunk, so sending a caller ID you do not own depends on your telephony provider; many support it (often as a per-trunk ANI override option) and some require it to be enabled first. If your provider rejects or replaces it, or the caller withheld their number, the agent's number is presented instead and the transfer still completes.","uniqueKey":"warmTransferConfig.oneOf.0.callerIdMode","typeLabel":"enum\u003cstring>"},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Seconds to let the transfer destination ring before the assistant gives up, tells the caller, and continues the conversation. Omit for the platform default of 75.","uniqueKey":"warmTransferConfig.oneOf.0.dialTimeoutSeconds","typeLabel":"integer"},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Seconds to wait after the destination answers for a person to actually come on the line. Covers queues and hold systems that pick up but never hand over. On expiry the assistant ends the attempt, tells the caller, and continues. Omit for the platform default of 300.","uniqueKey":"warmTransferConfig.oneOf.0.waitForHumanSeconds","typeLabel":"integer"}},"uniqueKey":"warmTransferConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Configuration for warm transfers (only used when transferMode is `warm`)","properties":{"holdMessage":{"type":"string","maxLength":500,"description":"Message played to the caller while on hold"},"holdMusicEnabled":{"type":"boolean","description":"Whether to play hold music while the caller waits"},"summaryPrompt":{"type":"string","maxLength":2000,"description":"Prompt used to generate a conversation summary for the human agent"},"introMessage":{"type":"string","maxLength":500,"description":"Message the AI speaks to the human agent before connecting the caller"},"continueRecordingAfterTransfer":{"type":"boolean","description":"Keep recording after the warm handoff completes, so the recording also includes the human agent and caller conversation."},"callerIdMode":{"type":"string","enum":["agent","original_caller"],"default":"agent","description":"Caller ID presented to the warm transfer recipient. \"agent\" (default) shows the agent's own number for the call. \"original_caller\" shows the customer's number. A warm transfer places a new outbound call over your own trunk, so sending a caller ID you do not own depends on your telephony provider; many support it (often as a per-trunk ANI override option) and some require it to be enabled first. If your provider rejects or replaces it, or the caller withheld their number, the agent's number is presented instead and the transfer still completes."},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Seconds to let the transfer destination ring before the assistant gives up, tells the caller, and continues the conversation. Omit for the platform default of 75."},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Seconds to wait after the destination answers for a person to actually come on the line. Covers queues and hold systems that pick up but never hand over. On expiry the assistant ends the attempt, tells the caller, and continues. Omit for the platform default of 300."}},"uniqueKey":"warmTransferConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"warmTransferConfig","typeLabel":"object | null"},"playKeypadTouchToneEnabled":{"type":"boolean","description":"Enable the keypad input (DTMF) tool, allowing callers to press phone keys during the conversation","uniqueKey":"playKeypadTouchToneEnabled","typeLabel":"boolean"},"playKeypadTouchToneDescriptionOverride":{"oneOf":[{"type":"string","maxLength":2000,"description":"Custom instructions for the keypad input tool behavior","uniqueKey":"playKeypadTouchToneDescriptionOverride.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":2000,"description":"Custom instructions for the keypad input tool behavior","uniqueKey":"playKeypadTouchToneDescriptionOverride.oneOf.1","typeLabel":"null"}],"uniqueKey":"playKeypadTouchToneDescriptionOverride","typeLabel":"string | null"},"knowledgeBaseRetrievalMode":{"type":"string","enum":["automatic","query_tool"],"description":"How the agent queries linked knowledge bases. `automatic` retrieves context on every turn. `query_tool` lets the agent decide when to search.","uniqueKey":"knowledgeBaseRetrievalMode","typeLabel":"enum\u003cstring>"},"knowledgeBaseChunks":{"type":"integer","minimum":1,"maximum":20,"description":"Number of text chunks to retrieve per knowledge base query","uniqueKey":"knowledgeBaseChunks","typeLabel":"integer"},"knowledgeBaseSimilarityThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Minimum similarity score for retrieved chunks (0-1). Higher values return only highly relevant results.","uniqueKey":"knowledgeBaseSimilarityThreshold","typeLabel":"number"},"languagePresets":{"oneOf":[{"type":"object","description":"Voice and opening line per language code (e.g. `es`, `pt-BR`), used when a call runs in that language. See [Language presets](/platform/multilingual#language-presets).","additionalProperties":{"type":"object","properties":{"voiceId":{"oneOf":[{"type":"string","uniqueKey":"languagePresets.oneOf.0.additionalProperties.voiceId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"languagePresets.oneOf.0.additionalProperties.voiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"languagePresets.oneOf.0.additionalProperties.voiceId","typeLabel":"string | null"},"firstMessage":{"oneOf":[{"type":"string","maxLength":4000,"uniqueKey":"languagePresets.oneOf.0.additionalProperties.firstMessage.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"uniqueKey":"languagePresets.oneOf.0.additionalProperties.firstMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"languagePresets.oneOf.0.additionalProperties.firstMessage","typeLabel":"string | null"}},"uniqueKey":"languagePresets.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"languagePresets.oneOf.0","typeLabel":"object"},{"type":"null","description":"Voice and opening line per language code (e.g. `es`, `pt-BR`), used when a call runs in that language. See [Language presets](/platform/multilingual#language-presets).","additionalProperties":{"type":"object","properties":{"voiceId":{"oneOf":[{"type":"string","uniqueKey":"languagePresets.oneOf.1.additionalProperties.voiceId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"languagePresets.oneOf.1.additionalProperties.voiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"languagePresets.oneOf.1.additionalProperties.voiceId","typeLabel":"string | null"},"firstMessage":{"oneOf":[{"type":"string","maxLength":4000,"uniqueKey":"languagePresets.oneOf.1.additionalProperties.firstMessage.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"uniqueKey":"languagePresets.oneOf.1.additionalProperties.firstMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"languagePresets.oneOf.1.additionalProperties.firstMessage","typeLabel":"string | null"}},"uniqueKey":"languagePresets.oneOf.1.additionalProperties","typeLabel":"object"},"uniqueKey":"languagePresets.oneOf.1","typeLabel":"null"}],"uniqueKey":"languagePresets","typeLabel":"object | null"},"doNotCallDetection":{"type":"boolean","default":false,"description":"After each call, detect a caller's request not to be called again; when they asked, the call shows `doNotCallRequested: true` and their number goes on your do-not-call list. See [Do-not-call list](/platform/campaigns#add-callers-who-ask-automatically).","uniqueKey":"doNotCallDetection","typeLabel":"boolean"},"inboundCallbacks":{"oneOf":[{"type":"object","description":"Callback recognition: an inbound caller your account dialed within `windowDays` is treated as calling back. The call carries the outbound call's variables plus `is_callback`, `callback_call_id`, `last_call_time` and `last_call_outcome`, the agent is told how that call went, and it greets a returning caller (your `greeting`, or its first message adapted) instead of an opening written for calls it places. On by default. See [Callbacks](/platform/inbound#callbacks).","properties":{"enabled":{"type":"boolean","description":"Recognize callbacks. Default true.","isRequired":true,"uniqueKey":"inboundCallbacks.oneOf.0.enabled","typeLabel":"boolean"},"windowDays":{"oneOf":[{"type":"integer","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30.","uniqueKey":"inboundCallbacks.oneOf.0.windowDays.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30.","uniqueKey":"inboundCallbacks.oneOf.0.windowDays.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundCallbacks.oneOf.0.windowDays","typeLabel":"integer | null"},"greeting":{"oneOf":[{"type":"string","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them.","uniqueKey":"inboundCallbacks.oneOf.0.greeting.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them.","uniqueKey":"inboundCallbacks.oneOf.0.greeting.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundCallbacks.oneOf.0.greeting","typeLabel":"string | null"}},"required":["enabled"],"uniqueKey":"inboundCallbacks.oneOf.0","typeLabel":"object"},{"type":"null","description":"Callback recognition: an inbound caller your account dialed within `windowDays` is treated as calling back. The call carries the outbound call's variables plus `is_callback`, `callback_call_id`, `last_call_time` and `last_call_outcome`, the agent is told how that call went, and it greets a returning caller (your `greeting`, or its first message adapted) instead of an opening written for calls it places. On by default. See [Callbacks](/platform/inbound#callbacks).","properties":{"enabled":{"type":"boolean","description":"Recognize callbacks. Default true."},"windowDays":{"oneOf":[{"type":"integer","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30."},{"type":"null","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30."}]},"greeting":{"oneOf":[{"type":"string","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them."},{"type":"null","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them."}]}},"required":["enabled"],"uniqueKey":"inboundCallbacks.oneOf.1","typeLabel":"null"}],"uniqueKey":"inboundCallbacks","typeLabel":"object | null"},"contactMemory":{"oneOf":[{"type":"object","description":"Contact memory: `update` adds what each call taught about the person to a memory kept for their phone number; `read` gives the agent that memory at the start of inbound and outbound calls. Both off by default. See [Contact memory](/platform/contact-memory).","required":["read","update"],"properties":{"read":{"type":"boolean","isRequired":true,"uniqueKey":"contactMemory.oneOf.0.read","typeLabel":"boolean"},"update":{"type":"boolean","isRequired":true,"uniqueKey":"contactMemory.oneOf.0.update","typeLabel":"boolean"}},"uniqueKey":"contactMemory.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"contactMemory.oneOf.1","typeLabel":"null"}],"uniqueKey":"contactMemory","typeLabel":"object | null"},"guardrails":{"oneOf":[{"type":"object","description":"What the agent refuses to be pulled into, on calls, in tests, over SMS and in web chat; null = off. See the Guardrails guide.","properties":{"focus":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it","uniqueKey":"guardrails.oneOf.0.focus.oneOf.0.enabled","typeLabel":"boolean"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it","uniqueKey":"guardrails.oneOf.0.focus.oneOf.0.scope.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it","uniqueKey":"guardrails.oneOf.0.focus.oneOf.0.scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails.oneOf.0.focus.oneOf.0.scope","typeLabel":"string | null"}},"uniqueKey":"guardrails.oneOf.0.focus.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}},"uniqueKey":"guardrails.oneOf.0.focus.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails.oneOf.0.focus","typeLabel":"object | null"},"manipulation":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims","uniqueKey":"guardrails.oneOf.0.manipulation.oneOf.0.enabled","typeLabel":"boolean"}},"uniqueKey":"guardrails.oneOf.0.manipulation.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}},"uniqueKey":"guardrails.oneOf.0.manipulation.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails.oneOf.0.manipulation","typeLabel":"object | null"},"blockedTopics":{"oneOf":[{"type":"array","maxItems":30,"items":{"type":"string","maxLength":80,"uniqueKey":"guardrails.oneOf.0.blockedTopics.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subjects never discussed","uniqueKey":"guardrails.oneOf.0.blockedTopics.oneOf.0","typeLabel":"string[]"},{"type":"null","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed","uniqueKey":"guardrails.oneOf.0.blockedTopics.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails.oneOf.0.blockedTopics","typeLabel":"string[] | null"},"onViolation":{"oneOf":[{"type":"string","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)","uniqueKey":"guardrails.oneOf.0.onViolation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)","uniqueKey":"guardrails.oneOf.0.onViolation.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails.oneOf.0.onViolation","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"guardrails.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the agent refuses to be pulled into, on calls, in tests, over SMS and in web chat; null = off. See the Guardrails guide.","properties":{"focus":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}}},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}}}]},"manipulation":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}}},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}}}]},"blockedTopics":{"oneOf":[{"type":"array","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed"},{"type":"null","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed"}]},"onViolation":{"oneOf":[{"type":"string","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)"},{"type":"null","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)"}]}},"uniqueKey":"guardrails.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails","typeLabel":"object | null"},"booking":{"oneOf":[{"type":"object","description":"Live booking on a connected calendar: the agent gets check_availability and book_appointment. See [Integrations](/platform/integrations).","required":["integrationId","calendarId"],"properties":{"integrationId":{"type":"string","isRequired":true,"uniqueKey":"booking.oneOf.0.integrationId","typeLabel":"string"},"calendarId":{"type":"string","description":"Cal.com event type id or GoHighLevel calendar id (GET /v1/integrations/{id}/calendars)","isRequired":true,"uniqueKey":"booking.oneOf.0.calendarId","typeLabel":"string"},"durationMinutes":{"oneOf":[{"type":"integer","minimum":5,"maximum":480,"description":"Default 30; Cal.com event types set their own length","uniqueKey":"booking.oneOf.0.durationMinutes.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":5,"maximum":480,"description":"Default 30; Cal.com event types set their own length","uniqueKey":"booking.oneOf.0.durationMinutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking.oneOf.0.durationMinutes","typeLabel":"integer | null"},"timeZone":{"oneOf":[{"type":"string","description":"IANA zone times are offered in; default the agent time zone","uniqueKey":"booking.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"IANA zone times are offered in; default the agent time zone","uniqueKey":"booking.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking.oneOf.0.timeZone","typeLabel":"string | null"}},"uniqueKey":"booking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"booking.oneOf.1","typeLabel":"null"}],"uniqueKey":"booking","typeLabel":"object | null"},"handoffRoutes":{"oneOf":[{"type":"array","maxItems":10,"items":{"type":"object","properties":{"agentId":{"type":"string","description":"Agent to hand the caller to (same organization)","isRequired":true,"uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].agentId","typeLabel":"string"},"condition":{"type":"string","maxLength":500,"description":"When to hand off, in plain language","isRequired":true,"uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].condition","typeLabel":"string"},"environment":{"oneOf":[{"type":"string","description":"Run that agent's version for this environment; omit for production","uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].environment.oneOf.0","typeLabel":"string"},{"type":"null","description":"Run that agent's version for this environment; omit for production","uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].environment.oneOf.1","typeLabel":"null"}],"uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].environment","typeLabel":"string | null"},"keepVoice":{"type":"boolean","description":"Keep this agent's voice after the handoff (default: the other agent's voice)","uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].keepVoice","typeLabel":"boolean"},"handoffMessage":{"type":"string","maxLength":300,"description":"Line said before the handoff","uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX].handoffMessage","typeLabel":"string"}},"required":["agentId","condition"],"uniqueKey":"handoffRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Agents this agent can hand the caller to on the same call. See [Hand Off to Another Agent](/platform/tools#hand-off-to-another-agent).","uniqueKey":"handoffRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":10,"items":{"type":"object","properties":{"agentId":{"type":"string","description":"Agent to hand the caller to (same organization)"},"environment":{"oneOf":[{"type":"string","description":"Run that agent's version for this environment; omit for production"},{"type":"null","description":"Run that agent's version for this environment; omit for production"}]},"condition":{"type":"string","maxLength":500,"description":"When to hand off, in plain language"},"keepVoice":{"type":"boolean","description":"Keep this agent's voice after the handoff (default: the other agent's voice)"},"handoffMessage":{"type":"string","maxLength":300,"description":"Line said before the handoff"}},"required":["agentId","condition"]},"description":"Agents this agent can hand the caller to on the same call. See [Hand Off to Another Agent](/platform/tools#hand-off-to-another-agent).","uniqueKey":"handoffRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"handoffRoutes","typeLabel":"object[] | null"},"mcpServers":{"oneOf":[{"type":"array","maxItems":5,"items":{"type":"object","description":"An MCP server whose tools the agent can use","properties":{"name":{"type":"string","maxLength":64,"description":"Label, unique on the agent","isRequired":true,"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].name","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"Server address (https only)","isRequired":true,"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"array","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers.oneOf.0.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Sent with every request to the server","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Sent with every request to the server","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].headers","typeLabel":"object[] | null"},"allowedTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].allowedTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Only these tools, by name; omit to use every tool the server lists","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].allowedTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Only these tools, by name; omit to use every tool the server lists","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].allowedTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].allowedTools","typeLabel":"string[] | null"},"transport":{"oneOf":[{"type":"string","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)","uniqueKey":"mcpServers.oneOf.0.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX].timeoutSeconds","typeLabel":"integer | null"}},"required":["name","url"],"uniqueKey":"mcpServers.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"MCP servers whose tools the agent can use (single-prompt agents). See [MCP Servers](/platform/tools#mcp-servers).","uniqueKey":"mcpServers.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":5,"items":{"type":"object","description":"An MCP server whose tools the agent can use","properties":{"name":{"type":"string","maxLength":64,"description":"Label, unique on the agent"},"url":{"type":"string","format":"uri","description":"Server address (https only)"},"headers":{"oneOf":[{"type":"array","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Sent with every request to the server"},{"type":"null","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Sent with every request to the server"}]},"allowedTools":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Only these tools, by name; omit to use every tool the server lists"},{"type":"null","items":{"type":"string"},"description":"Only these tools, by name; omit to use every tool the server lists"}]},"transport":{"oneOf":[{"type":"string","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse"},{"type":"null","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse"}]},"timeoutSeconds":{"oneOf":[{"type":"integer","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)"},{"type":"null","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)"}]}},"required":["name","url"]},"description":"MCP servers whose tools the agent can use (single-prompt agents). See [MCP Servers](/platform/tools#mcp-servers).","uniqueKey":"mcpServers.oneOf.1","typeLabel":"null"}],"uniqueKey":"mcpServers","typeLabel":"object[] | null"},"recordingEnabled":{"oneOf":[{"type":"boolean","default":true,"description":"Record the agent's calls. `false`: no audio is recorded. See [Data Controls](/platform/data-controls#turn-recording-off).","uniqueKey":"recordingEnabled.oneOf.0","typeLabel":"boolean"},{"type":"null","default":true,"description":"Record the agent's calls. `false`: no audio is recorded. See [Data Controls](/platform/data-controls#turn-recording-off).","uniqueKey":"recordingEnabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"recordingEnabled","typeLabel":"boolean | null"},"pronunciations":{"oneOf":[{"type":"array","maxItems":200,"description":"How the agent says specific words on calls; transcripts keep the word as written. Words are unique (ignoring case). See [Pronunciation](/platform/multilingual#pronunciation).","items":{"type":"object","required":["word","alias"],"properties":{"word":{"type":"string","maxLength":100,"description":"The word or phrase as written (whole words only)","isRequired":true,"uniqueKey":"pronunciations.oneOf.0.items.[INDEX].word","typeLabel":"string"},"alias":{"type":"string","maxLength":200,"description":"How to say it, spelled the way it sounds","isRequired":true,"uniqueKey":"pronunciations.oneOf.0.items.[INDEX].alias","typeLabel":"string"},"caseSensitive":{"oneOf":[{"type":"boolean","description":"Match the word's case exactly (default: ignore case)","uniqueKey":"pronunciations.oneOf.0.items.[INDEX].caseSensitive.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Match the word's case exactly (default: ignore case)","uniqueKey":"pronunciations.oneOf.0.items.[INDEX].caseSensitive.oneOf.1","typeLabel":"null"}],"uniqueKey":"pronunciations.oneOf.0.items.[INDEX].caseSensitive","typeLabel":"boolean | null"}},"uniqueKey":"pronunciations.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"pronunciations.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":200,"description":"How the agent says specific words on calls; transcripts keep the word as written. Words are unique (ignoring case). See [Pronunciation](/platform/multilingual#pronunciation).","items":{"type":"object","required":["word","alias"],"properties":{"word":{"type":"string","maxLength":100,"description":"The word or phrase as written (whole words only)"},"alias":{"type":"string","maxLength":200,"description":"How to say it, spelled the way it sounds"},"caseSensitive":{"oneOf":[{"type":"boolean","description":"Match the word's case exactly (default: ignore case)"},{"type":"null","description":"Match the word's case exactly (default: ignore case)"}]}}},"uniqueKey":"pronunciations.oneOf.1","typeLabel":"null"}],"uniqueKey":"pronunciations","typeLabel":"object[] | null"},"keypadInput":{"oneOf":[{"type":"object","description":"Digits the caller presses reach the agent as their turn (single-prompt agents). Off unless set. See [Caller Keypad Input](/platform/tools#caller-keypad-input).","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Keypad input on or off","isRequired":true,"uniqueKey":"keypadInput.oneOf.0.enabled","typeLabel":"boolean"},"terminationKey":{"oneOf":[{"type":"string","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)","uniqueKey":"keypadInput.oneOf.0.terminationKey.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)","uniqueKey":"keypadInput.oneOf.0.terminationKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"keypadInput.oneOf.0.terminationKey","typeLabel":"enum\u003cstring> | null"},"digitLimit":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed","uniqueKey":"keypadInput.oneOf.0.digitLimit.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed","uniqueKey":"keypadInput.oneOf.0.digitLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"keypadInput.oneOf.0.digitLimit","typeLabel":"integer | null"},"timeoutMs":{"oneOf":[{"type":"integer","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)","uniqueKey":"keypadInput.oneOf.0.timeoutMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)","uniqueKey":"keypadInput.oneOf.0.timeoutMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"keypadInput.oneOf.0.timeoutMs","typeLabel":"integer | null"}},"uniqueKey":"keypadInput.oneOf.0","typeLabel":"object"},{"type":"null","description":"Digits the caller presses reach the agent as their turn (single-prompt agents). Off unless set. See [Caller Keypad Input](/platform/tools#caller-keypad-input).","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Keypad input on or off"},"terminationKey":{"oneOf":[{"type":"string","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)"},{"type":"null","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)"}]},"digitLimit":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed"},{"type":"null","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed"}]},"timeoutMs":{"oneOf":[{"type":"integer","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)"},{"type":"null","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)"}]}},"uniqueKey":"keypadInput.oneOf.1","typeLabel":"null"}],"uniqueKey":"keypadInput","typeLabel":"object | null"},"backchannels":{"type":"boolean","description":"Beta. Short listening sounds (\"mm-hmm\", \"right\") in the agent's voice at natural pauses in long caller turns. Never takes the turn. Default false.","uniqueKey":"backchannels","typeLabel":"boolean"}},"required":["name","promptTemplate"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","promptTemplate":"\u003cstring>","messagingConnectionId":"\u003cstring>","messagingConfig":{"smsPrompt":"\u003cstring>","inboundWebhookUrl":"\u003cstring>","fromNumber":"\u003cstring>","sendMessageEnabled":true,"sendMessageDescriptionOverride":"\u003cstring>","conversationIdleResetDays":123},"widgetConfig":{"enabled":true,"modes":{"chat":true,"voice":true},"continuity":{"resumeCalls":true,"sharedMemory":true},"allowedDomains":["\u003cstring>"],"webchatPrompt":"\u003cstring>","appearance":{"accentColor":"\u003cstring>","launcherLabel":"\u003cstring>","agentDisplayName":"\u003cstring>","avatarUrl":"\u003cstring>","welcomeMessage":"\u003cstring>","chatPlaceholder":"\u003cstring>"},"limits":{"messagesPerDay":123}},"sipTrunkId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","folderId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","defaultVariables":{},"firstMessage":"\u003cstring>","firstMessageOutbound":"\u003cstring>","firstMessageDelayMs":7500,"firstMessageDelayMsOutbound":7500,"beginAfterUserSilenceMs":30250,"turnTimeoutSeconds":0,"silenceEndCallTimeoutSeconds":0,"maxConversationDurationSeconds":2,"llmTemperature":1,"timezone":"\u003cstring>","language":"\u003cstring>","preCallWebhookUrl":"\u003cstring>","postCallWebhookUrl":"\u003cstring>","postCallWebhookFormat":"revring","webhookEvents":[],"postCallExtraction":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"postCallEvaluation":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"piiCategories":[],"endCallEnabled":true,"endCallRulesOverride":"\u003cstring>","transferEnabled":true,"transferRoutes":[{"to_number":"\u003cstring>","condition":"\u003cstring>","extension":"\u003cstring>","dialTimeoutSeconds":155,"waitForHumanSeconds":307}],"transferDescriptionOverride":"\u003cstring>","voicemailEnabled":true,"voicemailMessage":"\u003cstring>","voiceId":"\u003cstring>","fallbackVoiceId":"\u003cstring>","voiceTemperature":0.5,"voiceSpeed":1.25,"voiceVolume":0,"voiceTopP":0.5,"runtimeConfig":{},"flowDefinition":{},"testVariables":{},"disableInterruptions":true,"interruptionThresholdMs":500,"interruptionIgnoreWords":["\u003cstring>"],"sttKeyterms":["\u003cstring>"],"noiseCancellation":"on","minInterruptionWords":1,"warmTransferConfig":{"holdMessage":"\u003cstring>","holdMusicEnabled":true,"summaryPrompt":"\u003cstring>","introMessage":"\u003cstring>","continueRecordingAfterTransfer":true,"callerIdMode":"agent","dialTimeoutSeconds":155,"waitForHumanSeconds":307},"playKeypadTouchToneEnabled":true,"playKeypadTouchToneDescriptionOverride":"\u003cstring>","knowledgeBaseChunks":10,"knowledgeBaseSimilarityThreshold":0.5,"languagePresets":{},"doNotCallDetection":false,"inboundCallbacks":{"enabled":true,"windowDays":45,"greeting":"\u003cstring>"},"contactMemory":{"read":true,"update":true},"guardrails":{"focus":{"enabled":true,"scope":"\u003cstring>"},"manipulation":{"enabled":true},"blockedTopics":["\u003cstring>"]},"booking":{"integrationId":"\u003cstring>","calendarId":"\u003cstring>","durationMinutes":242,"timeZone":"\u003cstring>"},"handoffRoutes":[{"agentId":"\u003cstring>","condition":"\u003cstring>","environment":"\u003cstring>","keepVoice":true,"handoffMessage":"\u003cstring>"}],"mcpServers":[{"name":"\u003cstring>","url":"\u003cstring>","headers":[{"key":"\u003cstring>","value":"\u003cstring>"}],"allowedTools":["\u003cstring>"],"timeoutSeconds":60}],"recordingEnabled":true,"pronunciations":[{"word":"\u003cstring>","alias":"\u003cstring>","caseSensitive":true}],"keypadInput":{"enabled":true,"digitLimit":25,"timeoutMs":8000},"backchannels":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"6ecf1406-ece6-4457-acba-05cb36e805e1":{"description":"Agent created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"AI Voice Agent configuration","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","description":"Agent name","isRequired":true,"uniqueKey":"data.name","typeLabel":"string"},"status":{"type":"string","enum":["active","disabled"],"isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"promptTemplate":{"type":"string","description":"System prompt template with {{variable}} placeholders","isRequired":true,"uniqueKey":"data.promptTemplate","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.updatedAt","typeLabel":"string\u003cdate-time>"},"messagingConnectionId":{"oneOf":[{"type":"string","description":"ID of the messaging connection this agent sends and receives texts through (see Messaging Connections).","uniqueKey":"data.messagingConnectionId.oneOf.0","typeLabel":"string"},{"type":"null","description":"ID of the messaging connection this agent sends and receives texts through (see Messaging Connections).","uniqueKey":"data.messagingConnectionId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.messagingConnectionId","typeLabel":"string | null"},"messagingConfig":{"type":"object","description":"Per-agent messaging settings. A JSON object; set only the keys you need.","properties":{"smsPrompt":{"type":"string","description":"Optional instructions for composing text replies. If omitted, the agent uses its main prompt. Set it to give texting its own tone, separate from the call prompt.","uniqueKey":"data.messagingConfig.smsPrompt","typeLabel":"string"},"inboundMode":{"type":"string","enum":["auto_reply","notify"],"description":"What happens when someone texts in: 'auto_reply' (RevRing composes and sends a reply from smsPrompt) or 'notify' (RevRing forwards the message to inboundWebhookUrl and you send the reply).","uniqueKey":"data.messagingConfig.inboundMode","typeLabel":"enum\u003cstring>"},"inboundWebhookUrl":{"type":"string","description":"Where RevRing POSTs incoming texts when inboundMode is 'notify'.","uniqueKey":"data.messagingConfig.inboundWebhookUrl","typeLabel":"string"},"fromNumber":{"type":"string","description":"Default sender number in E.164. If unset, the connection's Messaging Service chooses the sender.","uniqueKey":"data.messagingConfig.fromNumber","typeLabel":"string"},"sendMessageEnabled":{"type":"boolean","description":"Allow the agent to send a text during a live call.","uniqueKey":"data.messagingConfig.sendMessageEnabled","typeLabel":"boolean"},"sendMessageDescriptionOverride":{"type":"string","description":"Custom instructions for when and how the agent texts during a call.","uniqueKey":"data.messagingConfig.sendMessageDescriptionOverride","typeLabel":"string"},"conversationIdleResetDays":{"type":"integer","description":"Days of inactivity after which earlier conversation history is no longer used as reply context. Defaults to 30.","uniqueKey":"data.messagingConfig.conversationIdleResetDays","typeLabel":"integer"}},"uniqueKey":"data.messagingConfig","typeLabel":"object"},"widgetKey":{"oneOf":[{"type":"string","readOnly":true,"description":"Public embed key for the website chat widget (starts with 'rrwk_'). Minted automatically the first time the widget is enabled. Read-only; it appears in the embed snippet you paste on your site.","uniqueKey":"data.widgetKey.oneOf.0","typeLabel":"string"},{"type":"null","readOnly":true,"description":"Public embed key for the website chat widget (starts with 'rrwk_'). Minted automatically the first time the widget is enabled. Read-only; it appears in the embed snippet you paste on your site.","uniqueKey":"data.widgetKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.widgetKey","typeLabel":"string | null"},"widgetConfig":{"type":"object","description":"Per-agent website chat widget settings. A JSON object; set only the keys you need. Enabling the widget the first time mints a public embed key (returned as the read-only 'widgetKey' on the agent).","properties":{"enabled":{"type":"boolean","description":"Whether the website chat widget is live. When true, the widget loads on the allowed domains.","uniqueKey":"data.widgetConfig.enabled","typeLabel":"boolean"},"modes":{"type":"object","description":"Which interaction modes the widget offers. Chat is always on; voice is opt-in.","properties":{"chat":{"type":"boolean","description":"Text chat (always available; defaults to true).","uniqueKey":"data.widgetConfig.modes.chat","typeLabel":"boolean"},"voice":{"type":"boolean","description":"In-browser voice calls. Adds a call button to the widget. Defaults to false.","uniqueKey":"data.widgetConfig.modes.voice","typeLabel":"boolean"}},"uniqueKey":"data.widgetConfig.modes","typeLabel":"object"},"continuity":{"type":"object","description":"Continue-mode behaviors for voice widget calls. Both default true.","properties":{"resumeCalls":{"type":"boolean","description":"A voice call survives the visitor navigating to another page or reloading (it resumes the same call), and silently redials if it fully dropped. Default true. False = a navigation ends the call, like a normal phone call.","uniqueKey":"data.widgetConfig.continuity.resumeCalls","typeLabel":"boolean"},"sharedMemory":{"type":"boolean","description":"Chat and voice share one visitor memory: a call knows the chat history and later chat knows the call. Default true. False = chat and voice stay separate.","uniqueKey":"data.widgetConfig.continuity.sharedMemory","typeLabel":"boolean"}},"uniqueKey":"data.widgetConfig.continuity","typeLabel":"object"},"allowedDomains":{"type":"array","items":{"type":"string","uniqueKey":"data.widgetConfig.allowedDomains.items.[INDEX]","typeLabel":"string"},"description":"Hostnames the widget may run on (e.g. 'www.example.com'). Subdomains are listed separately. Requests from any other origin are refused.","uniqueKey":"data.widgetConfig.allowedDomains","typeLabel":"string[]"},"webchatPrompt":{"type":"string","description":"Optional instructions for composing web chat replies. If omitted, the agent uses its main prompt. Set it to give website chat its own tone, separate from calls and texting.","uniqueKey":"data.widgetConfig.webchatPrompt","typeLabel":"string"},"appearance":{"type":"object","description":"Visual customization for the widget.","properties":{"position":{"type":"string","enum":["bottom-right","bottom-left","top-right","top-left"],"description":"Corner the launcher bubble sits in. Defaults to 'bottom-right'.","uniqueKey":"data.widgetConfig.appearance.position","typeLabel":"enum\u003cstring>"},"accentColor":{"type":"string","description":"Brand color as a 3- or 6-digit hex (e.g. '#1a56db'). Defaults to '#1a56db'.","uniqueKey":"data.widgetConfig.appearance.accentColor","typeLabel":"string"},"theme":{"type":"string","enum":["light","dark","auto"],"description":"Color theme. 'auto' follows the visitor's device. Defaults to 'auto'.","uniqueKey":"data.widgetConfig.appearance.theme","typeLabel":"enum\u003cstring>"},"launcherLabel":{"type":"string","description":"Text on the launcher bubble. Defaults to 'Chat with us'.","uniqueKey":"data.widgetConfig.appearance.launcherLabel","typeLabel":"string"},"agentDisplayName":{"type":"string","description":"Name shown in the chat header. Defaults to the agent's name.","uniqueKey":"data.widgetConfig.appearance.agentDisplayName","typeLabel":"string"},"avatarUrl":{"type":"string","description":"Image URL shown as the agent avatar.","uniqueKey":"data.widgetConfig.appearance.avatarUrl","typeLabel":"string"},"welcomeMessage":{"type":"string","description":"Message shown when a visitor opens the chat for the first time.","uniqueKey":"data.widgetConfig.appearance.welcomeMessage","typeLabel":"string"},"chatPlaceholder":{"type":"string","description":"Placeholder text in the message input. Defaults to 'Type a message...'.","uniqueKey":"data.widgetConfig.appearance.chatPlaceholder","typeLabel":"string"}},"uniqueKey":"data.widgetConfig.appearance","typeLabel":"object"},"limits":{"type":"object","description":"Usage limits for the widget.","properties":{"messagesPerDay":{"type":"integer","description":"Maximum visitor messages answered per conversation per rolling day. Defaults to 300.","uniqueKey":"data.widgetConfig.limits.messagesPerDay","typeLabel":"integer"}},"uniqueKey":"data.widgetConfig.limits","typeLabel":"object"}},"uniqueKey":"data.widgetConfig","typeLabel":"object"},"sipTrunkId":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"data.sipTrunkId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","uniqueKey":"data.sipTrunkId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sipTrunkId","typeLabel":"string\u003cuuid> | null"},"sipTrunk":{"type":"object","properties":{"friendlyName":{"oneOf":[{"type":"string","uniqueKey":"data.sipTrunk.friendlyName.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.sipTrunk.friendlyName.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sipTrunk.friendlyName","typeLabel":"string | null"}},"uniqueKey":"data.sipTrunk","typeLabel":"object"},"folderId":{"oneOf":[{"type":"string","format":"uuid","description":"ID of the folder this agent belongs to, or null for uncategorized","uniqueKey":"data.folderId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"ID of the folder this agent belongs to, or null for uncategorized","uniqueKey":"data.folderId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.folderId","typeLabel":"string\u003cuuid> | null"},"folder":{"oneOf":[{"type":"object","description":"Summary of the folder this agent belongs to","properties":{"id":{"type":"string","format":"uuid","uniqueKey":"data.folder.oneOf.0.id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"data.folder.oneOf.0.name","typeLabel":"string"},"color":{"oneOf":[{"type":"string","uniqueKey":"data.folder.oneOf.0.color.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.folder.oneOf.0.color.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.folder.oneOf.0.color","typeLabel":"string | null"}},"uniqueKey":"data.folder.oneOf.0","typeLabel":"object"},{"type":"null","description":"Summary of the folder this agent belongs to","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"color":{"oneOf":[{"type":"string"},{"type":"null"}]}},"uniqueKey":"data.folder.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.folder","typeLabel":"object | null"},"defaultVariables":{"oneOf":[{"type":"object","description":"Default template variables","uniqueKey":"data.defaultVariables.oneOf.0","typeLabel":"object"},{"type":"null","description":"Default template variables","uniqueKey":"data.defaultVariables.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.defaultVariables","typeLabel":"object | null"},"firstMessage":{"oneOf":[{"type":"string","description":"Agent's opening message","uniqueKey":"data.firstMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"Agent's opening message","uniqueKey":"data.firstMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.firstMessage","typeLabel":"string | null"},"firstMessageOutbound":{"oneOf":[{"type":"string","description":"Optional outbound-specific opening. On outbound calls it is spoken instead of firstMessage; null or empty means firstMessage is used for both directions. Supports {{variables}}.","uniqueKey":"data.firstMessageOutbound.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional outbound-specific opening. On outbound calls it is spoken instead of firstMessage; null or empty means firstMessage is used for both directions. Supports {{variables}}.","uniqueKey":"data.firstMessageOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.firstMessageOutbound","typeLabel":"string | null"},"firstMessageDelayMs":{"oneOf":[{"type":"integer","minimum":0,"maximum":15000,"description":"Milliseconds to wait after the call is reported answered before the opening is spoken. Null or 0 speaks it immediately. Useful on routes that report a call answered while the phone is still ringing. If the caller speaks during the pause the opening is skipped.","uniqueKey":"data.firstMessageDelayMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"maximum":15000,"description":"Milliseconds to wait after the call is reported answered before the opening is spoken. Null or 0 speaks it immediately. Useful on routes that report a call answered while the phone is still ringing. If the caller speaks during the pause the opening is skipped.","uniqueKey":"data.firstMessageDelayMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.firstMessageDelayMs","typeLabel":"integer | null"},"startSpeaker":{"oneOf":[{"type":"string","enum":["agent","user"],"description":"Who opens the conversation. `agent` (default) speaks the opening. `user` keeps the agent silent, including the re-engagement prompt, until the caller speaks.","uniqueKey":"data.startSpeaker.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["agent","user"],"description":"Who opens the conversation. `agent` (default) speaks the opening. `user` keeps the agent silent, including the re-engagement prompt, until the caller speaks.","uniqueKey":"data.startSpeaker.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.startSpeaker","typeLabel":"enum\u003cstring> | null"},"startSpeakerOutbound":{"oneOf":[{"type":"string","enum":["agent","user"],"description":"`startSpeaker` for outbound calls only. Null (default) uses `startSpeaker` for every call. Inbound and web calls always use `startSpeaker`.","uniqueKey":"data.startSpeakerOutbound.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["agent","user"],"description":"`startSpeaker` for outbound calls only. Null (default) uses `startSpeaker` for every call. Inbound and web calls always use `startSpeaker`.","uniqueKey":"data.startSpeakerOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.startSpeakerOutbound","typeLabel":"enum\u003cstring> | null"},"firstMessageDelayMsOutbound":{"oneOf":[{"type":"integer","minimum":0,"maximum":15000,"description":"`firstMessageDelayMs` for outbound calls only. Null (default) uses `firstMessageDelayMs` for every call. 0 is a real value: no pause on outbound calls.","uniqueKey":"data.firstMessageDelayMsOutbound.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"maximum":15000,"description":"`firstMessageDelayMs` for outbound calls only. Null (default) uses `firstMessageDelayMs` for every call. 0 is a real value: no pause on outbound calls.","uniqueKey":"data.firstMessageDelayMsOutbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.firstMessageDelayMsOutbound","typeLabel":"integer | null"},"beginAfterUserSilenceMs":{"oneOf":[{"type":"integer","minimum":500,"maximum":60000,"description":"For calls where the caller speaks first (`startSpeaker` or `startSpeakerOutbound` set to `user`): if the caller has said nothing after this many milliseconds, the agent speaks its opening. If the caller speaks first, the agent replies to them as usual. Null (default) keeps waiting. Keep it shorter than `silenceEndCallTimeoutSeconds`, otherwise a silent call ends before the agent speaks.","uniqueKey":"data.beginAfterUserSilenceMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":500,"maximum":60000,"description":"For calls where the caller speaks first (`startSpeaker` or `startSpeakerOutbound` set to `user`): if the caller has said nothing after this many milliseconds, the agent speaks its opening. If the caller speaks first, the agent replies to them as usual. Null (default) keeps waiting. Keep it shorter than `silenceEndCallTimeoutSeconds`, otherwise a silent call ends before the agent speaks.","uniqueKey":"data.beginAfterUserSilenceMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.beginAfterUserSilenceMs","typeLabel":"integer | null"},"firstMessageMode":{"oneOf":[{"type":"string","enum":["static","dynamic"],"description":"How the agent opens the call. \"static\" speaks the first message text. \"dynamic\" generates the opening line from the agent's prompt. null uses the default behavior: speak the first message if set, otherwise wait for the caller.","uniqueKey":"data.firstMessageMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["static","dynamic"],"description":"How the agent opens the call. \"static\" speaks the first message text. \"dynamic\" generates the opening line from the agent's prompt. null uses the default behavior: speak the first message if set, otherwise wait for the caller.","uniqueKey":"data.firstMessageMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.firstMessageMode","typeLabel":"enum\u003cstring> | null"},"turnTimeoutSeconds":{"type":"integer","description":"Seconds to wait for user response","uniqueKey":"data.turnTimeoutSeconds","typeLabel":"integer"},"silenceEndCallTimeoutSeconds":{"type":"integer","description":"Silence duration before ending call","uniqueKey":"data.silenceEndCallTimeoutSeconds","typeLabel":"integer"},"maxConversationDurationSeconds":{"type":"integer","description":"Maximum call duration","uniqueKey":"data.maxConversationDurationSeconds","typeLabel":"integer"},"llmTemperature":{"type":"number","minimum":0,"maximum":2,"description":"LLM temperature for response randomness (0 = deterministic, 2 = very creative)","uniqueKey":"data.llmTemperature","typeLabel":"number"},"llmModel":{"type":"string","enum":["revring-standard","revring-max","revring-ultra"],"description":"Language model tier powering the agent. Usage is billed per minute at the tier's rate: revring-standard $0.03/min, revring-max $0.05/min, revring-ultra $0.065/min. Defaults to revring-standard.","uniqueKey":"data.llmModel","typeLabel":"enum\u003cstring>"},"timezone":{"type":"string","description":"IANA timezone identifier (e.g., America/New_York, Europe/London)","uniqueKey":"data.timezone","typeLabel":"string"},"language":{"type":"string","description":"Language code (e.g., en, es, fr, de)","uniqueKey":"data.language","typeLabel":"string"},"preCallWebhookUrl":{"oneOf":[{"type":"string","format":"uri","description":"Webhook URL called before answering inbound calls","uniqueKey":"data.preCallWebhookUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Webhook URL called before answering inbound calls","uniqueKey":"data.preCallWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.preCallWebhookUrl","typeLabel":"string\u003curi> | null"},"postCallWebhookUrl":{"oneOf":[{"type":"string","format":"uri","description":"Webhook URL called after call ends with transcript and recording","uniqueKey":"data.postCallWebhookUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Webhook URL called after call ends with transcript and recording","uniqueKey":"data.postCallWebhookUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.postCallWebhookUrl","typeLabel":"string\u003curi> | null"},"postCallWebhookFormat":{"type":"string","enum":["revring","retell","elevenlabs"],"default":"revring","description":"Payload shape of the post-call webhook. `retell` sends Retell's `call_ended` and `call_analyzed` events; `elevenlabs` sends `post_call_transcription` (or `call_initiation_failure` for dials that never connected). See [compatibility formats](/platform/webhooks#compatibility-formats).","uniqueKey":"data.postCallWebhookFormat","typeLabel":"enum\u003cstring>"},"webhookEvents":{"type":"array","items":{"type":"string","enum":["call.started","transfer.started","transfer.bridged","transfer.cancelled"],"uniqueKey":"data.webhookEvents.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Extra events sent to the post-call webhook URL. `call.started` is sent once when a call connects; transfer.started, transfer.bridged and transfer.cancelled report transfers as they happen.","uniqueKey":"data.webhookEvents","typeLabel":"enum\u003cstring>[]"},"postCallExtraction":{"oneOf":[{"type":"object","description":"Fields to extract from the transcript after every call (see PostCallExtractionConfig). null = off","required":["fields"],"example":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"properties":{"fields":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["name","description","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the extraction result. Letters, digits and underscores, starting with a letter (max 64)","isRequired":true,"uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","maxLength":500,"description":"What to extract, written for the model: for example \"The caller's preferred callback day\"","isRequired":true,"uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX].description","typeLabel":"string"},"type":{"type":"string","enum":["string","number","boolean","enum"],"description":"Value type. Anything not stated on the call comes back as null","isRequired":true,"uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"values":{"type":"array","items":{"type":"string","uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX].values.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":20,"description":"Allowed values when type is `enum` (required for enum, not allowed otherwise)","uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX].values","typeLabel":"string[]"}},"uniqueKey":"data.postCallExtraction.oneOf.0.fields.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.postCallExtraction.oneOf.0.fields","typeLabel":"object[]"}},"uniqueKey":"data.postCallExtraction.oneOf.0","typeLabel":"object"},{"type":"null","description":"Fields to extract from the transcript after every call (see PostCallExtractionConfig). null = off","required":["fields"],"example":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"properties":{"fields":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["name","description","type"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the extraction result. Letters, digits and underscores, starting with a letter (max 64)"},"description":{"type":"string","maxLength":500,"description":"What to extract, written for the model: for example \"The caller's preferred callback day\""},"type":{"type":"string","enum":["string","number","boolean","enum"],"description":"Value type. Anything not stated on the call comes back as null"},"values":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20,"description":"Allowed values when type is `enum` (required for enum, not allowed otherwise)"}}}}},"uniqueKey":"data.postCallExtraction.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"data.postCallExtraction.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.postCallExtraction","typeLabel":"object · null · null"},"postCallEvaluation":{"oneOf":[{"type":"object","description":"Success criteria judged after every call (see PostCallEvaluationConfig). null = off","required":["criteria"],"example":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"properties":{"criteria":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["name","description"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the evaluation result. Letters, digits and underscores, starting with a letter (max 64)","isRequired":true,"uniqueKey":"data.postCallEvaluation.oneOf.0.criteria.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","maxLength":1000,"description":"The criterion in plain language, for example \"The caller confirmed the appointment date and time\"","isRequired":true,"uniqueKey":"data.postCallEvaluation.oneOf.0.criteria.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"data.postCallEvaluation.oneOf.0.criteria.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.postCallEvaluation.oneOf.0.criteria","typeLabel":"object[]"}},"uniqueKey":"data.postCallEvaluation.oneOf.0","typeLabel":"object"},{"type":"null","description":"Success criteria judged after every call (see PostCallEvaluationConfig). null = off","required":["criteria"],"example":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"properties":{"criteria":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","required":["name","description"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,63}$","description":"Key in the evaluation result. Letters, digits and underscores, starting with a letter (max 64)"},"description":{"type":"string","maxLength":1000,"description":"The criterion in plain language, for example \"The caller confirmed the appointment date and time\""}}}}},"uniqueKey":"data.postCallEvaluation.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"data.postCallEvaluation.oneOf.2","typeLabel":"null"}],"uniqueKey":"data.postCallEvaluation","typeLabel":"object · null · null"},"storageMode":{"oneOf":[{"type":"string","enum":["full","redact_pii"],"description":"What call content is kept. `full` keeps everything; `redact_pii` removes personal details from the transcript and summary before the call is stored or sent. See [Data Controls](/platform/data-controls).","uniqueKey":"data.storageMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["full","redact_pii"],"description":"What call content is kept. `full` keeps everything; `redact_pii` removes personal details from the transcript and summary before the call is stored or sent. See [Data Controls](/platform/data-controls).","uniqueKey":"data.storageMode.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.storageMode","typeLabel":"enum\u003cstring> | null"},"piiCategories":{"oneOf":[{"type":"array","items":{"type":"string","enum":["person_name","phone_number","email","address","date_of_birth","government_id","payment_card","bank_account","account_number","password_or_pin","medical_record_number"],"uniqueKey":"data.piiCategories.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Personal detail categories removed in `redact_pii` mode. Default: all.","uniqueKey":"data.piiCategories.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"null","items":{"type":"string","enum":["person_name","phone_number","email","address","date_of_birth","government_id","payment_card","bank_account","account_number","password_or_pin","medical_record_number"]},"description":"Personal detail categories removed in `redact_pii` mode. Default: all.","uniqueKey":"data.piiCategories.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.piiCategories","typeLabel":"enum\u003cstring>[] | null"},"publishMode":{"type":"string","enum":["auto","manual"],"default":"auto","description":"How changes go live. `auto`: every save is used by the next call. `manual`: calls keep using the published version until you publish again (POST /agents/{id}/publish)","uniqueKey":"data.publishMode","typeLabel":"enum\u003cstring>"},"publishedRevision":{"oneOf":[{"type":"integer","description":"Version calls run on in manual mode; null when nothing has been published yet (the saved draft runs)","uniqueKey":"data.publishedRevision.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Version calls run on in manual mode; null when nothing has been published yet (the saved draft runs)","uniqueKey":"data.publishedRevision.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.publishedRevision","typeLabel":"integer | null"},"hasUnpublishedChanges":{"oneOf":[{"type":"boolean","description":"Manual mode only: true when the saved draft differs from the published version. null in auto mode and on list responses","uniqueKey":"data.hasUnpublishedChanges.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Manual mode only: true when the saved draft differs from the published version. null in auto mode and on list responses","uniqueKey":"data.hasUnpublishedChanges.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.hasUnpublishedChanges","typeLabel":"boolean | null"},"endCallEnabled":{"type":"boolean","description":"Allow agent to end the call","uniqueKey":"data.endCallEnabled","typeLabel":"boolean"},"endCallRulesOverride":{"oneOf":[{"type":"string","description":"Custom instructions for when agent should end call","uniqueKey":"data.endCallRulesOverride.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom instructions for when agent should end call","uniqueKey":"data.endCallRulesOverride.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.endCallRulesOverride","typeLabel":"string | null"},"transferEnabled":{"type":"boolean","description":"Allow agent to transfer calls","uniqueKey":"data.transferEnabled","typeLabel":"boolean"},"transferRoutes":{"oneOf":[{"type":"array","description":"Available transfer destinations with conditions","items":{"type":"object","properties":{"to_number":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"Transfer destination number (E.164)","uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX].to_number","typeLabel":"string"},"condition":{"type":"string","description":"When to offer this transfer option","uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX].condition","typeLabel":"string"},"extension":{"type":"string","pattern":"^[0-9*#w]+$","description":"Optional touch-tone digits dialed after the call connects, to reach an extension behind a phone menu (e.g. \"123#\"). Allowed: 0-9, *, #, and w for a 0.5s pause. Warm transfers only.","uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX].extension","typeLabel":"string"},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Per-route override of how long this destination may ring before the attempt is abandoned. Omit to inherit warmTransferConfig.dialTimeoutSeconds.","uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX].dialTimeoutSeconds","typeLabel":"integer"},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Per-route override of how long to wait after this destination answers for a person to come on the line. Omit to inherit warmTransferConfig.waitForHumanSeconds.","uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX].waitForHumanSeconds","typeLabel":"integer"}},"uniqueKey":"data.transferRoutes.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.transferRoutes.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Available transfer destinations with conditions","items":{"type":"object","properties":{"to_number":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"Transfer destination number (E.164)"},"condition":{"type":"string","description":"When to offer this transfer option"},"extension":{"type":"string","pattern":"^[0-9*#w]+$","description":"Optional touch-tone digits dialed after the call connects, to reach an extension behind a phone menu (e.g. \"123#\"). Allowed: 0-9, *, #, and w for a 0.5s pause. Warm transfers only."},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Per-route override of how long this destination may ring before the attempt is abandoned. Omit to inherit warmTransferConfig.dialTimeoutSeconds."},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Per-route override of how long to wait after this destination answers for a person to come on the line. Omit to inherit warmTransferConfig.waitForHumanSeconds."}}},"uniqueKey":"data.transferRoutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.transferRoutes","typeLabel":"object[] | null"},"transferDescriptionOverride":{"oneOf":[{"type":"string","description":"Custom instructions for transfer feature","uniqueKey":"data.transferDescriptionOverride.oneOf.0","typeLabel":"string"},{"type":"null","description":"Custom instructions for transfer feature","uniqueKey":"data.transferDescriptionOverride.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.transferDescriptionOverride","typeLabel":"string | null"},"voicemailEnabled":{"type":"boolean","description":"Enable voicemail detection","uniqueKey":"data.voicemailEnabled","typeLabel":"boolean"},"voicemailAction":{"type":"string","enum":["hangup","leave_message"],"description":"What to do when voicemail is detected","uniqueKey":"data.voicemailAction","typeLabel":"enum\u003cstring>"},"voicemailMessage":{"oneOf":[{"type":"string","description":"Message to leave on voicemail (if action is leave_message). Supports {{variables}} like the prompt and first message.","uniqueKey":"data.voicemailMessage.oneOf.0","typeLabel":"string"},{"type":"null","description":"Message to leave on voicemail (if action is leave_message). Supports {{variables}} like the prompt and first message.","uniqueKey":"data.voicemailMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.voicemailMessage","typeLabel":"string | null"},"voiceId":{"type":"string","description":"Voice ID (copy from dashboard Voice Library)","uniqueKey":"data.voiceId","typeLabel":"string"},"fallbackVoiceId":{"oneOf":[{"type":"string","description":"Backup voice ID for seamless voice continuity: in the rare case the primary voice is temporarily unavailable, the agent switches to this voice automatically. Omit or set null to let the platform pick a standard backup voice.","uniqueKey":"data.fallbackVoiceId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Backup voice ID for seamless voice continuity: in the rare case the primary voice is temporarily unavailable, the agent switches to this voice automatically. Omit or set null to let the platform pick a standard backup voice.","uniqueKey":"data.fallbackVoiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.fallbackVoiceId","typeLabel":"string | null"},"voiceTemperature":{"type":"number","minimum":0,"maximum":1,"description":"Voice expressiveness (0 = consistent, 1 = more varied). Default 0.7.","uniqueKey":"data.voiceTemperature","typeLabel":"number"},"voiceSpeed":{"type":"number","minimum":0.5,"maximum":2,"description":"Speaking rate multiplier (0.5 = half speed, 2.0 = double speed). Default 1.0.","uniqueKey":"data.voiceSpeed","typeLabel":"number"},"voiceVolume":{"type":"number","minimum":-20,"maximum":20,"description":"Output level in decibels (-20 to 20; 0 = standard). Default 0.","uniqueKey":"data.voiceVolume","typeLabel":"number"},"voiceTopP":{"type":"number","minimum":0,"maximum":1,"description":"Advanced sampling range (0 to 1). Default 0.7.","uniqueKey":"data.voiceTopP","typeLabel":"number"},"runtimeConfig":{"oneOf":[{"type":"object","description":"Advanced runtime configuration","uniqueKey":"data.runtimeConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Advanced runtime configuration","uniqueKey":"data.runtimeConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.runtimeConfig","typeLabel":"object | null"},"phoneNumbers":{"type":"array","description":"Phone numbers assigned to this agent for inbound calls","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"e164":{"type":"string","pattern":"^\\+[1-9]\\d{1,14}$","description":"Phone number in E.164 format","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].e164","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time>"},"environment":{"oneOf":[{"type":"string","description":"Agent environment inbound calls on this number run on; null means production (see Versions and Publishing)","uniqueKey":"data.phoneNumbers.items.[INDEX].environment.oneOf.0","typeLabel":"string"},{"type":"null","description":"Agent environment inbound calls on this number run on; null means production (see Versions and Publishing)","uniqueKey":"data.phoneNumbers.items.[INDEX].environment.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phoneNumbers.items.[INDEX].environment","typeLabel":"string | null"},"trafficSplit":{"oneOf":[{"type":"array","minItems":2,"maxItems":5,"description":"A/B split across versions: each inbound call runs the environment picked by weight (`null` = production). See [Split calls between versions](/platform/versioning#split-calls-between-versions).","items":{"type":"object","properties":{"environment":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0.items.[INDEX].environment.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0.items.[INDEX].environment.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0.items.[INDEX].environment","typeLabel":"string | null"},"weight":{"type":"integer","minimum":1,"maximum":100,"isRequired":true,"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0.items.[INDEX].weight","typeLabel":"integer"}},"required":["environment","weight"],"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.0","typeLabel":"object[]"},{"type":"null","minItems":2,"maxItems":5,"description":"A/B split across versions: each inbound call runs the environment picked by weight (`null` = production). See [Split calls between versions](/platform/versioning#split-calls-between-versions).","items":{"type":"object","properties":{"environment":{"oneOf":[{"type":"string"},{"type":"null"}]},"weight":{"type":"integer","minimum":1,"maximum":100}},"required":["environment","weight"]},"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phoneNumbers.items.[INDEX].trafficSplit","typeLabel":"object[] | null"}},"required":["id","e164","createdAt","updatedAt"],"uniqueKey":"data.phoneNumbers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.phoneNumbers","typeLabel":"object[]"},"customTools":{"type":"array","description":"Custom function calling tools available to this agent","items":{"type":"object","description":"Custom function calling tool for agents","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","description":"Tool name (used in function calls)","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].name","typeLabel":"string"},"webhookUrl":{"type":"string","format":"uri","description":"Webhook URL to invoke","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].webhookUrl","typeLabel":"string\u003curi>"},"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].enabled","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].updatedAt","typeLabel":"string\u003cdate-time>"},"schema":{"type":"object","description":"Function definition: type `function`, a name, a description and JSON Schema parameters","uniqueKey":"data.customTools.items.[INDEX].schema","typeLabel":"object"},"httpMethod":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE"],"description":"HTTP method used when calling the webhook. Defaults to `POST`.","uniqueKey":"data.customTools.items.[INDEX].httpMethod","typeLabel":"enum\u003cstring>"},"headers":{"oneOf":[{"type":"array","description":"Custom HTTP headers to include in webhook requests","items":{"type":"object","description":"A key-value pair","properties":{"key":{"type":"string","description":"Header or parameter name","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].headers.oneOf.0.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","description":"Header or parameter value","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].headers.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"uniqueKey":"data.customTools.items.[INDEX].headers.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.customTools.items.[INDEX].headers.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Custom HTTP headers to include in webhook requests","items":{"type":"object","description":"A key-value pair","properties":{"key":{"type":"string","description":"Header or parameter name"},"value":{"type":"string","description":"Header or parameter value"}},"required":["key","value"]},"uniqueKey":"data.customTools.items.[INDEX].headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.customTools.items.[INDEX].headers","typeLabel":"object[] | null"},"queryParams":{"oneOf":[{"type":"array","description":"Custom query parameters appended to the webhook URL","items":{"type":"object","description":"A key-value pair","properties":{"key":{"type":"string","description":"Header or parameter name","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].queryParams.oneOf.0.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","description":"Header or parameter value","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].queryParams.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"uniqueKey":"data.customTools.items.[INDEX].queryParams.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.customTools.items.[INDEX].queryParams.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Custom query parameters appended to the webhook URL","items":{"type":"object","description":"A key-value pair","properties":{"key":{"type":"string","description":"Header or parameter name"},"value":{"type":"string","description":"Header or parameter value"}},"required":["key","value"]},"uniqueKey":"data.customTools.items.[INDEX].queryParams.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.customTools.items.[INDEX].queryParams","typeLabel":"object[] | null"},"sendRawRequestBody":{"type":"boolean","description":"When true, sends tool arguments directly as the request body instead of the default wrapper","uniqueKey":"data.customTools.items.[INDEX].sendRawRequestBody","typeLabel":"boolean"},"responseMode":{"type":"string","enum":["sync","async"],"default":"sync","description":"How the agent treats the webhook call. `sync`: the agent waits for your webhook's response (up to the tool timeout) and can use it in the conversation. `async`: the agent acknowledges the tool call immediately and keeps the conversation going while your webhook is delivered in the background; the response is not used. Use `async` for side effects such as logging, CRM updates or notifications.","uniqueKey":"data.customTools.items.[INDEX].responseMode","typeLabel":"enum\u003cstring>"},"timeoutSeconds":{"oneOf":[{"type":"integer","minimum":1,"maximum":120,"description":"Seconds a `sync` tool waits for the webhook before the agent moves on. Default 8.","uniqueKey":"data.customTools.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":120,"description":"Seconds a `sync` tool waits for the webhook before the agent moves on. Default 8.","uniqueKey":"data.customTools.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.customTools.items.[INDEX].timeoutSeconds","typeLabel":"integer | null"},"executionMessage":{"oneOf":[{"type":"string","maxLength":300,"description":"A line the agent says while a slow `sync` tool runs, for example \"One moment while I check that.\" The agent answers from the real result when it arrives. Empty or null: the agent waits without speaking.","uniqueKey":"data.customTools.items.[INDEX].executionMessage.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":300,"description":"A line the agent says while a slow `sync` tool runs, for example \"One moment while I check that.\" The agent answers from the real result when it arrives. Empty or null: the agent waits without speaking.","uniqueKey":"data.customTools.items.[INDEX].executionMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.customTools.items.[INDEX].executionMessage","typeLabel":"string | null"},"responseVariables":{"oneOf":[{"type":"array","maxItems":20,"description":"Fields of a successful JSON response saved as call variables for later tools, by name and response path (for example `order.id`).","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name: letters, digits and underscores","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].responseVariables.oneOf.0.items.[INDEX].name","typeLabel":"string"},"path":{"type":"string","description":"Path in the JSON response, such as `order.id` or `items[0].sku`","isRequired":true,"uniqueKey":"data.customTools.items.[INDEX].responseVariables.oneOf.0.items.[INDEX].path","typeLabel":"string"}},"required":["name","path"],"uniqueKey":"data.customTools.items.[INDEX].responseVariables.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.customTools.items.[INDEX].responseVariables.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":20,"description":"Fields of a successful JSON response saved as call variables for later tools, by name and response path (for example `order.id`).","items":{"type":"object","properties":{"name":{"type":"string","description":"Variable name: letters, digits and underscores"},"path":{"type":"string","description":"Path in the JSON response, such as `order.id` or `items[0].sku`"}},"required":["name","path"]},"uniqueKey":"data.customTools.items.[INDEX].responseVariables.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.customTools.items.[INDEX].responseVariables","typeLabel":"object[] | null"},"speakAfterResult":{"type":"boolean","default":true,"description":"When false, the agent does not reply to the tool's result and keeps listening. Only for `sync` tools.","uniqueKey":"data.customTools.items.[INDEX].speakAfterResult","typeLabel":"boolean"},"maxRetries":{"type":"integer","default":0,"minimum":0,"maximum":3,"description":"Extra attempts after a connection error or an HTTP 429, 502, 503 or 504 response, within the tool's time limit. A request that times out is not retried.","uniqueKey":"data.customTools.items.[INDEX].maxRetries","typeLabel":"integer"}},"required":["id","name","webhookUrl","enabled","createdAt","updatedAt"],"uniqueKey":"data.customTools.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.customTools","typeLabel":"object[]"},"mode":{"type":"string","enum":["single_prompt","conversation_flow"],"description":"Agent mode. Set at creation time and cannot be changed. `single_prompt` uses a single system prompt; `conversation_flow` uses a multi-step flow definition.","uniqueKey":"data.mode","typeLabel":"enum\u003cstring>"},"flowDefinition":{"oneOf":[{"type":"object","description":"Conversation flow definition (only used when mode is `conversation_flow`)","uniqueKey":"data.flowDefinition.oneOf.0","typeLabel":"object"},{"type":"null","description":"Conversation flow definition (only used when mode is `conversation_flow`)","uniqueKey":"data.flowDefinition.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.flowDefinition","typeLabel":"object | null"},"testVariables":{"oneOf":[{"type":"object","description":"Variables used for test calls initiated from the dashboard","uniqueKey":"data.testVariables.oneOf.0","typeLabel":"object"},{"type":"null","description":"Variables used for test calls initiated from the dashboard","uniqueKey":"data.testVariables.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.testVariables","typeLabel":"object | null"},"llmReasoningEffort":{"type":"string","enum":["low","medium","high"],"description":"Controls the reasoning effort of the language model. Higher values produce more thorough but slower responses.","uniqueKey":"data.llmReasoningEffort","typeLabel":"enum\u003cstring>"},"disableInterruptions":{"type":"boolean","description":"When enabled, the agent will not be interrupted by the caller while speaking","uniqueKey":"data.disableInterruptions","typeLabel":"boolean"},"interruptionThresholdMs":{"type":"integer","minimum":100,"maximum":2000,"default":500,"description":"Minimum speech duration (ms) before the caller's speech is registered as an interruption. Lower values make the agent easier to interrupt. Range: 100-2000, default 500.","uniqueKey":"data.interruptionThresholdMs","typeLabel":"integer"},"interruptionIgnoreWords":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"data.interruptionIgnoreWords.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Acknowledgment words or short phrases that never interrupt the agent while it is speaking (for example \"okay\", \"yeah\", \"uh-huh\"). Anything beyond a brief acknowledgment still interrupts normally, and these words behave normally when the agent is not speaking. null (default) uses the recommended platform list, [] disables the feature, and a list fully replaces the recommended list.","uniqueKey":"data.interruptionIgnoreWords.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","minLength":1,"maxLength":40},"maxItems":50,"description":"Acknowledgment words or short phrases that never interrupt the agent while it is speaking (for example \"okay\", \"yeah\", \"uh-huh\"). Anything beyond a brief acknowledgment still interrupts normally, and these words behave normally when the agent is not speaking. null (default) uses the recommended platform list, [] disables the feature, and a list fully replaces the recommended list.","uniqueKey":"data.interruptionIgnoreWords.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.interruptionIgnoreWords","typeLabel":"string[] | null"},"sttKeyterms":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":60,"uniqueKey":"data.sttKeyterms.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":50,"description":"Names or terms to boost in speech recognition, such as brand names, product names, or uncommon personal names. Merged with the stt_keyterms call variable and automatic boosting of name variables. Null means none.","uniqueKey":"data.sttKeyterms.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":50,"description":"Names or terms to boost in speech recognition, such as brand names, product names, or uncommon personal names. Merged with the stt_keyterms call variable and automatic boosting of name variables. Null means none.","uniqueKey":"data.sttKeyterms.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.sttKeyterms","typeLabel":"string[] | null"},"noiseCancellation":{"type":"string","enum":["on","off"],"default":"on","description":"Background noise suppression on the caller's audio before the agent listens: background noise and competing voices are suppressed so the agent hears the person on the line. On by default for every agent; set `off` to disable for this agent.","uniqueKey":"data.noiseCancellation","typeLabel":"enum\u003cstring>"},"minInterruptionWords":{"type":"integer","minimum":0,"maximum":10,"default":1,"description":"Number of transcribed words required before the caller's speech interrupts the agent while it is speaking. Default 1 keeps the agent responsive. Higher values make the agent harder to interrupt. 0 interrupts on any caller sound, including background noise.","uniqueKey":"data.minInterruptionWords","typeLabel":"integer"},"transferMode":{"type":"string","enum":["cold","warm"],"description":"Transfer mode. `cold` disconnects the AI before connecting to the destination. `warm` keeps the AI on the line to introduce the caller.","uniqueKey":"data.transferMode","typeLabel":"enum\u003cstring>"},"warmTransferConfig":{"oneOf":[{"type":"object","description":"Configuration for warm transfers (only used when transferMode is `warm`)","properties":{"holdMessage":{"type":"string","maxLength":500,"description":"Message played to the caller while on hold","uniqueKey":"data.warmTransferConfig.oneOf.0.holdMessage","typeLabel":"string"},"holdMusicEnabled":{"type":"boolean","description":"Whether to play hold music while the caller waits","uniqueKey":"data.warmTransferConfig.oneOf.0.holdMusicEnabled","typeLabel":"boolean"},"summaryPrompt":{"type":"string","maxLength":2000,"description":"Prompt used to generate a conversation summary for the human agent","uniqueKey":"data.warmTransferConfig.oneOf.0.summaryPrompt","typeLabel":"string"},"introMessage":{"type":"string","maxLength":500,"description":"Message the AI speaks to the human agent before connecting the caller","uniqueKey":"data.warmTransferConfig.oneOf.0.introMessage","typeLabel":"string"},"continueRecordingAfterTransfer":{"type":"boolean","description":"Keep recording after the warm handoff completes, so the recording also includes the human agent and caller conversation.","uniqueKey":"data.warmTransferConfig.oneOf.0.continueRecordingAfterTransfer","typeLabel":"boolean"},"callerIdMode":{"type":"string","enum":["agent","original_caller"],"default":"agent","description":"Caller ID presented to the warm transfer recipient. \"agent\" (default) shows the agent's own number for the call. \"original_caller\" shows the customer's number. A warm transfer places a new outbound call over your own trunk, so sending a caller ID you do not own depends on your telephony provider; many support it (often as a per-trunk ANI override option) and some require it to be enabled first. If your provider rejects or replaces it, or the caller withheld their number, the agent's number is presented instead and the transfer still completes.","uniqueKey":"data.warmTransferConfig.oneOf.0.callerIdMode","typeLabel":"enum\u003cstring>"},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Seconds to let the transfer destination ring before the assistant gives up, tells the caller, and continues the conversation. Omit for the platform default of 75.","uniqueKey":"data.warmTransferConfig.oneOf.0.dialTimeoutSeconds","typeLabel":"integer"},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Seconds to wait after the destination answers for a person to actually come on the line. Covers queues and hold systems that pick up but never hand over. On expiry the assistant ends the attempt, tells the caller, and continues. Omit for the platform default of 300.","uniqueKey":"data.warmTransferConfig.oneOf.0.waitForHumanSeconds","typeLabel":"integer"}},"uniqueKey":"data.warmTransferConfig.oneOf.0","typeLabel":"object"},{"type":"null","description":"Configuration for warm transfers (only used when transferMode is `warm`)","properties":{"holdMessage":{"type":"string","maxLength":500,"description":"Message played to the caller while on hold"},"holdMusicEnabled":{"type":"boolean","description":"Whether to play hold music while the caller waits"},"summaryPrompt":{"type":"string","maxLength":2000,"description":"Prompt used to generate a conversation summary for the human agent"},"introMessage":{"type":"string","maxLength":500,"description":"Message the AI speaks to the human agent before connecting the caller"},"continueRecordingAfterTransfer":{"type":"boolean","description":"Keep recording after the warm handoff completes, so the recording also includes the human agent and caller conversation."},"callerIdMode":{"type":"string","enum":["agent","original_caller"],"default":"agent","description":"Caller ID presented to the warm transfer recipient. \"agent\" (default) shows the agent's own number for the call. \"original_caller\" shows the customer's number. A warm transfer places a new outbound call over your own trunk, so sending a caller ID you do not own depends on your telephony provider; many support it (often as a per-trunk ANI override option) and some require it to be enabled first. If your provider rejects or replaces it, or the caller withheld their number, the agent's number is presented instead and the transfer still completes."},"dialTimeoutSeconds":{"type":"integer","minimum":10,"maximum":300,"description":"Seconds to let the transfer destination ring before the assistant gives up, tells the caller, and continues the conversation. Omit for the platform default of 75."},"waitForHumanSeconds":{"type":"integer","minimum":15,"maximum":600,"description":"Seconds to wait after the destination answers for a person to actually come on the line. Covers queues and hold systems that pick up but never hand over. On expiry the assistant ends the attempt, tells the caller, and continues. Omit for the platform default of 300."}},"uniqueKey":"data.warmTransferConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.warmTransferConfig","typeLabel":"object | null"},"playKeypadTouchToneEnabled":{"type":"boolean","description":"Enable the keypad input (DTMF) tool, allowing callers to press phone keys during the conversation","uniqueKey":"data.playKeypadTouchToneEnabled","typeLabel":"boolean"},"playKeypadTouchToneDescriptionOverride":{"oneOf":[{"type":"string","maxLength":2000,"description":"Custom instructions for the keypad input tool behavior","uniqueKey":"data.playKeypadTouchToneDescriptionOverride.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":2000,"description":"Custom instructions for the keypad input tool behavior","uniqueKey":"data.playKeypadTouchToneDescriptionOverride.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.playKeypadTouchToneDescriptionOverride","typeLabel":"string | null"},"knowledgeBaseRetrievalMode":{"type":"string","enum":["automatic","query_tool"],"description":"How the agent queries linked knowledge bases. `automatic` retrieves context on every turn. `query_tool` lets the agent decide when to search.","uniqueKey":"data.knowledgeBaseRetrievalMode","typeLabel":"enum\u003cstring>"},"knowledgeBaseChunks":{"type":"integer","minimum":1,"maximum":20,"description":"Number of text chunks to retrieve per knowledge base query","uniqueKey":"data.knowledgeBaseChunks","typeLabel":"integer"},"knowledgeBaseSimilarityThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Minimum similarity score for retrieved chunks (0-1). Higher values return only highly relevant results.","uniqueKey":"data.knowledgeBaseSimilarityThreshold","typeLabel":"number"},"languagePresets":{"type":"object","description":"Voice and opening line per language code (e.g. `es`, `pt-BR`), used when a call runs in that language. See [Language presets](/platform/multilingual#language-presets).","additionalProperties":{"type":"object","properties":{"voiceId":{"oneOf":[{"type":"string","uniqueKey":"data.languagePresets.additionalProperties.voiceId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.languagePresets.additionalProperties.voiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.languagePresets.additionalProperties.voiceId","typeLabel":"string | null"},"firstMessage":{"oneOf":[{"type":"string","maxLength":4000,"uniqueKey":"data.languagePresets.additionalProperties.firstMessage.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"uniqueKey":"data.languagePresets.additionalProperties.firstMessage.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.languagePresets.additionalProperties.firstMessage","typeLabel":"string | null"}},"uniqueKey":"data.languagePresets.additionalProperties","typeLabel":"object"},"uniqueKey":"data.languagePresets","typeLabel":"object"},"doNotCallDetection":{"type":"boolean","default":false,"description":"After each call, detect a caller's request not to be called again; when they asked, the call shows `doNotCallRequested: true` and their number goes on your do-not-call list. See [Do-not-call list](/platform/campaigns#add-callers-who-ask-automatically).","uniqueKey":"data.doNotCallDetection","typeLabel":"boolean"},"inboundCallbacks":{"type":"object","description":"Callback recognition: an inbound caller your account dialed within `windowDays` is treated as calling back. The call carries the outbound call's variables plus `is_callback`, `callback_call_id`, `last_call_time` and `last_call_outcome`, the agent is told how that call went, and it greets a returning caller (your `greeting`, or its first message adapted) instead of an opening written for calls it places. On by default. See [Callbacks](/platform/inbound#callbacks).","properties":{"enabled":{"type":"boolean","description":"Recognize callbacks. Default true.","isRequired":true,"uniqueKey":"data.inboundCallbacks.enabled","typeLabel":"boolean"},"windowDays":{"oneOf":[{"type":"integer","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30.","uniqueKey":"data.inboundCallbacks.windowDays.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":90,"description":"How many days back an outbound call counts. Default 30.","uniqueKey":"data.inboundCallbacks.windowDays.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.inboundCallbacks.windowDays","typeLabel":"integer | null"},"greeting":{"oneOf":[{"type":"string","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them.","uniqueKey":"data.inboundCallbacks.greeting.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4000,"description":"Spoken word for word to returning callers, with `{{variables}}` filled in. Empty or null: the agent adapts its first message for them.","uniqueKey":"data.inboundCallbacks.greeting.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.inboundCallbacks.greeting","typeLabel":"string | null"}},"required":["enabled"],"uniqueKey":"data.inboundCallbacks","typeLabel":"object"},"contactMemory":{"type":"object","description":"Contact memory: `update` adds what each call taught about the person to a memory kept for their phone number; `read` gives the agent that memory at the start of inbound and outbound calls. Both off by default. See [Contact memory](/platform/contact-memory).","properties":{"read":{"type":"boolean","isRequired":true,"uniqueKey":"data.contactMemory.read","typeLabel":"boolean"},"update":{"type":"boolean","isRequired":true,"uniqueKey":"data.contactMemory.update","typeLabel":"boolean"}},"required":["read","update"],"uniqueKey":"data.contactMemory","typeLabel":"object"},"guardrails":{"oneOf":[{"type":"object","description":"What the agent refuses to be pulled into, on calls, in tests, over SMS and in web chat; null = off. See the Guardrails guide.","properties":{"focus":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it","uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.0.enabled","typeLabel":"boolean"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it","uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.0.scope.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it","uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.0.scope.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.0.scope","typeLabel":"string | null"}},"uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}},"uniqueKey":"data.guardrails.oneOf.0.focus.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails.oneOf.0.focus","typeLabel":"object | null"},"manipulation":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims","uniqueKey":"data.guardrails.oneOf.0.manipulation.oneOf.0.enabled","typeLabel":"boolean"}},"uniqueKey":"data.guardrails.oneOf.0.manipulation.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}},"uniqueKey":"data.guardrails.oneOf.0.manipulation.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails.oneOf.0.manipulation","typeLabel":"object | null"},"blockedTopics":{"oneOf":[{"type":"array","maxItems":30,"items":{"type":"string","maxLength":80,"uniqueKey":"data.guardrails.oneOf.0.blockedTopics.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Subjects never discussed","uniqueKey":"data.guardrails.oneOf.0.blockedTopics.oneOf.0","typeLabel":"string[]"},{"type":"null","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed","uniqueKey":"data.guardrails.oneOf.0.blockedTopics.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails.oneOf.0.blockedTopics","typeLabel":"string[] | null"},"onViolation":{"oneOf":[{"type":"string","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)","uniqueKey":"data.guardrails.oneOf.0.onViolation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)","uniqueKey":"data.guardrails.oneOf.0.onViolation.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails.oneOf.0.onViolation","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"data.guardrails.oneOf.0","typeLabel":"object"},{"type":"null","description":"What the agent refuses to be pulled into, on calls, in tests, over SMS and in web chat; null = off. See the Guardrails guide.","properties":{"focus":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}}},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Stay on purpose: declines unrelated requests in one sentence and returns to it"},"scope":{"oneOf":[{"type":"string","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"},{"type":"null","maxLength":500,"description":"The purpose in a few words; empty = the prompt defines it"}]}}}]},"manipulation":{"oneOf":[{"type":"object","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}}},{"type":"null","properties":{"enabled":{"type":"boolean","description":"Keeps its persona, instructions and rules whatever the person claims"}}}]},"blockedTopics":{"oneOf":[{"type":"array","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed"},{"type":"null","maxItems":30,"items":{"type":"string","maxLength":80},"description":"Subjects never discussed"}]},"onViolation":{"oneOf":[{"type":"string","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)"},{"type":"null","enum":["redirect","end_call"],"description":"After declining twice: keep steering back (default) or say goodbye and end the call (text channels: close the conversation)"}]}},"uniqueKey":"data.guardrails.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guardrails","typeLabel":"object | null"},"booking":{"oneOf":[{"type":"object","description":"Live booking on a connected calendar: the agent gets check_availability and book_appointment. See [Integrations](/platform/integrations).","required":["integrationId","calendarId"],"properties":{"integrationId":{"type":"string","isRequired":true,"uniqueKey":"data.booking.oneOf.0.integrationId","typeLabel":"string"},"calendarId":{"type":"string","description":"Cal.com event type id or GoHighLevel calendar id (GET /v1/integrations/{id}/calendars)","isRequired":true,"uniqueKey":"data.booking.oneOf.0.calendarId","typeLabel":"string"},"durationMinutes":{"oneOf":[{"type":"integer","minimum":5,"maximum":480,"description":"Default 30; Cal.com event types set their own length","uniqueKey":"data.booking.oneOf.0.durationMinutes.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":5,"maximum":480,"description":"Default 30; Cal.com event types set their own length","uniqueKey":"data.booking.oneOf.0.durationMinutes.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.booking.oneOf.0.durationMinutes","typeLabel":"integer | null"},"timeZone":{"oneOf":[{"type":"string","description":"IANA zone times are offered in; default the agent time zone","uniqueKey":"data.booking.oneOf.0.timeZone.oneOf.0","typeLabel":"string"},{"type":"null","description":"IANA zone times are offered in; default the agent time zone","uniqueKey":"data.booking.oneOf.0.timeZone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.booking.oneOf.0.timeZone","typeLabel":"string | null"}},"uniqueKey":"data.booking.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.booking.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.booking","typeLabel":"object | null"},"handoffRoutes":{"type":"array","maxItems":10,"items":{"type":"object","properties":{"agentId":{"type":"string","description":"Agent to hand the caller to (same organization)","isRequired":true,"uniqueKey":"data.handoffRoutes.items.[INDEX].agentId","typeLabel":"string"},"condition":{"type":"string","maxLength":500,"description":"When to hand off, in plain language","isRequired":true,"uniqueKey":"data.handoffRoutes.items.[INDEX].condition","typeLabel":"string"},"environment":{"oneOf":[{"type":"string","description":"Run that agent's version for this environment; omit for production","uniqueKey":"data.handoffRoutes.items.[INDEX].environment.oneOf.0","typeLabel":"string"},{"type":"null","description":"Run that agent's version for this environment; omit for production","uniqueKey":"data.handoffRoutes.items.[INDEX].environment.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.handoffRoutes.items.[INDEX].environment","typeLabel":"string | null"},"keepVoice":{"type":"boolean","description":"Keep this agent's voice after the handoff (default: the other agent's voice)","uniqueKey":"data.handoffRoutes.items.[INDEX].keepVoice","typeLabel":"boolean"},"handoffMessage":{"type":"string","maxLength":300,"description":"Line said before the handoff","uniqueKey":"data.handoffRoutes.items.[INDEX].handoffMessage","typeLabel":"string"}},"required":["agentId","condition"],"uniqueKey":"data.handoffRoutes.items.[INDEX]","typeLabel":"object"},"description":"Agents this agent can hand the caller to on the same call. See [Hand Off to Another Agent](/platform/tools#hand-off-to-another-agent).","uniqueKey":"data.handoffRoutes","typeLabel":"object[]"},"mcpServers":{"type":"array","maxItems":5,"items":{"type":"object","description":"An MCP server whose tools the agent can use","properties":{"name":{"type":"string","maxLength":64,"description":"Label, unique on the agent","isRequired":true,"uniqueKey":"data.mcpServers.items.[INDEX].name","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"Server address (https only)","isRequired":true,"uniqueKey":"data.mcpServers.items.[INDEX].url","typeLabel":"string\u003curi>"},"headers":{"oneOf":[{"type":"array","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"data.mcpServers.items.[INDEX].headers.oneOf.0.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"data.mcpServers.items.[INDEX].headers.oneOf.0.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"uniqueKey":"data.mcpServers.items.[INDEX].headers.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Sent with every request to the server","uniqueKey":"data.mcpServers.items.[INDEX].headers.oneOf.0","typeLabel":"object[]"},{"type":"null","maxItems":20,"items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"description":"Sent with every request to the server","uniqueKey":"data.mcpServers.items.[INDEX].headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.mcpServers.items.[INDEX].headers","typeLabel":"object[] | null"},"allowedTools":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"data.mcpServers.items.[INDEX].allowedTools.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Only these tools, by name; omit to use every tool the server lists","uniqueKey":"data.mcpServers.items.[INDEX].allowedTools.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Only these tools, by name; omit to use every tool the server lists","uniqueKey":"data.mcpServers.items.[INDEX].allowedTools.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.mcpServers.items.[INDEX].allowedTools","typeLabel":"string[] | null"},"transport":{"oneOf":[{"type":"string","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse","uniqueKey":"data.mcpServers.items.[INDEX].transport.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["streamable_http","sse"],"description":"Omit to use SSE only for URLs ending in /sse","uniqueKey":"data.mcpServers.items.[INDEX].transport.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.mcpServers.items.[INDEX].transport","typeLabel":"enum\u003cstring> | null"},"timeoutSeconds":{"oneOf":[{"type":"integer","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)","uniqueKey":"data.mcpServers.items.[INDEX].timeoutSeconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":120,"description":"How long one tool call may take (default 20)","uniqueKey":"data.mcpServers.items.[INDEX].timeoutSeconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.mcpServers.items.[INDEX].timeoutSeconds","typeLabel":"integer | null"}},"required":["name","url"],"uniqueKey":"data.mcpServers.items.[INDEX]","typeLabel":"object"},"description":"MCP servers whose tools the agent can use (single-prompt agents). See [MCP Servers](/platform/tools#mcp-servers). Empty in minimal listings.","uniqueKey":"data.mcpServers","typeLabel":"object[]"},"recordingEnabled":{"type":"boolean","default":true,"description":"Record the agent's calls. `false`: no audio is recorded. See [Data Controls](/platform/data-controls#turn-recording-off).","uniqueKey":"data.recordingEnabled","typeLabel":"boolean"},"pronunciations":{"type":"array","maxItems":200,"description":"How the agent says specific words on calls; transcripts keep the word as written. Words are unique (ignoring case). See [Pronunciation](/platform/multilingual#pronunciation).","items":{"type":"object","required":["word","alias"],"properties":{"word":{"type":"string","maxLength":100,"description":"The word or phrase as written (whole words only)","isRequired":true,"uniqueKey":"data.pronunciations.items.[INDEX].word","typeLabel":"string"},"alias":{"type":"string","maxLength":200,"description":"How to say it, spelled the way it sounds","isRequired":true,"uniqueKey":"data.pronunciations.items.[INDEX].alias","typeLabel":"string"},"caseSensitive":{"oneOf":[{"type":"boolean","description":"Match the word's case exactly (default: ignore case)","uniqueKey":"data.pronunciations.items.[INDEX].caseSensitive.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Match the word's case exactly (default: ignore case)","uniqueKey":"data.pronunciations.items.[INDEX].caseSensitive.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.pronunciations.items.[INDEX].caseSensitive","typeLabel":"boolean | null"}},"uniqueKey":"data.pronunciations.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.pronunciations","typeLabel":"object[]"},"keypadInput":{"oneOf":[{"type":"object","description":"Digits the caller presses reach the agent as their turn (single-prompt agents). Off unless set. See [Caller Keypad Input](/platform/tools#caller-keypad-input).","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Keypad input on or off","isRequired":true,"uniqueKey":"data.keypadInput.oneOf.0.enabled","typeLabel":"boolean"},"terminationKey":{"oneOf":[{"type":"string","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)","uniqueKey":"data.keypadInput.oneOf.0.terminationKey.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)","uniqueKey":"data.keypadInput.oneOf.0.terminationKey.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.keypadInput.oneOf.0.terminationKey","typeLabel":"enum\u003cstring> | null"},"digitLimit":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed","uniqueKey":"data.keypadInput.oneOf.0.digitLimit.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed","uniqueKey":"data.keypadInput.oneOf.0.digitLimit.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.keypadInput.oneOf.0.digitLimit","typeLabel":"integer | null"},"timeoutMs":{"oneOf":[{"type":"integer","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)","uniqueKey":"data.keypadInput.oneOf.0.timeoutMs.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)","uniqueKey":"data.keypadInput.oneOf.0.timeoutMs.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.keypadInput.oneOf.0.timeoutMs","typeLabel":"integer | null"}},"uniqueKey":"data.keypadInput.oneOf.0","typeLabel":"object"},{"type":"null","description":"Digits the caller presses reach the agent as their turn (single-prompt agents). Off unless set. See [Caller Keypad Input](/platform/tools#caller-keypad-input).","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Keypad input on or off"},"terminationKey":{"oneOf":[{"type":"string","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)"},{"type":"null","enum":["#","*","0","1","2","3","4","5","6","7","8","9"],"description":"Key that ends the entry (not included in the digits)"}]},"digitLimit":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed"},{"type":"null","minimum":1,"maximum":50,"description":"Send as soon as this many digits are pressed"}]},"timeoutMs":{"oneOf":[{"type":"integer","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)"},{"type":"null","minimum":1000,"maximum":15000,"description":"Send after the caller stops pressing for this long (default 2500)"}]}},"uniqueKey":"data.keypadInput.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.keypadInput","typeLabel":"object | null"},"backchannels":{"type":"boolean","description":"Beta. Short listening sounds (\"mm-hmm\", \"right\") in the agent's voice at natural pauses in long caller turns. Never takes the turn. Default false.","uniqueKey":"data.backchannels","typeLabel":"boolean"}},"required":["id","name","status","promptTemplate","createdAt","updatedAt"],"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","status":"active","promptTemplate":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","messagingConnectionId":"\u003cstring>","messagingConfig":{"smsPrompt":"\u003cstring>","inboundMode":"auto_reply","inboundWebhookUrl":"\u003cstring>","fromNumber":"\u003cstring>","sendMessageEnabled":true,"sendMessageDescriptionOverride":"\u003cstring>","conversationIdleResetDays":123},"widgetKey":"\u003cstring>","widgetConfig":{"enabled":true,"modes":{"chat":true,"voice":true},"continuity":{"resumeCalls":true,"sharedMemory":true},"allowedDomains":["\u003cstring>"],"webchatPrompt":"\u003cstring>","appearance":{"position":"bottom-right","accentColor":"\u003cstring>","theme":"light","launcherLabel":"\u003cstring>","agentDisplayName":"\u003cstring>","avatarUrl":"\u003cstring>","welcomeMessage":"\u003cstring>","chatPlaceholder":"\u003cstring>"},"limits":{"messagesPerDay":123}},"sipTrunkId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","sipTrunk":{"friendlyName":"\u003cstring>"},"folderId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","folder":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","color":"\u003cstring>"},"defaultVariables":{},"firstMessage":"\u003cstring>","firstMessageOutbound":"\u003cstring>","firstMessageDelayMs":7500,"startSpeaker":"agent","startSpeakerOutbound":"agent","firstMessageDelayMsOutbound":7500,"beginAfterUserSilenceMs":30250,"firstMessageMode":"static","turnTimeoutSeconds":123,"silenceEndCallTimeoutSeconds":123,"maxConversationDurationSeconds":123,"llmTemperature":1,"llmModel":"revring-standard","timezone":"\u003cstring>","language":"\u003cstring>","preCallWebhookUrl":"\u003cstring>","postCallWebhookUrl":"\u003cstring>","postCallWebhookFormat":"revring","webhookEvents":["call.started"],"postCallExtraction":{"fields":[{"name":"callback_requested","description":"Did the caller ask to be called back?","type":"boolean"},{"name":"preferred_day","description":"Day of the week the caller prefers for the callback","type":"enum","values":["Monday","Tuesday","Wednesday","Thursday","Friday"]},{"name":"budget","description":"Budget the caller mentioned, in dollars","type":"number"}]},"postCallEvaluation":{"criteria":[{"name":"appointment_confirmed","description":"The caller confirmed an appointment date and time"},{"name":"callback_requested","description":"The caller asked to be called back"}]},"storageMode":"full","piiCategories":["person_name"],"publishMode":"auto","publishedRevision":123,"hasUnpublishedChanges":true,"endCallEnabled":true,"endCallRulesOverride":"\u003cstring>","transferEnabled":true,"transferRoutes":[{"to_number":"\u003cstring>","condition":"\u003cstring>","extension":"\u003cstring>","dialTimeoutSeconds":155,"waitForHumanSeconds":307}],"transferDescriptionOverride":"\u003cstring>","voicemailEnabled":true,"voicemailAction":"hangup","voicemailMessage":"\u003cstring>","voiceId":"\u003cstring>","fallbackVoiceId":"\u003cstring>","voiceTemperature":0.5,"voiceSpeed":1.25,"voiceVolume":0,"voiceTopP":0.5,"runtimeConfig":{},"phoneNumbers":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","e164":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","environment":"\u003cstring>","trafficSplit":[{"environment":"\u003cstring>","weight":50}]}],"customTools":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","webhookUrl":"\u003cstring>","enabled":true,"createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","schema":{},"httpMethod":"GET","headers":[{"key":"\u003cstring>","value":"\u003cstring>"}],"queryParams":[{"key":"\u003cstring>","value":"\u003cstring>"}],"sendRawRequestBody":true,"responseMode":"sync","timeoutSeconds":60,"executionMessage":"\u003cstring>","responseVariables":[{"name":"\u003cstring>","path":"\u003cstring>"}],"speakAfterResult":true,"maxRetries":0}],"mode":"single_prompt","flowDefinition":{},"testVariables":{},"llmReasoningEffort":"low","disableInterruptions":true,"interruptionThresholdMs":500,"interruptionIgnoreWords":["\u003cstring>"],"sttKeyterms":["\u003cstring>"],"noiseCancellation":"on","minInterruptionWords":1,"transferMode":"cold","warmTransferConfig":{"holdMessage":"\u003cstring>","holdMusicEnabled":true,"summaryPrompt":"\u003cstring>","introMessage":"\u003cstring>","continueRecordingAfterTransfer":true,"callerIdMode":"agent","dialTimeoutSeconds":155,"waitForHumanSeconds":307},"playKeypadTouchToneEnabled":true,"playKeypadTouchToneDescriptionOverride":"\u003cstring>","knowledgeBaseRetrievalMode":"automatic","knowledgeBaseChunks":10,"knowledgeBaseSimilarityThreshold":0.5,"languagePresets":{},"doNotCallDetection":false,"inboundCallbacks":{"enabled":true,"windowDays":45,"greeting":"\u003cstring>"},"contactMemory":{"read":true,"update":true},"guardrails":{"focus":{"enabled":true,"scope":"\u003cstring>"},"manipulation":{"enabled":true},"blockedTopics":["\u003cstring>"],"onViolation":"redirect"},"booking":{"integrationId":"\u003cstring>","calendarId":"\u003cstring>","durationMinutes":242,"timeZone":"\u003cstring>"},"handoffRoutes":[{"agentId":"\u003cstring>","condition":"\u003cstring>","environment":"\u003cstring>","keepVoice":true,"handoffMessage":"\u003cstring>"}],"mcpServers":[{"name":"\u003cstring>","url":"\u003cstring>","headers":[{"key":"\u003cstring>","value":"\u003cstring>"}],"allowedTools":["\u003cstring>"],"transport":"streamable_http","timeoutSeconds":60}],"recordingEnabled":true,"pronunciations":[{"word":"\u003cstring>","alias":"\u003cstring>","caseSensitive":true}],"keypadInput":{"enabled":true,"terminationKey":"#","digitLimit":25,"timeoutMs":8000},"backchannels":true}}}},"exampleType":"generated"}},"exampleType":"generated"},"6ca36f1a-6d5b-4c2a-9e97-5b97e5ef1e4d":{"description":"Validation error or invalid SIP trunk","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_body","invalid_trunk","create_failed"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error detail","uniqueKey":"message","typeLabel":"string"},"details":{"type":"object","description":"Zod validation error details (when error is invalid_body)","uniqueKey":"details","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_body","message":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"e9aebcdb-108d-490d-af74-2628f177be2b":{"description":"Authentication required or API key invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"unauthorized","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unauthorized"}}},"exampleType":"generated"}},"exampleType":"generated"},"ade12603-d572-4d88-8eaa-19e6e05db868":{"description":"Subscription inactive or billing issue","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"billing_inactive","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"billing_inactive"}}},"exampleType":"generated"}},"exampleType":"generated"},"fd1d51bb-2b2f-4d9c-bc31-89510700d3e9":{"description":"Agent name already exists","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["conflict"],"uniqueKey":"error","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"conflict"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"6fa6cbe6-9d37-480e-b7e5-09d33fd7b619":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","scopes":[],"schemeName":"apiKeyAuth"}}},"servers":{"9d0997fe-7397-47d9-a3af-b8c62abb4b63":{"url":"https://api.revring.ai/v1","description":"Production API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"x-api-key"}],"title":"apiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"revringinc","siteName":"RevRing AI Documentation","title":"Create Agent - RevRing AI Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-21T23:37:38.153Z","originalFileLocation":"api-reference/agents/create.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create a new AI voice agent with specified configuration\">\u003cmeta data-mint-head name=\"application-name\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create Agent - RevRing AI Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a new AI voice agent with specified configuration\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.revring.ai/api-reference/agents/create\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://revringinc.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Create+Agent\u0026amp;description=Create+a+new+AI+voice+agent+with+specified+configuration\u0026amp;theme=68a631265e6b2f240c8578e4\u0026amp;signature=bf804883157fe7628216c95f78b1a895ce99fbc5c927793d7bbe60447c6fec42\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create Agent - RevRing AI Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a new AI voice agent with specified configuration\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://revringinc.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Create+Agent\u0026amp;description=Create+a+new+AI+voice+agent+with+specified+configuration\u0026amp;theme=68a631265e6b2f240c8578e4\u0026amp;signature=bf804883157fe7628216c95f78b1a895ce99fbc5c927793d7bbe60447c6fec42\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#005cdd\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.revring.ai/api-reference/agents/create\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/agents/create.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.revring.ai/#organization\",\"name\":\"RevRing AI Documentation\",\"url\":\"https://docs.revring.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/light.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=e28235c04eceefff5b3adb1cb7c33353\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.revring.ai#website\",\"name\":\"RevRing AI Documentation\",\"url\":\"https://docs.revring.ai\",\"publisher\":{\"@id\":\"https://docs.revring.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.revring.ai/api-reference/agents/create#webpage\",\"url\":\"https://docs.revring.ai/api-reference/agents/create\",\"name\":\"Create Agent\",\"description\":\"Create a new AI voice agent with specified configuration\",\"dateModified\":\"2026-08-21T23:37:38.153Z\",\"isPartOf\":{\"@id\":\"https://docs.revring.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.revring.ai/api-reference/agents/create#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.revring.ai/api-reference/agents/create#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agents\",\"item\":\"https://docs.revring.ai/api-reference/agents/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Agent\",\"item\":\"https://docs.revring.ai/api-reference/agents/create\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.revring.ai/api-reference/agents/create#apireference\",\"headline\":\"Create Agent\",\"name\":\"Create Agent\",\"description\":\"Create a new AI voice agent with specified configuration\",\"url\":\"https://docs.revring.ai/api-reference/agents/create\",\"mainEntityOfPage\":{\"@id\":\"https://docs.revring.ai/api-reference/agents/create#webpage\"},\"dateModified\":\"2026-08-21T23:37:38.153Z\",\"publisher\":{\"@id\":\"https://docs.revring.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.revring.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"RevRing AI Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"RevRing AI Documentation","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"Agents","pages":[{"title":"List Agents","openapi":"GET /agents","href":"/api-reference/agents/list"},{"title":"Get Agent","openapi":"GET /agents/{id}","href":"/api-reference/agents/get"},{"title":"Batch Get Agents","openapi":"POST /agents/batch-get","description":"Fetch multiple agents by ID in a single request. Unknown IDs are omitted from the response. Maximum 100 IDs per request.","href":"/api-reference/agents/batch-get"},{"title":"Create Agent","openapi":"POST /agents","href":"/api-reference/agents/create"},{"title":"Draft an Agent From a Description","openapi":"POST /agents/draft","description":"Write an agent from a plain description of what it should do: a name, an opening line, a prompt organized for phone calls, the language, and transfer routes when the description gives a number to transfer to. Nothing is saved: review and edit the draft, then create the agent with [Create Agent](/api-reference/agents/create).\n\nThe draft uses only facts from the description. Facts the agent will need but the description does not give (opening hours, prices, an address) are listed in `toFillIn` instead of being made up; until they are added to the prompt, the agent offers a callback for them. Details that differ for each call (the person's name, an appointment time) appear as `{{variables}}` and are listed in `variables`.\n\nA draft takes about 10 seconds. Up to 30 drafts per hour per organization.","href":"/api-reference/agents/draft"},{"title":"Update Agent","openapi":"PATCH /agents/{id}","href":"/api-reference/agents/update"},{"title":"Chat With an Agent","openapi":"POST /agents/{id}/test-chat","href":"/api-reference/agents/test-chat"},{"title":"Talk to an Agent From a Browser","openapi":"POST /agents/{id}/test-call","href":"/api-reference/agents/test-call"},{"title":"Duplicate Agent","openapi":"POST /agents/{id}/duplicate","href":"/api-reference/agents/duplicate"},{"title":"Delete Agent","openapi":"DELETE /agents/{id}","href":"/api-reference/agents/delete"}]},{"group":"Agent Versions","pages":[{"title":"List Agent Versions","openapi":"GET /agents/{id}/revisions","href":"/api-reference/agents/list-revisions"},{"title":"Get Agent Version","openapi":"GET /agents/{id}/revisions/{revision}","href":"/api-reference/agents/get-revision"},{"title":"Restore Agent Version","openapi":"POST /agents/{id}/revisions/{revision}/restore","href":"/api-reference/agents/restore-revision"},{"title":"Publish Agent","openapi":"POST /agents/{id}/publish","href":"/api-reference/agents/publish"},{"title":"List Agent Environments","openapi":"GET /agents/{id}/environments","href":"/api-reference/agents/list-environments"},{"title":"Create or Update Environment","openapi":"PUT /agents/{id}/environments/{name}","href":"/api-reference/agents/upsert-environment"},{"title":"Delete Environment","openapi":"DELETE /agents/{id}/environments/{name}","href":"/api-reference/agents/delete-environment"}]},{"group":"Agent Phone Numbers","pages":[{"title":"List Agent Phone Numbers","openapi":"GET /agents/{id}/phone-numbers","href":"/api-reference/agents/list-phone-numbers"},{"title":"Add Phone Number","openapi":"POST /agents/{id}/phone-numbers","href":"/api-reference/agents/add-phone-number"},{"title":"Remove Phone Number","openapi":"DELETE /agents/{id}/phone-numbers/{phoneId}","href":"/api-reference/agents/remove-phone-number"},{"title":"Update Phone Number","openapi":"PATCH /agents/{id}/phone-numbers/{phoneId}","href":"/api-reference/agents/update-phone-number"}]},{"group":"Agent Custom Tools","pages":[{"title":"List Custom Tools","openapi":"GET /agents/{id}/custom-tools","href":"/api-reference/agents/list-custom-tools"},{"title":"Create Custom Tool","openapi":"POST /agents/{id}/custom-tools","href":"/api-reference/agents/create-custom-tool"},{"title":"Update Custom Tool","openapi":"PATCH /agents/{id}/custom-tools/{toolId}","href":"/api-reference/agents/update-custom-tool"},{"title":"Delete Custom Tool","openapi":"DELETE /agents/{id}/custom-tools/{toolId}","href":"/api-reference/agents/delete-custom-tool"},{"title":"Test MCP Server","openapi":"POST /agents/mcp-servers/test","href":"/api-reference/agents/test-mcp-server"}]},{"group":"Agent Knowledge Bases","pages":[{"title":"List Agent Knowledge Bases","openapi":"GET /agents/{id}/knowledge-bases","href":"/api-reference/agents/list-knowledge-bases"},{"title":"Link Knowledge Base","openapi":"POST /agents/{id}/knowledge-bases","href":"/api-reference/agents/link-knowledge-base"},{"title":"Unlink Knowledge Base","openapi":"DELETE /agents/{id}/knowledge-bases/{kbId}","href":"/api-reference/agents/unlink-knowledge-base"}]},{"group":"Agent Folders","pages":[{"title":"List Agent Folders","openapi":"GET /agent-folders","href":"/api-reference/agent-folders/list"},{"title":"Create Agent Folder","openapi":"POST /agent-folders","href":"/api-reference/agent-folders/create"},{"title":"Update Agent Folder","openapi":"PATCH /agent-folders/{id}","href":"/api-reference/agent-folders/update"},{"title":"Delete Agent Folder","openapi":"DELETE /agent-folders/{id}","href":"/api-reference/agent-folders/delete"}]},{"group":"Imports","pages":[{"title":"List Source Agents","openapi":"POST /imports/agents","href":"/api-reference/imports/list-agents"},{"title":"Import Agents","openapi":"POST /imports","href":"/api-reference/imports/import"}]},{"group":"SIP Trunks","pages":[{"title":"List SIP Trunks","openapi":"GET /sip-trunks","href":"/api-reference/sip-trunks/list"},{"title":"Get SIP Trunk","openapi":"GET /sip-trunks/{id}","href":"/api-reference/sip-trunks/get"},{"title":"List Available Phone Numbers","openapi":"GET /sip-trunks/{id}/available-numbers","href":"/api-reference/sip-trunks/list-available-numbers"},{"title":"Create SIP Trunk","openapi":"POST /sip-trunks","href":"/api-reference/sip-trunks/create"},{"title":"Update SIP Trunk","openapi":"PATCH /sip-trunks/{id}","href":"/api-reference/sip-trunks/update"},{"title":"Delete SIP Trunk","openapi":"DELETE /sip-trunks/{id}","href":"/api-reference/sip-trunks/delete"},{"title":"List Twilio Numbers","openapi":"POST /sip-trunks/connect/twilio/numbers","href":"/api-reference/sip-trunks/list-twilio-numbers"},{"title":"Connect Twilio","openapi":"POST /sip-trunks/connect/twilio","href":"/api-reference/sip-trunks/connect-twilio"}]},{"group":"Calls","pages":[{"title":"List Calls","openapi":"GET /calls","href":"/api-reference/calls/list"},{"title":"Get Call","openapi":"GET /calls/{id}","href":"/api-reference/calls/get"},{"title":"Batch Get Calls","openapi":"POST /calls/batch-get","href":"/api-reference/calls/batch-get"},{"title":"Send Call","openapi":"POST /calls","href":"/api-reference/calls/send"},{"title":"Cancel Call","openapi":"POST /calls/{id}/cancel","href":"/api-reference/calls/cancel"},{"title":"Send Instruction","openapi":"POST /calls/{id}/instructions","href":"/api-reference/calls/send-instruction"},{"title":"End Call","openapi":"POST /calls/{id}/end","href":"/api-reference/calls/end"},{"title":"Re-run Analysis","openapi":"POST /calls/{id}/reanalyze","href":"/api-reference/calls/reanalyze"},{"title":"Re-run Analysis (bulk)","openapi":"POST /calls/reanalyze","href":"/api-reference/calls/reanalyze-bulk"},{"title":"Export Calls","openapi":"GET /calls/export","href":"/api-reference/calls/export"}]},{"group":"Campaigns","pages":[{"title":"Create Campaign","openapi":"POST /campaigns","href":"/api-reference/campaigns/create"},{"title":"List Campaigns","openapi":"GET /campaigns","href":"/api-reference/campaigns/list"},{"title":"Get Campaign","openapi":"GET /campaigns/{id}","href":"/api-reference/campaigns/get"},{"title":"Update Campaign","openapi":"PATCH /campaigns/{id}","href":"/api-reference/campaigns/update"},{"title":"Delete Campaign","openapi":"DELETE /campaigns/{id}","href":"/api-reference/campaigns/delete"},{"title":"Add Campaign Contacts","openapi":"POST /campaigns/{id}/contacts","href":"/api-reference/campaigns/add-contacts"},{"title":"List Campaign Contacts","openapi":"GET /campaigns/{id}/contacts","href":"/api-reference/campaigns/list-contacts"},{"title":"Start Campaign","openapi":"POST /campaigns/{id}/start","href":"/api-reference/campaigns/start"},{"title":"Pause Campaign","openapi":"POST /campaigns/{id}/pause","href":"/api-reference/campaigns/pause"},{"title":"Cancel Campaign","openapi":"POST /campaigns/{id}/cancel","href":"/api-reference/campaigns/cancel"},{"title":"Export Campaign Results","openapi":"GET /campaigns/{id}/export","href":"/api-reference/campaigns/export"}]},{"group":"Alerts","pages":[{"title":"List Alert Rules","openapi":"GET /alert-rules","href":"/api-reference/alerts/list"},{"title":"Create Alert Rule","openapi":"POST /alert-rules","href":"/api-reference/alerts/create"},{"title":"Get Alert Rule","openapi":"GET /alert-rules/{id}","href":"/api-reference/alerts/get"},{"title":"Update Alert Rule","openapi":"PATCH /alert-rules/{id}","href":"/api-reference/alerts/update"},{"title":"Delete Alert Rule","openapi":"DELETE /alert-rules/{id}","href":"/api-reference/alerts/delete"},{"title":"List Alert Events","openapi":"GET /alert-rules/{id}/events","href":"/api-reference/alerts/events"},{"title":"Get Alert Value","openapi":"GET /alert-rules/{id}/value","href":"/api-reference/alerts/value"},{"title":"Send Test Alert","openapi":"POST /alert-rules/{id}/test","href":"/api-reference/alerts/test"}]},{"group":"Do Not Call","pages":[{"title":"List Do-Not-Call Numbers","openapi":"GET /do-not-call","href":"/api-reference/do-not-call/list"},{"title":"Add Do-Not-Call Numbers","openapi":"POST /do-not-call","href":"/api-reference/do-not-call/add"},{"title":"Remove Do-Not-Call Number","openapi":"DELETE /do-not-call/{e164}","href":"/api-reference/do-not-call/remove"}]},{"group":"Contacts","pages":[{"title":"List Contact Memories","openapi":"GET /contacts/memories","href":"/api-reference/contacts/list-memories"},{"title":"Get Contact Memory","openapi":"GET /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/get-memory"},{"title":"Set Contact Memory","openapi":"PUT /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/set-memory"},{"title":"Delete Contact Memory","openapi":"DELETE /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/delete-memory"}]},{"group":"Integrations","pages":[{"title":"List Integrations","openapi":"GET /integrations","href":"/api-reference/integrations/list"},{"title":"Connect Integration","openapi":"POST /integrations","href":"/api-reference/integrations/connect"},{"title":"List Calendars","openapi":"GET /integrations/{id}/calendars","href":"/api-reference/integrations/calendars"},{"title":"Test Integration","openapi":"POST /integrations/{id}/test","href":"/api-reference/integrations/test"},{"title":"Update Integration","openapi":"PATCH /integrations/{id}","href":"/api-reference/integrations/update"},{"title":"Disconnect Integration","openapi":"DELETE /integrations/{id}","href":"/api-reference/integrations/delete"}]},{"group":"Knowledge Bases","pages":[{"title":"List Knowledge Bases","openapi":"GET /knowledge-bases","href":"/api-reference/knowledge-bases/list"},{"title":"Get Knowledge Base","openapi":"GET /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/get"},{"title":"Create Knowledge Base","openapi":"POST /knowledge-bases","href":"/api-reference/knowledge-bases/create"},{"title":"Update Knowledge Base","openapi":"PATCH /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/update"},{"title":"Delete Knowledge Base","openapi":"DELETE /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/delete"}]},{"group":"Knowledge Base Sources","pages":[{"title":"Add Source","openapi":"POST /knowledge-bases/{id}/sources","href":"/api-reference/knowledge-bases/add-source"},{"title":"Get Source","openapi":"GET /knowledge-bases/{id}/sources/{sourceId}","href":"/api-reference/knowledge-bases/get-source"},{"title":"Refresh Source","openapi":"POST /knowledge-bases/{id}/sources/{sourceId}/refresh","href":"/api-reference/knowledge-bases/refresh-source"},{"title":"Delete Source","openapi":"DELETE /knowledge-bases/{id}/sources/{sourceId}","href":"/api-reference/knowledge-bases/delete-source"}]},{"group":"Voices","pages":[{"title":"List Voices","openapi":"GET /voices","href":"/api-reference/voices/list"},{"title":"Get Voice","openapi":"GET /voices/{id}","href":"/api-reference/voices/get"},{"title":"Preview Voice","openapi":"GET /voices/{id}/preview","href":"/api-reference/voices/preview"},{"title":"Create Voice","openapi":"POST /voices","href":"/api-reference/voices/create"},{"title":"Design Voices","openapi":"POST /voices/design","href":"/api-reference/voices/design"},{"title":"Search Studio Library","openapi":"GET /voices/studio/library","href":"/api-reference/voices/studio-library"},{"title":"Preview Studio Voice","openapi":"GET /voices/studio/library/{voiceId}/preview","href":"/api-reference/voices/studio-preview"},{"title":"Add Studio Voice","openapi":"POST /voices/studio","href":"/api-reference/voices/studio-add"},{"title":"Rename Voice","openapi":"PATCH /voices/{id}","href":"/api-reference/voices/rename"},{"title":"Delete Voice","openapi":"DELETE /voices/{id}","href":"/api-reference/voices/delete"}]},{"group":"Activity","pages":[{"title":"List Activity","openapi":"GET /activity","href":"/api-reference/activity/list"}]},{"group":"Analytics","pages":[{"title":"Get Analytics Overview","openapi":"GET /analytics/overview","href":"/api-reference/analytics/overview"},{"title":"Get Active Calls Count","openapi":"GET /analytics/active","href":"/api-reference/analytics/active"},{"title":"Compare Versions","openapi":"GET /analytics/versions","href":"/api-reference/analytics/versions"},{"title":"Get Agent Reply Times","openapi":"GET /analytics/reply-times","href":"/api-reference/analytics/reply-times"},{"title":"Get Agent Activity","openapi":"GET /analytics/agents","href":"/api-reference/analytics/agent-activity"}]},{"group":"Test Suites","pages":[{"title":"List Test Suites","openapi":"GET /test-suites","href":"/api-reference/test-suites/list"},{"title":"Get Test Suite","openapi":"GET /test-suites/{id}","href":"/api-reference/test-suites/get"},{"title":"Create Test Suite","openapi":"POST /test-suites","href":"/api-reference/test-suites/create"},{"title":"Update Test Suite","openapi":"PATCH /test-suites/{id}","href":"/api-reference/test-suites/update"},{"title":"Delete Test Suite","openapi":"DELETE /test-suites/{id}","href":"/api-reference/test-suites/delete"},{"title":"Create Test From Call","openapi":"POST /test-suites/{id}/tests/from-call","href":"/api-reference/test-suites/create-test-from-call"},{"title":"Create Suite From Failing Calls","openapi":"POST /test-suites/from-failing-calls","href":"/api-reference/test-suites/from-failing-calls"}]},{"group":"Test Cases","pages":[{"title":"List Test Cases","openapi":"GET /test-suites/{id}/tests","href":"/api-reference/test-suites/list-tests"},{"title":"Get Test Case","openapi":"GET /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/get-test"},{"title":"Create Test Case","openapi":"POST /test-suites/{id}/tests","href":"/api-reference/test-suites/create-test"},{"title":"Update Test Case","openapi":"PATCH /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/update-test"},{"title":"Delete Test Case","openapi":"DELETE /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/delete-test"},{"title":"Generate Test Cases","openapi":"POST /test-suites/{id}/generate-tests","href":"/api-reference/test-suites/generate-tests"}]},{"group":"Test Runs","pages":[{"title":"List Test Runs","openapi":"GET /test-suites/{id}/runs","href":"/api-reference/test-suites/list-runs"},{"title":"Get Test Run","openapi":"GET /test-suites/{id}/runs/{runId}","href":"/api-reference/test-suites/get-run"},{"title":"Start Test Run","openapi":"POST /test-suites/{id}/runs","href":"/api-reference/test-suites/start-run"},{"title":"Cancel Test Run","openapi":"POST /test-suites/{id}/runs/{runId}/cancel","href":"/api-reference/test-suites/cancel-run"},{"title":"Suggest a Fix","openapi":"POST /test-suites/{id}/attempts/{attemptId}/suggest-fix","href":"/api-reference/test-suites/suggest-fix"},{"title":"Get Suggested Fix","openapi":"GET /test-suites/{id}/attempts/{attemptId}/suggest-fix","href":"/api-reference/test-suites/get-suggested-fix"},{"title":"Suggest a Fix for a Run","openapi":"POST /test-suites/{id}/runs/{runId}/suggest-fix","href":"/api-reference/test-suites/suggest-run-fix"},{"title":"Get Suggested Fix for a Run","openapi":"GET /test-suites/{id}/runs/{runId}/suggest-fix","href":"/api-reference/test-suites/get-run-suggested-fix"}]},{"group":"Messaging Connections","pages":[{"title":"List Messaging Connections","openapi":"GET /messaging-connections","href":"/api-reference/messaging-connections/list"},{"title":"Get Messaging Connection","openapi":"GET /messaging-connections/{id}","href":"/api-reference/messaging-connections/get"},{"title":"Create Messaging Connection","openapi":"POST /messaging-connections","href":"/api-reference/messaging-connections/create"},{"title":"Update Messaging Connection","openapi":"PATCH /messaging-connections/{id}","href":"/api-reference/messaging-connections/update"},{"title":"Delete Messaging Connection","openapi":"DELETE /messaging-connections/{id}","href":"/api-reference/messaging-connections/delete"}]},{"group":"Messages","pages":[{"title":"Send Message","openapi":"POST /messages","href":"/api-reference/messages/send"},{"title":"List Messages","openapi":"GET /messages","href":"/api-reference/messages/list"},{"title":"Get Message","openapi":"GET /messages/{id}","href":"/api-reference/messages/get"}]},{"group":"Conversations","pages":[{"title":"List Conversations","openapi":"GET /conversations","href":"/api-reference/conversations/list"},{"title":"Delete Conversation","openapi":"DELETE /conversations/{id}","href":"/api-reference/conversations/delete"}]},{"group":"Webhooks","pages":[{"title":"Pre-Call Webhook","openapi":"webhook pre-call","href":"/api-reference/webhooks/pre-call"},{"title":"Post-Call Webhook","openapi":"webhook post-call","href":"/api-reference/webhooks/post-call"},{"title":"Webhook Signing Secret","openapi":"POST /webhooks/signing-secret","href":"/api-reference/webhooks/signing-secret"},{"title":"Get Webhook Signing State","openapi":"GET /webhooks/signing-secret","href":"/api-reference/webhooks/signing-state"},{"title":"Disable Webhook Signing","openapi":"DELETE /webhooks/signing-secret","href":"/api-reference/webhooks/signing-disable"},{"title":"Inbound Message Webhook","openapi":"webhook message-received","href":"/api-reference/webhooks/message-received"}]}]}]},"basePath":"","title":"Create Agent - RevRing AI Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}