Create an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.
Customer-authored agent instructions: 8,000 Unicode characters by default, or 32,000 with an active monthly commitment plan. Read prompt_limit_characters on the agent for your allowance. Platform conversation and safety guidance is applied separately and does not count toward this allowance. This is a character limit, not a token count.
Role archetype. Adds PyAI's role operating standard beneath your persona and derives the runtime mode (receptionist, sales, and collections enable their matching deterministic conversation guards; everything else runs the default mode). Your stored persona is unchanged and remains authoritative for identity and business policy. Null clears the role.
Greeting message, opening line spoken at turn 0 when a call connects (before the caller speaks). Stored on the agent profile; played automatically when connecting with session_label={agent_id}. May also be sent inline in the Omni configure frame.
Approved opening-line variants. PyAI selects one for each newly resolved call profile; null or empty falls back to greeting. Recording consent is fixed and never rotated.
A stock voice_id, one of its permanent aliases from GET /v1/voices, or a cloned voice id. Omni reports the canonical served stock id in configured.voice_id.
Stored delivery direction for instruct-capable voice tiers. Current Omni routes support neutral delivery only: omit or set null for neutral speech. A saved custom value is rejected when configuring Omni; an inline empty configure.voice_instruct resets it to neutral for that session.
How patient the agent is before checking in on a silent caller ("Sorry, are you still there?"). auto checks in after a few seconds of silence; patient waits far longer, for callers who routinely think, read, or look something up mid-call; off disables the check-in entirely, so the agent stays silent until the caller speaks. When unset, most roles render auto; support agents render patient. Independent of ack_mode. May also be sent inline in the Omni configure frame, which wins for that session.
Which side of the call the persona is on. agent (default) means the persona is the business being called, so PyAI adds its conversation layer for handling a caller (capability honesty, handoffs, turn discipline). caller means the persona is the individual on the call instead, as in QA and simulation callers, mystery shopping, or training partners; PyAI drops that operator-voice layer so it cannot contradict an inverted persona. May also be sent inline in the Omni configure frame, which wins for that session.
Integration-owned setup guidance. Requires an explicitly enrolled server credential; ordinary customer keys receive 403. Separate from persona_system_prompt and its account allowance. Published before the customer instructions without truncation.
When no knowledge bases are explicitly bound, inherit the organization's default knowledge bases. Set false to restrict retrieval to explicit agent bindings; an empty binding list then means no retrieval.
Recording disclosure spoken before recording starts when recordings_enabled is true. Required for compliance when recordings are on and must contain a meaningful spoken phrase (at least 10 characters and 5 letters). Playback order: consent_line, then greeting, then conversation.
Requested language for this Agent's Omni sessions. null or absent means en. Availability is staged: public serving includes en, fr, es, hi, it, pt, ja, and ko; de and the legacy zh alias fall back to English unless explicitly enabled with qualified endpoints. Canonical staged route identifiers are exposed in x-staged-language-ids for internal integration only and are rejected by the public control plane until qualified. Inspect the session's configured.language_active and language_fallback fields before assuming the requested language is active. See the Language support reference.
Optional custom vocabulary for this Agent's Omni speech recognition. A non-empty list is the opt-in. PyAI keeps at most five effective terms, with at most five words per term. It trims whitespace, deduplicates without regard to case while preserving the first spelling and order, and drops common-only phrases. Set [] or null to turn it off. The list is fixed when a session starts. Organization Hear vocabulary is never applied to Omni.
JSON Schema of fields to capture from each completed call's transcript. When set with extraction_webhook_url, PyAI runs a post-call extraction pass and POSTs the structured JSON to your webhook (signed with X-PyAI-Signature). Null disables extraction.
HTTPS URL that receives the signed post-call extraction result (event omni.call.extracted). Requires extraction_schema. The call's agent is resolved from the connect-URL session_label when it equals this agent's id.
Tool bindings for this agent profile (references tools from GET /v1/tools). Omni configure.tools[] may list hosted catalog names or client-loop schemas; server webhooks must be registered here. An inline configure endpoint is not supported.
Reuse a tiny caller card on the next call when PyAI can resolve the caller (phone number or a signed customer id). The card is advisory — the agent may recall a name or open thread, and must not refund, book, or transfer from it. Default false.
Explicit knowledge base bindings for this agent. Does not include inherited organization defaults. Replace bindings with PUT /v1/agents/{id}/knowledgebases.
Session language for this agent's calls. Renders the effective default (en) when unset. Canonical staged route identifiers remain excluded from the public enum until qualification.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"PyAI Developers","description":"Build voice agents through the console or API, powered by Omni. Agents, Hear, Speak, Clone, Cast, and Dub documentation.","colors":{"primary":"#5B5BD6","light":"#8E8EF0","dark":"#3A3AB0"},"logo":{"light":"https://mintcdn.com/pyai/WdY9MU3V1Ll4Gm-R/logo/light.svg?fit=max\u0026auto=format\u0026n=WdY9MU3V1Ll4Gm-R\u0026q=85\u0026s=c47abcf1c2ebb1a5b3d736c8048fe048","dark":"https://mintcdn.com/pyai/WdY9MU3V1Ll4Gm-R/logo/dark.svg?fit=max\u0026auto=format\u0026n=WdY9MU3V1Ll4Gm-R\u0026q=85\u0026s=27b4f2ab467e5a0d91c0f24c4d191765"},"favicon":"https://mintcdn.com/pyai/G4w3mSmcZ1PP4hMU/favicon.svg?fit=max\u0026auto=format\u0026n=G4w3mSmcZ1PP4hMU\u0026q=85\u0026s=b2a603e1ab6b02d3ea6fcc051f224e1c","appearance":{"default":"system"},"navbar":{"links":[{"href":"https://api.pyai.com/openapi.json","label":"OpenAPI spec"},{"href":"https://status.pyai.com","label":"Status"}],"primary":{"type":"button","label":"Choose a path","href":"/choose-your-path"}},"footer":{"socials":{"website":"https://pyai.com","x":"https://x.com/getpyai"}},"search":{"prompt":"Search the PyAI docs"},"seo":{"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","download-spec","grok","cursor","aistudio","perplexity","vscode"],"display":"header"},"interaction":{"drilldown":true},"markdown":{"schema":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"pyai","hasAudioNarration":false,"actualSubdomain":"pyai","customDomains":["docs.pyai.com"],"gitSource":{"type":"github","owner":"atomsai","repo":"pyai-platform-backend","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"12a4fb84-aa68-4edc-9901-c01777ec7393","liveDeploymentHistoryId":"6ae19fa19297755be19eb616","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae19fa19297755be19eb616"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae1c523661bff0c6e728f57","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API reference","count":199},{"language":"default","tag":"Documentation","count":82},{"language":"default","tag":"Telephony","count":38},{"language":"default","tag":"Agents","count":33},{"language":"default","tag":"Integrations","count":27},{"language":"default","tag":"Knowledge Bases","count":14},{"language":"default","tag":"Get started","count":13},{"language":"default","tag":"Trace","count":12},{"language":"default","tag":"WhatsApp","count":12},{"language":"default","tag":"Dub","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/agents/create-an-agent-profile","slug":"/api-reference/agents/create-an-agent-profile","pageMetadata":{"title":"Create an agent profile","description":"Create an OPTIONAL agent profile (persona, **greeting message**, voice, **language**, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full `configure` frame each call. Drive it with `wss://api.pyai.com/v1/omni?session_label=agent_…` (the profile id doubles as the opaque session label); per-call headers (`X-PyAI-Voice`, `X-PyAI-Persona`) and the `configure` frame override profile config. The engine speaks `greeting` at turn 0 and `consent_line` before recording when enabled. Requires the `omni:session` scope.","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/agents","href":"/api-reference/agents/create-an-agent-profile","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Create an OPTIONAL agent profile (persona, \", _jsx(_components.strong, {\n children: \"greeting message\"\n }), \", voice, \", _jsx(_components.strong, {\n children: \"language\"\n }), \", recording disclosure, conversation knobs) so you can reference it by id instead of sending a full \", _jsx(_components.code, {\n children: \"configure\"\n }), \" frame each call. Drive it with \", _jsx(_components.code, {\n children: \"wss://api.pyai.com/v1/omni?session_label=agent_…\"\n }), \" (the profile id doubles as the opaque session label); per-call headers (\", _jsx(_components.code, {\n children: \"X-PyAI-Voice\"\n }), \", \", _jsx(_components.code, {\n children: \"X-PyAI-Persona\"\n }), \") and the \", _jsx(_components.code, {\n children: \"configure\"\n }), \" frame override profile config. The engine speaks \", _jsx(_components.code, {\n children: \"greeting\"\n }), \" at turn 0 and \", _jsx(_components.code, {\n children: \"consent_line\"\n }), \" before recording when enabled. Requires the \", _jsx(_components.code, {\n children: \"omni:session\"\n }), \" scope.\"]\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 an agent profile","description":"Create an OPTIONAL agent profile (persona, **greeting message**, voice, **language**, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full `configure` frame each call. Drive it with `wss://api.pyai.com/v1/omni?session_label=agent_…` (the profile id doubles as the opaque session label); per-call headers (`X-PyAI-Voice`, `X-PyAI-Persona`) and the `configure` frame override profile config. The engine speaks `greeting` at turn 0 and `consent_line` before recording when enabled. Requires the `omni:session` scope.","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/agents","href":"/api-reference/agents/create-an-agent-profile","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Agents"],"summary":"Create an agent profile","description":"Create an OPTIONAL agent profile (persona, **greeting message**, voice, **language**, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full `configure` frame each call. Drive it with `wss://api.pyai.com/v1/omni?session_label=agent_…` (the profile id doubles as the opaque session label); per-call headers (`X-PyAI-Voice`, `X-PyAI-Persona`) and the `configure` frame override profile config. The engine speaks `greeting` at turn 0 and `consent_line` before recording when enabled. Requires the `omni:session` scope.","operationId":"createAgent","requestBody":"8f32b11c-0f0d-46e3-ae91-8495e4f0b498","responses":{"201":"1b138113-516a-4365-b524-7d983db7429d","400":"4101b3e6-85ad-4b29-92e5-45a44dc008fc","401":"c7ef80b8-a98c-4d8e-9639-6257bc7104be","403":"98f99235-42bf-4bfb-81bc-ce4793691e8e"},"method":"post","type":"path","servers":["0ec3a5f5-8471-4041-8e01-12cfeb17ea9d"],"security":["8fef4c78-11e3-47d3-85f4-d66b250b7ccf","ba0f4d3b-c001-406b-aa6e-8db0d6eba5f5"],"path":"/v1/agents","baseUrlOptions":["https://api.pyai.com"],"title":"Create an agent profile","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Writable agent fields. On update, present fields are set, `null` clears, absent fields are untouched.","properties":{"name":{"type":"string","maxLength":200,"description":"Display name. Required on create.","uniqueKey":"name","typeLabel":"string"},"persona_system_prompt":{"oneOf":[{"type":"string","maxLength":32000,"description":"Customer-authored agent instructions: 8,000 Unicode characters by default, or 32,000 with an active monthly commitment plan. Read prompt_limit_characters on the agent for your allowance. Platform conversation and safety guidance is applied separately and does not count toward this allowance. This is a character limit, not a token count.","uniqueKey":"persona_system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":32000,"description":"Customer-authored agent instructions: 8,000 Unicode characters by default, or 32,000 with an active monthly commitment plan. Read prompt_limit_characters on the agent for your allowance. Platform conversation and safety guidance is applied separately and does not count toward this allowance. This is a character limit, not a token count.","uniqueKey":"persona_system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"persona_system_prompt","typeLabel":"string | null"},"role":{"oneOf":[{"type":"string","enum":["receptionist","support","sales","collections","ea","concierge","custom",null],"description":"Role archetype. Adds PyAI's role operating standard beneath your persona and derives the runtime mode (`receptionist`, `sales`, and `collections` enable their matching deterministic conversation guards; everything else runs the default mode). Your stored persona is unchanged and remains authoritative for identity and business policy. Null clears the role.","uniqueKey":"role.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["receptionist","support","sales","collections","ea","concierge","custom",null],"description":"Role archetype. Adds PyAI's role operating standard beneath your persona and derives the runtime mode (`receptionist`, `sales`, and `collections` enable their matching deterministic conversation guards; everything else runs the default mode). Your stored persona is unchanged and remains authoritative for identity and business policy. Null clears the role.","uniqueKey":"role.oneOf.1","typeLabel":"null"}],"uniqueKey":"role","typeLabel":"enum\u003cstring> | null"},"greeting":{"oneOf":[{"type":"string","maxLength":1000,"description":"Greeting message, opening line spoken at turn 0 when a call connects (before the caller speaks). Stored on the agent profile; played automatically when connecting with `session_label={agent_id}`. May also be sent inline in the Omni `configure` frame.","uniqueKey":"greeting.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":1000,"description":"Greeting message, opening line spoken at turn 0 when a call connects (before the caller speaks). Stored on the agent profile; played automatically when connecting with `session_label={agent_id}`. May also be sent inline in the Omni `configure` frame.","uniqueKey":"greeting.oneOf.1","typeLabel":"null"}],"uniqueKey":"greeting","typeLabel":"string | null"},"greeting_variants":{"oneOf":[{"type":"array","maxItems":15,"items":{"type":"string","maxLength":1000,"uniqueKey":"greeting_variants.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Approved opening-line variants. PyAI selects one for each newly resolved call profile; null or empty falls back to greeting. Recording consent is fixed and never rotated.","uniqueKey":"greeting_variants.oneOf.0","typeLabel":"string[]"},{"type":"null","maxItems":15,"items":{"type":"string","maxLength":1000},"description":"Approved opening-line variants. PyAI selects one for each newly resolved call profile; null or empty falls back to greeting. Recording consent is fixed and never rotated.","uniqueKey":"greeting_variants.oneOf.1","typeLabel":"null"}],"uniqueKey":"greeting_variants","typeLabel":"string[] | null"},"voice_id":{"oneOf":[{"type":"string","description":"A stock `voice_id`, one of its permanent `aliases` from `GET /v1/voices`, or a cloned voice id. Omni reports the canonical served stock id in `configured.voice_id`.","uniqueKey":"voice_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"A stock `voice_id`, one of its permanent `aliases` from `GET /v1/voices`, or a cloned voice id. Omni reports the canonical served stock id in `configured.voice_id`.","uniqueKey":"voice_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"voice_id","typeLabel":"string | null"},"voice_instruct":{"oneOf":[{"type":"string","maxLength":200,"description":"Stored delivery direction for instruct-capable voice tiers. Current Omni routes support neutral delivery only: omit or set null for neutral speech. A saved custom value is rejected when configuring Omni; an inline empty `configure.voice_instruct` resets it to neutral for that session.","uniqueKey":"voice_instruct.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"description":"Stored delivery direction for instruct-capable voice tiers. Current Omni routes support neutral delivery only: omit or set null for neutral speech. A saved custom value is rejected when configuring Omni; an inline empty `configure.voice_instruct` resets it to neutral for that session.","uniqueKey":"voice_instruct.oneOf.1","typeLabel":"null"}],"uniqueKey":"voice_instruct","typeLabel":"string | null"},"brain_model":{"oneOf":[{"type":"string","description":"Per-agent model selection. Omit for the platform default.","uniqueKey":"brain_model.oneOf.0","typeLabel":"string"},{"type":"null","description":"Per-agent model selection. Omit for the platform default.","uniqueKey":"brain_model.oneOf.1","typeLabel":"null"}],"uniqueKey":"brain_model","typeLabel":"string | null"},"barge_sensitivity":{"oneOf":[{"type":"string","deprecated":true,"description":"Deprecated compatibility field. Stored values are not applied to Omni runtime.","uniqueKey":"barge_sensitivity.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"description":"Deprecated compatibility field. Stored values are not applied to Omni runtime.","uniqueKey":"barge_sensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"barge_sensitivity","typeLabel":"string | null"},"ack_mode":{"oneOf":[{"type":"string","deprecated":true,"description":"Deprecated compatibility field. Stored values are not applied to Omni runtime.","uniqueKey":"ack_mode.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"description":"Deprecated compatibility field. Stored values are not applied to Omni runtime.","uniqueKey":"ack_mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ack_mode","typeLabel":"string | null"},"idle_check_in":{"oneOf":[{"type":"string","enum":["auto","patient","off",null],"description":"How patient the agent is before checking in on a silent caller (\"Sorry, are you still there?\"). `auto` checks in after a few seconds of silence; `patient` waits far longer, for callers who routinely think, read, or look something up mid-call; `off` disables the check-in entirely, so the agent stays silent until the caller speaks. When unset, most roles render `auto`; support agents render `patient`. Independent of `ack_mode`. May also be sent inline in the Omni `configure` frame, which wins for that session.","uniqueKey":"idle_check_in.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["auto","patient","off",null],"description":"How patient the agent is before checking in on a silent caller (\"Sorry, are you still there?\"). `auto` checks in after a few seconds of silence; `patient` waits far longer, for callers who routinely think, read, or look something up mid-call; `off` disables the check-in entirely, so the agent stays silent until the caller speaks. When unset, most roles render `auto`; support agents render `patient`. Independent of `ack_mode`. May also be sent inline in the Omni `configure` frame, which wins for that session.","uniqueKey":"idle_check_in.oneOf.1","typeLabel":"null"}],"uniqueKey":"idle_check_in","typeLabel":"enum\u003cstring> | null"},"persona_perspective":{"oneOf":[{"type":"string","enum":["agent","caller",null],"description":"Which side of the call the persona is on. `agent` (default) means the persona is the business being called, so PyAI adds its conversation layer for handling a caller (capability honesty, handoffs, turn discipline). `caller` means the persona is the individual on the call instead, as in QA and simulation callers, mystery shopping, or training partners; PyAI drops that operator-voice layer so it cannot contradict an inverted persona. May also be sent inline in the Omni `configure` frame, which wins for that session.","uniqueKey":"persona_perspective.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["agent","caller",null],"description":"Which side of the call the persona is on. `agent` (default) means the persona is the business being called, so PyAI adds its conversation layer for handling a caller (capability honesty, handoffs, turn discipline). `caller` means the persona is the individual on the call instead, as in QA and simulation callers, mystery shopping, or training partners; PyAI drops that operator-voice layer so it cannot contradict an inverted persona. May also be sent inline in the Omni `configure` frame, which wins for that session.","uniqueKey":"persona_perspective.oneOf.1","typeLabel":"null"}],"uniqueKey":"persona_perspective","typeLabel":"enum\u003cstring> | null"},"platform_guidance":{"oneOf":[{"type":"string","maxLength":12000,"description":"Integration-owned setup guidance. Requires an explicitly enrolled server credential; ordinary customer keys receive 403. Separate from persona_system_prompt and its account allowance. Published before the customer instructions without truncation.","uniqueKey":"platform_guidance.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":12000,"description":"Integration-owned setup guidance. Requires an explicitly enrolled server credential; ordinary customer keys receive 403. Separate from persona_system_prompt and its account allowance. Published before the customer instructions without truncation.","uniqueKey":"platform_guidance.oneOf.1","typeLabel":"null"}],"uniqueKey":"platform_guidance","typeLabel":"string | null"},"inherit_org_knowledgebases":{"type":"boolean","default":true,"description":"When no knowledge bases are explicitly bound, inherit the organization's default knowledge bases. Set false to restrict retrieval to explicit agent bindings; an empty binding list then means no retrieval.","uniqueKey":"inherit_org_knowledgebases","typeLabel":"boolean"},"recordings_enabled":{"oneOf":[{"type":"boolean","description":"Enable stereo call recordings. Default false.","uniqueKey":"recordings_enabled.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Enable stereo call recordings. Default false.","uniqueKey":"recordings_enabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"recordings_enabled","typeLabel":"boolean | null"},"consent_line":{"oneOf":[{"type":"string","minLength":10,"maxLength":500,"description":"Recording disclosure spoken before recording starts when `recordings_enabled` is true. Required for compliance when recordings are on and must contain a meaningful spoken phrase (at least 10 characters and 5 letters). Playback order: consent_line, then greeting, then conversation.","uniqueKey":"consent_line.oneOf.0","typeLabel":"string"},{"type":"null","minLength":10,"maxLength":500,"description":"Recording disclosure spoken before recording starts when `recordings_enabled` is true. Required for compliance when recordings are on and must contain a meaningful spoken phrase (at least 10 characters and 5 letters). Playback order: consent_line, then greeting, then conversation.","uniqueKey":"consent_line.oneOf.1","typeLabel":"null"}],"uniqueKey":"consent_line","typeLabel":"string | null"},"language":{"oneOf":[{"type":"string","enum":["en","fr","es","de","hi","zh","it","pt","ja","ko",null],"x-staged-language-ids":["ht","zh-CN","ar-MSA","ar-Gulf"],"description":"Requested language for this Agent's Omni sessions. `null` or absent means `en`. Availability is staged: public serving includes `en`, `fr`, `es`, `hi`, `it`, `pt`, `ja`, and `ko`; `de` and the legacy `zh` alias fall back to English unless explicitly enabled with qualified endpoints. Canonical staged route identifiers are exposed in `x-staged-language-ids` for internal integration only and are rejected by the public control plane until qualified. Inspect the session's `configured.language_active` and `language_fallback` fields before assuming the requested language is active. See the Language support reference.","uniqueKey":"language.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["en","fr","es","de","hi","zh","it","pt","ja","ko",null],"x-staged-language-ids":["ht","zh-CN","ar-MSA","ar-Gulf"],"description":"Requested language for this Agent's Omni sessions. `null` or absent means `en`. Availability is staged: public serving includes `en`, `fr`, `es`, `hi`, `it`, `pt`, `ja`, and `ko`; `de` and the legacy `zh` alias fall back to English unless explicitly enabled with qualified endpoints. Canonical staged route identifiers are exposed in `x-staged-language-ids` for internal integration only and are rejected by the public control plane until qualified. Inspect the session's `configured.language_active` and `language_fallback` fields before assuming the requested language is active. See the Language support reference.","uniqueKey":"language.oneOf.1","typeLabel":"null"}],"uniqueKey":"language","typeLabel":"enum\u003cstring> | null"},"metadata":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"metadata.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Up to 16 key/value annotations (keys ≤64 chars, values ≤512 chars).","uniqueKey":"metadata.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"metadata.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Up to 16 key/value annotations (keys ≤64 chars, values ≤512 chars).","uniqueKey":"metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"metadata","typeLabel":"object | null"},"vocabulary":{"oneOf":[{"type":"array","maxItems":5,"items":{"type":"string","minLength":4,"maxLength":64,"uniqueKey":"vocabulary.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Optional custom vocabulary for this Agent's Omni speech recognition. A non-empty list is the opt-in. PyAI keeps at most five effective terms, with at most five words per term. It trims whitespace, deduplicates without regard to case while preserving the first spelling and order, and drops common-only phrases. Set `[]` or `null` to turn it off. The list is fixed when a session starts. Organization Hear vocabulary is never applied to Omni.","uniqueKey":"vocabulary.oneOf.0","typeLabel":"string[]"},{"type":"null","maxItems":5,"items":{"type":"string","minLength":4,"maxLength":64},"description":"Optional custom vocabulary for this Agent's Omni speech recognition. A non-empty list is the opt-in. PyAI keeps at most five effective terms, with at most five words per term. It trims whitespace, deduplicates without regard to case while preserving the first spelling and order, and drops common-only phrases. Set `[]` or `null` to turn it off. The list is fixed when a session starts. Organization Hear vocabulary is never applied to Omni.","uniqueKey":"vocabulary.oneOf.1","typeLabel":"null"}],"uniqueKey":"vocabulary","typeLabel":"string[] | null"},"keyterms":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"keyterms.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":100,"deprecated":true,"description":"Deprecated stored compatibility field. It does not affect speech recognition. Use `vocabulary`.","uniqueKey":"keyterms.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"maxItems":100,"deprecated":true,"description":"Deprecated stored compatibility field. It does not affect speech recognition. Use `vocabulary`.","uniqueKey":"keyterms.oneOf.1","typeLabel":"null"}],"uniqueKey":"keyterms","typeLabel":"string[] | null"},"goals":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"goals.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Goal checklist for post-call outcome scoring (stored now; scoring ships with summaries).","uniqueKey":"goals.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"maxItems":20,"description":"Goal checklist for post-call outcome scoring (stored now; scoring ships with summaries).","uniqueKey":"goals.oneOf.1","typeLabel":"null"}],"uniqueKey":"goals","typeLabel":"string[] | null"},"extraction_schema":{"oneOf":[{"type":"object","additionalProperties":true,"description":"JSON Schema of fields to capture from each completed call's transcript. When set with extraction_webhook_url, PyAI runs a post-call extraction pass and POSTs the structured JSON to your webhook (signed with X-PyAI-Signature). Null disables extraction.","uniqueKey":"extraction_schema.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"JSON Schema of fields to capture from each completed call's transcript. When set with extraction_webhook_url, PyAI runs a post-call extraction pass and POSTs the structured JSON to your webhook (signed with X-PyAI-Signature). Null disables extraction.","uniqueKey":"extraction_schema.oneOf.1","typeLabel":"null"}],"uniqueKey":"extraction_schema","typeLabel":"object | null"},"extraction_webhook_url":{"oneOf":[{"type":"string","format":"uri","description":"HTTPS URL that receives the signed post-call extraction result (event `omni.call.extracted`). Requires extraction_schema. The call's agent is resolved from the connect-URL session_label when it equals this agent's id.","uniqueKey":"extraction_webhook_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"HTTPS URL that receives the signed post-call extraction result (event `omni.call.extracted`). Requires extraction_schema. The call's agent is resolved from the connect-URL session_label when it equals this agent's id.","uniqueKey":"extraction_webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"extraction_webhook_url","typeLabel":"string\u003curi> | null"},"tools":{"oneOf":[{"type":"array","items":{"type":"object","required":["tool_id"],"properties":{"tool_id":{"type":"string","isRequired":true,"uniqueKey":"tools.oneOf.0.items.[INDEX].tool_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"uniqueKey":"tools.oneOf.0.items.[INDEX].enabled","typeLabel":"boolean"},"config":{"type":"object","additionalProperties":true,"description":"Customer SETTINGS for this tool on this agent, keyed by the tool's config_schema field keys (e.g. { from_number, provider_api_key }). Fields marked secret are encrypted at rest and returned masked ('********'); re-send the mask (or omit) to keep the stored value.","uniqueKey":"tools.oneOf.0.items.[INDEX].config","typeLabel":"object"},"name":{"type":"string","description":"Present on agent reads when the tool resolves.","uniqueKey":"tools.oneOf.0.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"tools.oneOf.0.items.[INDEX].description","typeLabel":"string"},"input_schema":{"type":"object","additionalProperties":true,"description":"Per-call model argument schema. Present on agent reads when the tool resolves.","uniqueKey":"tools.oneOf.0.items.[INDEX].input_schema","typeLabel":"object"},"execution":{"type":"string","enum":["hosted","server","engine","client"],"description":"Resolved execution mode. Present on agent reads when the tool resolves.","uniqueKey":"tools.oneOf.0.items.[INDEX].execution","typeLabel":"enum\u003cstring>"}},"uniqueKey":"tools.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Tool bindings for this agent profile (references tools from `GET /v1/tools`). Omni `configure.tools[]` may list hosted catalog names or client-loop schemas; server webhooks must be registered here. An inline configure `endpoint` is not supported.","uniqueKey":"tools.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","required":["tool_id"],"properties":{"tool_id":{"type":"string"},"enabled":{"type":"boolean","default":true},"config":{"type":"object","additionalProperties":true,"description":"Customer SETTINGS for this tool on this agent, keyed by the tool's config_schema field keys (e.g. { from_number, provider_api_key }). Fields marked secret are encrypted at rest and returned masked ('********'); re-send the mask (or omit) to keep the stored value."},"name":{"type":"string","description":"Present on agent reads when the tool resolves."},"description":{"type":"string"},"input_schema":{"type":"object","additionalProperties":true,"description":"Per-call model argument schema. Present on agent reads when the tool resolves."},"execution":{"type":"string","enum":["hosted","server","engine","client"],"description":"Resolved execution mode. Present on agent reads when the tool resolves."}}},"description":"Tool bindings for this agent profile (references tools from `GET /v1/tools`). Omni `configure.tools[]` may list hosted catalog names or client-loop schemas; server webhooks must be registered here. An inline configure `endpoint` is not supported.","uniqueKey":"tools.oneOf.1","typeLabel":"null"}],"uniqueKey":"tools","typeLabel":"object[] | null"},"continuity":{"oneOf":[{"type":"boolean","description":"Reuse a tiny caller card on the next call when PyAI can resolve the caller (phone number or a signed customer id). The card is advisory — the agent may recall a name or open thread, and must not refund, book, or transfer from it. Default false.","uniqueKey":"continuity.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Reuse a tiny caller card on the next call when PyAI can resolve the caller (phone number or a signed customer id). The card is advisory — the agent may recall a name or open thread, and must not refund, book, or transfer from it. Default false.","uniqueKey":"continuity.oneOf.1","typeLabel":"null"}],"uniqueKey":"continuity","typeLabel":"boolean | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","persona_system_prompt":"\u003cstring>","greeting":"\u003cstring>","greeting_variants":["\u003cstring>"],"voice_id":"\u003cstring>","voice_instruct":"\u003cstring>","brain_model":"\u003cstring>","barge_sensitivity":"\u003cstring>","ack_mode":"\u003cstring>","platform_guidance":"\u003cstring>","inherit_org_knowledgebases":true,"recordings_enabled":true,"consent_line":"\u003cstring>","metadata":{},"vocabulary":["\u003cstring>"],"keyterms":["\u003cstring>"],"goals":["\u003cstring>"],"extraction_schema":{},"extraction_webhook_url":"\u003cstring>","tools":[{"tool_id":"\u003cstring>","enabled":true,"config":{},"name":"\u003cstring>","description":"\u003cstring>","input_schema":{}}],"continuity":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"1b138113-516a-4365-b524-7d983db7429d":{"description":"Created agent","content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","example":"agent","uniqueKey":"object","typeLabel":"string"},"agent_id":{"type":"string","example":"agent_7f3a0b12","uniqueKey":"agent_id","typeLabel":"string"},"name":{"type":"string","uniqueKey":"name","typeLabel":"string"},"persona_system_prompt":{"oneOf":[{"type":"string","uniqueKey":"persona_system_prompt.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"persona_system_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"persona_system_prompt","typeLabel":"string | null"},"platform_guidance":{"oneOf":[{"type":"string","maxLength":12000,"description":"Separate setup guidance published by an enrolled server integration; omitted on ordinary profiles.","uniqueKey":"platform_guidance.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":12000,"description":"Separate setup guidance published by an enrolled server integration; omitted on ordinary profiles.","uniqueKey":"platform_guidance.oneOf.1","typeLabel":"null"}],"uniqueKey":"platform_guidance","typeLabel":"string | null"},"prompt_limit_characters":{"type":"integer","enum":[8000,32000],"readOnly":true,"description":"Current organization allowance for customer-authored agent instructions. Platform guidance is excluded.","uniqueKey":"prompt_limit_characters","typeLabel":"enum\u003cinteger>"},"greeting":{"oneOf":[{"type":"string","uniqueKey":"greeting.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"greeting.oneOf.1","typeLabel":"null"}],"uniqueKey":"greeting","typeLabel":"string | null"},"greeting_variants":{"type":"array","maxItems":15,"items":{"type":"string","uniqueKey":"greeting_variants.items.[INDEX]","typeLabel":"string"},"uniqueKey":"greeting_variants","typeLabel":"string[]"},"voice_id":{"oneOf":[{"type":"string","uniqueKey":"voice_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"voice_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"voice_id","typeLabel":"string | null"},"voice_instruct":{"type":"string","description":"Effective TTS delivery direction for instruct-capable voice tiers. Renders PyAI's natural conversational pace when no override is stored.","uniqueKey":"voice_instruct","typeLabel":"string"},"brain_model":{"type":"string","example":"default","uniqueKey":"brain_model","typeLabel":"string"},"barge_sensitivity":{"oneOf":[{"type":"string","deprecated":true,"uniqueKey":"barge_sensitivity.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"uniqueKey":"barge_sensitivity.oneOf.1","typeLabel":"null"}],"uniqueKey":"barge_sensitivity","typeLabel":"string | null"},"ack_mode":{"oneOf":[{"type":"string","deprecated":true,"uniqueKey":"ack_mode.oneOf.0","typeLabel":"string"},{"type":"null","deprecated":true,"uniqueKey":"ack_mode.oneOf.1","typeLabel":"null"}],"uniqueKey":"ack_mode","typeLabel":"string | null"},"idle_check_in":{"type":"string","enum":["auto","patient","off"],"description":"Idle check-in patience. Renders `auto` when unset, except support agents render `patient`.","uniqueKey":"idle_check_in","typeLabel":"enum\u003cstring>"},"persona_perspective":{"type":"string","enum":["agent","caller"],"description":"Which side of the call the persona is on. Renders the effective default (`agent`) when unset.","uniqueKey":"persona_perspective","typeLabel":"enum\u003cstring>"},"mode":{"type":"string","enum":["default","receptionist","sales","collections"],"readOnly":true,"example":"default","description":"Read-only runtime mode derived from the agent's role (`default`, `receptionist`, `sales`, or `collections`). Set indirectly via the writable `role` field.","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"role":{"oneOf":[{"type":"string","description":"Role archetype the agent runs as, or null. Writable on create and update.","uniqueKey":"role.oneOf.0","typeLabel":"string"},{"type":"null","description":"Role archetype the agent runs as, or null. Writable on create and update.","uniqueKey":"role.oneOf.1","typeLabel":"null"}],"uniqueKey":"role","typeLabel":"string | null"},"continuity":{"type":"boolean","description":"Whether this agent reuses a prior-call caller card when a caller key is available. Default false.","uniqueKey":"continuity","typeLabel":"boolean"},"inherit_org_knowledgebases":{"type":"boolean","description":"Whether an agent with no explicit knowledge bindings inherits organization defaults.","uniqueKey":"inherit_org_knowledgebases","typeLabel":"boolean"},"knowledgebases":{"type":"array","readOnly":true,"items":{"type":"object","required":["kb_id"],"properties":{"kb_id":{"type":"string","description":"Knowledge base id.","isRequired":true,"uniqueKey":"knowledgebases.items.[INDEX].kb_id","typeLabel":"string"},"weight":{"type":"number","default":1,"description":"Retrieval weight relative to other bound bases.","uniqueKey":"knowledgebases.items.[INDEX].weight","typeLabel":"number"}},"uniqueKey":"knowledgebases.items.[INDEX]","typeLabel":"object"},"description":"Explicit knowledge base bindings for this agent. Does not include inherited organization defaults. Replace bindings with PUT /v1/agents/{id}/knowledgebases.","uniqueKey":"knowledgebases","typeLabel":"object[]"},"recordings_enabled":{"type":"boolean","uniqueKey":"recordings_enabled","typeLabel":"boolean"},"consent_line":{"oneOf":[{"type":"string","uniqueKey":"consent_line.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"consent_line.oneOf.1","typeLabel":"null"}],"uniqueKey":"consent_line","typeLabel":"string | null"},"language":{"type":"string","enum":["en","fr","es","de","hi","zh","it","pt","ja","ko"],"x-staged-language-ids":["ht","zh-CN","ar-MSA","ar-Gulf"],"description":"Session language for this agent's calls. Renders the effective default (`en`) when unset. Canonical staged route identifiers remain excluded from the public enum until qualification.","uniqueKey":"language","typeLabel":"enum\u003cstring>"},"vocabulary":{"type":"array","maxItems":5,"items":{"type":"string","minLength":4,"maxLength":64,"uniqueKey":"vocabulary.items.[INDEX]","typeLabel":"string"},"description":"Sanitized Agent vocabulary. An empty list means speech-recognition biasing is off.","uniqueKey":"vocabulary","typeLabel":"string[]"},"keyterms":{"type":"array","items":{"type":"string","uniqueKey":"keyterms.items.[INDEX]","typeLabel":"string"},"deprecated":true,"uniqueKey":"keyterms","typeLabel":"string[]"},"goals":{"type":"array","items":{"type":"string","uniqueKey":"goals.items.[INDEX]","typeLabel":"string"},"uniqueKey":"goals","typeLabel":"string[]"},"metadata":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"uniqueKey":"metadata","typeLabel":"object"},"extraction_schema":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Post-call extraction JSON Schema, or null.","uniqueKey":"extraction_schema.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Post-call extraction JSON Schema, or null.","uniqueKey":"extraction_schema.oneOf.1","typeLabel":"null"}],"uniqueKey":"extraction_schema","typeLabel":"object | null"},"extraction_webhook_url":{"oneOf":[{"type":"string","description":"Signed delivery target for post-call extraction, or null.","uniqueKey":"extraction_webhook_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"Signed delivery target for post-call extraction, or null.","uniqueKey":"extraction_webhook_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"extraction_webhook_url","typeLabel":"string | null"},"tools":{"type":"array","items":{"type":"object","required":["tool_id"],"properties":{"tool_id":{"type":"string","isRequired":true,"uniqueKey":"tools.items.[INDEX].tool_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"uniqueKey":"tools.items.[INDEX].enabled","typeLabel":"boolean"},"config":{"type":"object","additionalProperties":true,"description":"Customer SETTINGS for this tool on this agent, keyed by the tool's config_schema field keys (e.g. { from_number, provider_api_key }). Fields marked secret are encrypted at rest and returned masked ('********'); re-send the mask (or omit) to keep the stored value.","uniqueKey":"tools.items.[INDEX].config","typeLabel":"object"},"name":{"type":"string","description":"Present on agent reads when the tool resolves.","uniqueKey":"tools.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"tools.items.[INDEX].description","typeLabel":"string"},"input_schema":{"type":"object","additionalProperties":true,"description":"Per-call model argument schema. Present on agent reads when the tool resolves.","uniqueKey":"tools.items.[INDEX].input_schema","typeLabel":"object"},"execution":{"type":"string","enum":["hosted","server","engine","client"],"description":"Resolved execution mode. Present on agent reads when the tool resolves.","uniqueKey":"tools.items.[INDEX].execution","typeLabel":"enum\u003cstring>"}},"uniqueKey":"tools.items.[INDEX]","typeLabel":"object"},"uniqueKey":"tools","typeLabel":"object[]"},"created_at":{"type":"integer","description":"Unix seconds.","uniqueKey":"created_at","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"object":"agent","agent_id":"agent_7f3a0b12","name":"\u003cstring>","persona_system_prompt":"\u003cstring>","platform_guidance":"\u003cstring>","prompt_limit_characters":8000,"greeting":"\u003cstring>","greeting_variants":["\u003cstring>"],"voice_id":"\u003cstring>","voice_instruct":"\u003cstring>","brain_model":"default","barge_sensitivity":"\u003cstring>","ack_mode":"\u003cstring>","idle_check_in":"auto","persona_perspective":"agent","mode":"default","role":"\u003cstring>","continuity":true,"inherit_org_knowledgebases":true,"knowledgebases":[{"kb_id":"\u003cstring>","weight":1}],"recordings_enabled":true,"consent_line":"\u003cstring>","language":"en","vocabulary":["\u003cstring>"],"keyterms":["\u003cstring>"],"goals":["\u003cstring>"],"metadata":{},"extraction_schema":{},"extraction_webhook_url":"\u003cstring>","tools":[{"tool_id":"\u003cstring>","enabled":true,"config":{},"name":"\u003cstring>","description":"\u003cstring>","input_schema":{},"execution":"hosted"}],"created_at":123}}},"exampleType":"generated"}},"exampleType":"generated"},"4101b3e6-85ad-4b29-92e5-45a44dc008fc":{"description":"Invalid field","content":{"application/json":{"schema":{"type":"object","description":"OpenAI-compatible error envelope returned by the gateway data plane (401/402/403/429). Control-plane request/resource errors use Problem (application/problem+json) instead.","required":["error"],"properties":{"error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category, e.g. rate_limit_error.","uniqueKey":"error.type","typeLabel":"string"},"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this rather than the human `message`.","enum":["invalid_request_error","invalid_session_label","unauthorized","forbidden","origin_not_allowed","credit_exhausted","key_budget_exceeded","insufficient_quota","rate_limit_exceeded","concurrency_limit_exceeded","daily_cap_exceeded"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"param":{"oneOf":[{"type":"string","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","type":"\u003cstring>","code":"invalid_request_error","param":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"c7ef80b8-a98c-4d8e-9639-6257bc7104be":{"description":"Missing or invalid API key (`code: unauthorized`)","content":{"application/json":{"schema":{"type":"object","description":"OpenAI-compatible error envelope returned by the gateway data plane (401/402/403/429). Control-plane request/resource errors use Problem (application/problem+json) instead.","required":["error"],"properties":{"error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category, e.g. rate_limit_error.","uniqueKey":"error.type","typeLabel":"string"},"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this rather than the human `message`.","enum":["invalid_request_error","invalid_session_label","unauthorized","forbidden","origin_not_allowed","credit_exhausted","key_budget_exceeded","insufficient_quota","rate_limit_exceeded","concurrency_limit_exceeded","daily_cap_exceeded"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"param":{"oneOf":[{"type":"string","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","type":"\u003cstring>","code":"invalid_request_error","param":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"98f99235-42bf-4bfb-81bc-ce4793691e8e":{"description":"Key lacks the required scope or the origin is not allow-listed (`code: forbidden | origin_not_allowed`)","content":{"application/json":{"schema":{"type":"object","description":"OpenAI-compatible error envelope returned by the gateway data plane (401/402/403/429). Control-plane request/resource errors use Problem (application/problem+json) instead.","required":["error"],"properties":{"error":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category, e.g. rate_limit_error.","uniqueKey":"error.type","typeLabel":"string"},"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this rather than the human `message`.","enum":["invalid_request_error","invalid_session_label","unauthorized","forbidden","origin_not_allowed","credit_exhausted","key_budget_exceeded","insufficient_quota","rate_limit_exceeded","concurrency_limit_exceeded","daily_cap_exceeded"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"param":{"oneOf":[{"type":"string","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"Offending parameter when applicable, else null.","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>","type":"\u003cstring>","code":"invalid_request_error","param":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"8fef4c78-11e3-47d3-85f4-d66b250b7ccf":{"apiKey":{"type":"http","scheme":"bearer","description":"Use `Authorization: Bearer pyai_live_...` (or `pyai_test_...`).","scopes":[],"schemeName":"apiKey"}},"ba0f4d3b-c001-406b-aa6e-8db0d6eba5f5":{"xApiKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Header alias for bearer auth on HTTP endpoints. WebSocket auth uses the subprotocol pair `pyai.v1, pyai-key.\u003cAPI_KEY>`.","scopes":[],"schemeName":"xApiKey"}}},"servers":{"0ec3a5f5-8471-4041-8e01-12cfeb17ea9d":{"url":"https://api.pyai.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Use `Authorization: Bearer pyai_live_...` (or `pyai_test_...`).","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Use `Authorization: Bearer pyai_live_...` (or `pyai_test_...`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Header alias for bearer auth on HTTP endpoints. WebSocket auth uses the subprotocol pair `pyai.v1, pyai-key.\u003cAPI_KEY>`.","scopes":[],"schemeName":"xApiKey"},"schema":{"title":"x-api-key","type":"string","description":"Header alias for bearer auth on HTTP endpoints. WebSocket auth uses the subprotocol pair `pyai.v1, pyai-key.\u003cAPI_KEY>`.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"xApiKey","name":"x-api-key"}],"title":"xApiKey"}]},"originalFileLocation":"https://api.pyai.com/openapi.json"},"subdomain":"pyai","siteName":"PyAI Developers","title":"Create an agent profile - PyAI Developers","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T07:09:29.220Z","originalFileLocation":"api-reference/agents/create-an-agent-profile.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 an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.\">\u003cmeta data-mint-head name=\"application-name\" content=\"PyAI Developers\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_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/pyai/TcdC0S0vFDaCWV2B/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create an agent profile - PyAI Developers\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"PyAI Developers\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://pyai.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Create+an+agent+profile\u0026amp;description=Create+an+OPTIONAL+agent+profile+%28persona%2C+**greeting+message**%2C+voice%2C+**language**%2C+recording+disclosure%2C+conversation+knobs%29+so+you+can+reference+it+by+id+in\u0026amp;theme=345b4136ed2cb0b69fa46bb0\u0026amp;signature=aba3a673ca2ee8b4e0d4853ba9f09bff9b72e9ea7843983fcbf321b6b8dc2578\">\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 an agent profile - PyAI Developers\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://pyai.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Create+an+agent+profile\u0026amp;description=Create+an+OPTIONAL+agent+profile+%28persona%2C+**greeting+message**%2C+voice%2C+**language**%2C+recording+disclosure%2C+conversation+knobs%29+so+you+can+reference+it+by+id+in\u0026amp;theme=345b4136ed2cb0b69fa46bb0\u0026amp;signature=aba3a673ca2ee8b4e0d4853ba9f09bff9b72e9ea7843983fcbf321b6b8dc2578\">\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/pyai/TcdC0S0vFDaCWV2B/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"PyAI Developers\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5B5BD6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile\">\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-an-agent-profile.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.pyai.com/#organization\",\"name\":\"PyAI Developers\",\"url\":\"https://docs.pyai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/pyai/WdY9MU3V1Ll4Gm-R/logo/light.svg?fit=max\u0026auto=format\u0026n=WdY9MU3V1Ll4Gm-R\u0026q=85\u0026s=c47abcf1c2ebb1a5b3d736c8048fe048\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.pyai.com#website\",\"name\":\"PyAI Developers\",\"url\":\"https://docs.pyai.com\",\"publisher\":{\"@id\":\"https://docs.pyai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile#webpage\",\"url\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile\",\"name\":\"Create an agent profile\",\"description\":\"Create an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.\",\"dateModified\":\"2026-10-28T07:09:29.220Z\",\"isPartOf\":{\"@id\":\"https://docs.pyai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agents\",\"item\":\"https://docs.pyai.com/api-reference/agents/list-agent-profiles\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create an agent profile\",\"item\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile#apireference\",\"headline\":\"Create an agent profile\",\"name\":\"Create an agent profile\",\"description\":\"Create an OPTIONAL agent profile (persona, greeting message, voice, language, recording disclosure, conversation knobs) so you can reference it by id instead of sending a full configure frame each call. Drive it with wss://api.pyai.com/v1/omni?session_label=agent_… (the profile id doubles as the opaque session label); per-call headers (X-PyAI-Voice, X-PyAI-Persona) and the configure frame override profile config. The engine speaks greeting at turn 0 and consent_line before recording when enabled. Requires the omni:session scope.\",\"url\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile\",\"mainEntityOfPage\":{\"@id\":\"https://docs.pyai.com/api-reference/agents/create-an-agent-profile#webpage\"},\"dateModified\":\"2026-10-28T07:09:29.220Z\",\"publisher\":{\"@id\":\"https://docs.pyai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.pyai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"PyAI Developers\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"PyAI Developers","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/quickstart"}]},{"tab":"API reference","href":"/api-reference","groups":[{"group":"Omni","pages":[{"title":"Read the machine-readable Omni frame contract","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /omni-frames.json","href":"/api-reference/omni/read-the-machine-readable-omni-frame-contract"},{"title":"List Omni call records","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni/calls","href":"/api-reference/omni/list-omni-call-records"},{"title":"Get an Omni call record","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni/calls/{call_id}","href":"/api-reference/omni/get-an-omni-call-record"},{"title":"Download an Omni call recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni/calls/{call_id}/recording","href":"/api-reference/omni/download-an-omni-call-recording"},{"title":"Get an Omni call summary","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni/calls/{call_id}/summary","href":"/api-reference/omni/get-an-omni-call-summary"},{"title":"Get an Omni call transcript","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni/calls/{call_id}/transcript","href":"/api-reference/omni/get-an-omni-call-transcript"},{"title":"Mint an ephemeral Omni session token","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/omni/sessions","href":"/api-reference/omni/mint-an-ephemeral-omni-session-token"},{"title":"Open an Omni voice-agent session (WebSocket)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/omni","href":"/api-reference/omni/open-an-omni-voice-agent-session-websocket"}]},{"group":"MCP","pages":[{"title":"Discover PyAI MCP authorization","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /.well-known/oauth-protected-resource","href":"/api-reference/mcp/discover-pyai-mcp-authorization"},{"title":"Discover authorization for the MCP endpoint","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /.well-known/oauth-protected-resource/mcp","href":"/api-reference/mcp/discover-authorization-for-the-mcp-endpoint"},{"title":"Discover transcription and call-records connector authorization","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /.well-known/oauth-protected-resource/mcp/transcription","href":"/api-reference/mcp/discover-transcription-and-call-records-connector-authorization"},{"title":"Discover OAuth endpoints and S256 PKCE support","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /.well-known/oauth-authorization-server","href":"/api-reference/mcp/discover-oauth-endpoints-and-s256-pkce-support"},{"title":"Register an MCP OAuth public client","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/mcp/register","href":"/api-reference/mcp/register-an-mcp-oauth-public-client"},{"title":"Start browser OAuth consent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /auth/mcp/authorize","href":"/api-reference/mcp/start-browser-oauth-consent"},{"title":"Exchange an authorization code or rotate a refresh token","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/mcp/token","href":"/api-reference/mcp/exchange-an-authorization-code-or-rotate-a-refresh-token"},{"title":"Revoke an MCP OAuth connection using a token","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/mcp/revoke","href":"/api-reference/mcp/revoke-an-mcp-oauth-connection-using-a-token"},{"title":"Transcription and existing call-records MCP endpoint","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /mcp/transcription","href":"/api-reference/mcp/transcription-and-existing-call-records-mcp-endpoint"},{"title":"PyAI MCP Streamable HTTP endpoint","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /mcp","href":"/api-reference/mcp/pyai-mcp-streamable-http-endpoint"}]},{"group":"Cast","pages":[{"title":"Poll a Cast narration render","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/cast/render_jobs/{job_id}","href":"/api-reference/cast/poll-a-cast-narration-render"},{"title":"Download completed Cast narration","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/cast/render_jobs/{job_id}/audio","href":"/api-reference/cast/download-completed-cast-narration"},{"title":"Get live Cast capabilities","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/cast/capabilities","href":"/api-reference/cast/get-live-cast-capabilities"},{"title":"Auto-direct a script","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/cast/direct","href":"/api-reference/cast/auto-direct-a-script"},{"title":"Preview one directed line","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/cast/speech","href":"/api-reference/cast/preview-one-directed-line"},{"title":"Create an asynchronous Cast render","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/cast/render_jobs","href":"/api-reference/cast/create-an-asynchronous-cast-render"}]},{"group":"Integrations","pages":[{"title":"Start a Vercel connection","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/vercel/start","href":"/api-reference/integrations/start-a-vercel-connection"},{"title":"Verify the Vercel authorization callback","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/vercel/exchange","href":"/api-reference/integrations/verify-the-vercel-authorization-callback"},{"title":"Read your existing Vercel connection","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /auth/vercel/configuration/{configurationId}","href":"/api-reference/integrations/read-your-existing-vercel-connection"},{"title":"Read Vercel connection status","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /auth/vercel/requests/{id}","href":"/api-reference/integrations/read-vercel-connection-status"},{"title":"List authorized Vercel projects","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /auth/vercel/requests/{id}/projects","href":"/api-reference/integrations/list-authorized-vercel-projects"},{"title":"Create and install a scoped PyAI project key","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/vercel/requests/{id}/connect","href":"/api-reference/integrations/create-and-install-a-scoped-pyai-project-key"},{"title":"Revoke this integration key and remove its environment variable","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/vercel/requests/{id}/disconnect","href":"/api-reference/integrations/revoke-this-integration-key-and-remove-its-environment-variable"},{"title":"Receive a signed Vercel lifecycle event","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/vercel/webhook","href":"/api-reference/integrations/receive-a-signed-vercel-lifecycle-event"},{"title":"List integration events","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/integrations/events","href":"/api-reference/integrations/list-integration-events"},{"title":"Subscribe a Zapier REST hook","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/integrations/zapier/hooks","href":"/api-reference/integrations/subscribe-a-zapier-rest-hook"},{"title":"Unsubscribe a Zapier REST hook","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/integrations/zapier/hooks/{id}","href":"/api-reference/integrations/unsubscribe-a-zapier-rest-hook"}]},{"group":"Dub","pages":[{"title":"Read editable dubbing passages","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}/editor","href":"/api-reference/dub/read-editable-dubbing-passages"},{"title":"Save transcript, translation and pronunciation edits","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json patch /v1/dub/jobs/{job_id}/editor","href":"/api-reference/dub/save-transcript-translation-and-pronunciation-edits"},{"title":"Regenerate selected passages as a new dub","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/dub/jobs/{job_id}/revisions","href":"/api-reference/dub/regenerate-selected-passages-as-a-new-dub"},{"title":"Export original or translated subtitles","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}/subtitles.{format}","href":"/api-reference/dub/export-original-or-translated-subtitles"},{"title":"Load the original audio for comparison","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}/source","href":"/api-reference/dub/load-the-original-audio-for-comparison"},{"title":"Dubbing availability and languages","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /healthz/dub","href":"/api-reference/dub/dubbing-availability-and-languages"},{"title":"Create a dubbing job","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/dub","href":"/api-reference/dub/create-a-dubbing-job"},{"title":"Get dubbing job status","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}","href":"/api-reference/dub/get-dubbing-job-status"},{"title":"Download dubbed audio","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}/audio","href":"/api-reference/dub/download-dubbed-audio"},{"title":"Download a dubbed video output","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/dub/jobs/{job_id}/video","href":"/api-reference/dub/download-a-dubbed-video-output"}]},{"group":"Trace","pages":[{"title":"Review an uploaded or pasted transcript","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /orgs/{orgId}/trace/uploads/{id}","href":"/api-reference/trace/review-an-uploaded-or-pasted-transcript"},{"title":"Get Trace config for an agent (or the org default)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/config","href":"/api-reference/trace/get-trace-config-for-an-agent-or-the-org-default"},{"title":"Set Trace config for an agent (or the org default)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/trace/config","href":"/api-reference/trace/set-trace-config-for-an-agent-or-the-org-default"},{"title":"List rule packs","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/rule-packs","href":"/api-reference/trace/list-rule-packs"},{"title":"Upload a custom rule pack","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/trace/rule-packs","href":"/api-reference/trace/upload-a-custom-rule-pack"},{"title":"Get a rule pack","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/rule-packs/{id}","href":"/api-reference/trace/get-a-rule-pack"},{"title":"List scanned interactions (scorecards)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/interactions","href":"/api-reference/trace/list-scanned-interactions-scorecards"},{"title":"Get an interaction (the evidence view)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/interactions/{id}","href":"/api-reference/trace/get-an-interaction-the-evidence-view"},{"title":"List violations (findings)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/violations","href":"/api-reference/trace/list-violations-findings"},{"title":"List Tier-2 semantic findings","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/findings","href":"/api-reference/trace/list-tier-2-semantic-findings"},{"title":"Compliance exposure summary","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/exposure","href":"/api-reference/trace/compliance-exposure-summary"},{"title":"Export a privacy-minimized evidence snapshot","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/trace/evidence-snapshot","href":"/api-reference/trace/export-a-privacy-minimized-evidence-snapshot"}]},{"group":"Console creations","pages":[{"title":"Preview current creation rates","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /projects/{projectId}/studio/pricing/{product}","href":"/api-reference/console-creations/preview-current-creation-rates"},{"title":"Get background creation progress","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /projects/{projectId}/creation-jobs/{id}","href":"/api-reference/console-creations/get-background-creation-progress"},{"title":"Start a durable Speech or Transcription job","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /projects/{projectId}/creation-jobs/{id}","href":"/api-reference/console-creations/start-a-durable-speech-or-transcription-job"},{"title":"Restore a background transcription's original recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /projects/{projectId}/creation-jobs/{id}/input","href":"/api-reference/console-creations/restore-a-background-transcriptions-original-recording"},{"title":"Regenerate Dubbing passages and save the revision to My work","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /projects/{projectId}/dub/library/{id}/revisions","href":"/api-reference/console-creations/regenerate-dubbing-passages-and-save-the-revision-to-my-work"}]},{"group":"Identity","pages":[{"title":"Review a CLI login request","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /auth/cli/device","href":"/api-reference/identity/review-a-cli-login-request"},{"title":"Start browser login for the CLI","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/cli/device","href":"/api-reference/identity/start-browser-login-for-the-cli"},{"title":"Approve CLI access to a project","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/cli/device/approve","href":"/api-reference/identity/approve-cli-access-to-a-project"},{"title":"Deny a CLI login request","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/cli/device/deny","href":"/api-reference/identity/deny-a-cli-login-request"},{"title":"Poll and exchange an approved CLI login","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/cli/device/token","href":"/api-reference/identity/poll-and-exchange-an-approved-cli-login"},{"title":"Create an account and organization","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/signup","href":"/api-reference/identity/create-an-account-and-organization"},{"title":"Introspect the calling key (whoami)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/me","href":"/api-reference/identity/introspect-the-calling-key-whoami"}]},{"group":"Call Integrations","pages":[{"title":"Receive Aircall call events","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /public/integrations/calls/aircall/events","href":"/api-reference/call-integrations/receive-aircall-call-events"},{"title":"Receive Dialpad call events","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /public/integrations/calls/dialpad/events","href":"/api-reference/call-integrations/receive-dialpad-call-events"},{"title":"Receive JustCall completed-call events","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /public/integrations/calls/justcall/events","href":"/api-reference/call-integrations/receive-justcall-completed-call-events"}]},{"group":"Sandbox","pages":[{"title":"Mint a sandbox key (no auth)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/sandbox/keys","href":"/api-reference/sandbox/mint-a-sandbox-key-no-auth"}]},{"group":"Startup Program","pages":[{"title":"Apply to PyAI for Startups (no auth)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/startup-program/applications","href":"/api-reference/startup-program/apply-to-pyai-for-startups-no-auth"}]},{"group":"Models","pages":[{"title":"List available models","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/models","href":"/api-reference/models/list-available-models"}]},{"group":"Speech To Text (Hear)","pages":[{"title":"Transcribe audio","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/audio/transcriptions","href":"/api-reference/speech-to-text-hear/transcribe-audio"},{"title":"Stream transcription (WebSocket)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/transcriptions/stream","href":"/api-reference/speech-to-text-hear/stream-transcription-websocket"},{"title":"Get stored Hear vocabulary","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/hear/vocabulary","href":"/api-reference/speech-to-text-hear/get-stored-hear-vocabulary"},{"title":"Set stored Hear vocabulary","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/hear/vocabulary","href":"/api-reference/speech-to-text-hear/set-stored-hear-vocabulary"}]},{"group":"Text To Speech (Speak)","pages":[{"title":"Synthesize speech","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/audio/speech","href":"/api-reference/text-to-speech-speak/synthesize-speech"},{"title":"List voices","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/voices","href":"/api-reference/text-to-speech-speak/list-voices"},{"title":"Get a stock voice","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/voices/{id}","href":"/api-reference/text-to-speech-speak/get-a-stock-voice"},{"title":"Delete a designed voice","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/voices/{id}","href":"/api-reference/text-to-speech-speak/delete-a-designed-voice"},{"title":"Design a voice from a prompt","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/voice/design","href":"/api-reference/text-to-speech-speak/design-a-voice-from-a-prompt"},{"title":"Get design candidates","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/voice/design/{id}","href":"/api-reference/text-to-speech-speak/get-design-candidates"},{"title":"Preview a designed-voice candidate","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/voice/design/{id}/preview/{candidate_id}","href":"/api-reference/text-to-speech-speak/preview-a-designed-voice-candidate"},{"title":"Save a designed voice","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/voice/design/{id}/save","href":"/api-reference/text-to-speech-speak/save-a-designed-voice"}]},{"group":"Agents","pages":[{"title":"List agent profiles","description":"All active agent profiles in your organization. Agent profiles are optional pre-stored Omni session config; they are not required to open an Omni session. Requires the `omni:session` scope.","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/agents","href":"/api-reference/agents/list-agent-profiles"},{"title":"Create an agent profile","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/agents","href":"/api-reference/agents/create-an-agent-profile"},{"title":"Get an agent","description":null,"deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/agents/{id}","href":"/api-reference/agents/get-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/agents/{id}","href":"/api-reference/agents/update-an-agent"},{"title":"Delete an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/agents/{id}","href":"/api-reference/agents/delete-an-agent"},{"title":"Bind tools to an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/agents/{id}/tools","href":"/api-reference/agents/bind-tools-to-an-agent"},{"title":"List tools","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/tools","href":"/api-reference/agents/list-tools"},{"title":"Create or update a custom tool","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/tools","href":"/api-reference/agents/create-or-update-a-custom-tool"},{"title":"Get a tool","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/tools/{id}","href":"/api-reference/agents/get-a-tool"},{"title":"Update a tool","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/tools/{id}","href":"/api-reference/agents/update-a-tool"},{"title":"Delete a custom tool","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/tools/{id}","href":"/api-reference/agents/delete-a-custom-tool"},{"title":"Test a tool configuration","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/tools/{id}/test","href":"/api-reference/agents/test-a-tool-configuration"},{"title":"List recent tool calls","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/tools/calls","href":"/api-reference/agents/list-recent-tool-calls"},{"title":"Get webhook signing secret status","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/webhooks/signing-secret","href":"/api-reference/agents/get-webhook-signing-secret-status"},{"title":"Mint or rotate the webhook signing secret","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/webhooks/signing-secret","href":"/api-reference/agents/mint-or-rotate-the-webhook-signing-secret"},{"title":"Bind knowledge bases to an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/agents/{id}/knowledgebases","href":"/api-reference/agents/bind-knowledge-bases-to-an-agent"},{"title":"Resolve a hosted website widget","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /public/widgets/{publicId}","href":"/api-reference/agents/resolve-a-hosted-website-widget"},{"title":"Mint a hosted widget voice session","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /public/widgets/{publicId}/session","href":"/api-reference/agents/mint-a-hosted-widget-voice-session"}]},{"group":"Clone","pages":[{"title":"List cloned voices","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/voice/clones","href":"/api-reference/clone/list-cloned-voices"},{"title":"Create a cloned voice","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/voice/clones","href":"/api-reference/clone/create-a-cloned-voice"},{"title":"Delete a cloned voice","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/voice/clones/{id}","href":"/api-reference/clone/delete-a-cloned-voice"}]},{"group":"Transcription Jobs","pages":[{"title":"List transcription jobs","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/transcription/jobs","href":"/api-reference/transcription-jobs/list-transcription-jobs"},{"title":"Create an async transcription job","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/transcription/jobs","href":"/api-reference/transcription-jobs/create-an-async-transcription-job"},{"title":"Get a transcription job","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/transcription/jobs/{id}","href":"/api-reference/transcription-jobs/get-a-transcription-job"},{"title":"Cancel a transcription job","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/transcription/jobs/{id}","href":"/api-reference/transcription-jobs/cancel-a-transcription-job"}]},{"group":"Recap","pages":[{"title":"Get Recap config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/recap/config","href":"/api-reference/recap/get-recap-config"},{"title":"Update Recap config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/recap/config","href":"/api-reference/recap/update-recap-config"},{"title":"Get Recap CRM config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/recap/crm-config","href":"/api-reference/recap/get-recap-crm-config"},{"title":"Update Recap CRM config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/recap/crm-config","href":"/api-reference/recap/update-recap-crm-config"},{"title":"List recap records","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/recap/calls","href":"/api-reference/recap/list-recap-records"},{"title":"Get a recap record","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/recap/calls/{call_id}","href":"/api-reference/recap/get-a-recap-record"},{"title":"Manually trigger recap for a call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/recap/calls/{call_id}","href":"/api-reference/recap/manually-trigger-recap-for-a-call"},{"title":"Correct transcript speaker roles","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/recap/calls/{call_id}/transcript/roles","href":"/api-reference/recap/correct-transcript-speaker-roles"}]},{"group":"AMD","pages":[{"title":"Answering-machine detection (WebSocket)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/amd/stream","href":"/api-reference/amd/answering-machine-detection-websocket"},{"title":"Get AMD config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/amd/config","href":"/api-reference/amd/get-amd-config"},{"title":"Set AMD config","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/amd/config","href":"/api-reference/amd/set-amd-config"},{"title":"List AMD decisions","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/amd/calls","href":"/api-reference/amd/list-amd-decisions"},{"title":"Get an AMD decision","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/amd/calls/{call_id}","href":"/api-reference/amd/get-an-amd-decision"}]},{"group":"Interpretation","pages":[{"title":"Open a two-person live interpretation session","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/stream","href":"/api-reference/interpretation/open-a-two-person-live-interpretation-session"},{"title":"Mint a browser interpretation token","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/audio/interpretations/sessions","href":"/api-reference/interpretation/mint-a-browser-interpretation-token"},{"title":"Create a customer call archive","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/audio/interpretations/recordings","href":"/api-reference/interpretation/create-a-customer-call-archive"},{"title":"Upload one party recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/interpretation-recordings/{recording_id}/audio","href":"/api-reference/interpretation/upload-one-party-recording"},{"title":"Save transcripts and finalize a call archive","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /auth/interpretation-recordings/{recording_id}/complete","href":"/api-reference/interpretation/save-transcripts-and-finalize-a-call-archive"},{"title":"List saved Translation calls","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/calls","href":"/api-reference/interpretation/list-saved-translation-calls"},{"title":"Read a saved Translation call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/calls/{call_id}","href":"/api-reference/interpretation/read-a-saved-translation-call"},{"title":"Read original and translated transcripts","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/calls/{call_id}/transcript","href":"/api-reference/interpretation/read-original-and-translated-transcripts"},{"title":"Read Translation call and transfer events","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/calls/{call_id}/events","href":"/api-reference/interpretation/read-translation-call-and-transfer-events"},{"title":"Play or download a Translation recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/audio/interpretations/calls/{call_id}/recording","href":"/api-reference/interpretation/play-or-download-a-translation-recording"}]},{"group":"Knowledge Bases","pages":[{"title":"List knowledge bases","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/knowledgebases","href":"/api-reference/knowledge-bases/list-knowledge-bases"},{"title":"Create a knowledge base","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/knowledgebases","href":"/api-reference/knowledge-bases/create-a-knowledge-base"},{"title":"List org-default KB bindings","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/knowledgebases/default","href":"/api-reference/knowledge-bases/list-org-default-kb-bindings"},{"title":"Set org-default KB bindings","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/knowledgebases/default","href":"/api-reference/knowledge-bases/set-org-default-kb-bindings"},{"title":"Get a knowledge base (with documents)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/knowledgebases/{id}","href":"/api-reference/knowledge-bases/get-a-knowledge-base-with-documents"},{"title":"Delete a knowledge base","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/knowledgebases/{id}","href":"/api-reference/knowledge-bases/delete-a-knowledge-base"},{"title":"Rename a knowledge base","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json patch /v1/knowledgebases/{id}","href":"/api-reference/knowledge-bases/rename-a-knowledge-base"},{"title":"List documents in a knowledge base","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/knowledgebases/{id}/documents","href":"/api-reference/knowledge-bases/list-documents-in-a-knowledge-base"},{"title":"Add a document (file, URL, or text)","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/knowledgebases/{id}/documents","href":"/api-reference/knowledge-bases/add-a-document-file-url-or-text"},{"title":"Crawl a public website into a knowledge base","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/knowledgebases/{id}/crawls","href":"/api-reference/knowledge-bases/crawl-a-public-website-into-a-knowledge-base"},{"title":"Remove a document","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/knowledgebases/{id}/documents/{docId}","href":"/api-reference/knowledge-bases/remove-a-document"},{"title":"Edit a pasted-text document","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json patch /v1/knowledgebases/{id}/documents/{docId}","href":"/api-reference/knowledge-bases/edit-a-pasted-text-document"},{"title":"Inspect a document's extracted content","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/knowledgebases/{id}/documents/{docId}/content","href":"/api-reference/knowledge-bases/inspect-a-documents-extracted-content"},{"title":"Retry document ingestion","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/knowledgebases/{id}/documents/{docId}/retry","href":"/api-reference/knowledge-bases/retry-document-ingestion"}]},{"group":"Telephony","pages":[{"title":"List number compliance cases","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/compliance-cases","href":"/api-reference/telephony/list-number-compliance-cases"},{"title":"Start a number compliance or porting case","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases","href":"/api-reference/telephony/start-a-number-compliance-or-porting-case"},{"title":"Get a number compliance case","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/compliance-cases/{id}","href":"/api-reference/telephony/get-a-number-compliance-case"},{"title":"Compute the current blocking checklist","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/checklist","href":"/api-reference/telephony/compute-the-current-blocking-checklist"},{"title":"Create a short-lived document upload grant","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/uploads:grant","href":"/api-reference/telephony/create-a-short-lived-document-upload-grant"},{"title":"Register document upload metadata","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/uploads","href":"/api-reference/telephony/register-document-upload-metadata"},{"title":"Create a short-lived clean-document download grant","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/uploads/{uploadId}/download:grant","href":"/api-reference/telephony/create-a-short-lived-clean-document-download-grant"},{"title":"Run document extraction","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/extractions","href":"/api-reference/telephony/run-document-extraction"},{"title":"Correct an extracted field","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/corrections","href":"/api-reference/telephony/correct-an-extracted-field"},{"title":"Sign a required attestation","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/attestations","href":"/api-reference/telephony/sign-a-required-attestation"},{"title":"Human-approve and submit for network review","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/submit","href":"/api-reference/telephony/human-approve-and-submit-for-network-review"},{"title":"Cancel a number compliance case","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance-cases/{id}/cancel","href":"/api-reference/telephony/cancel-a-number-compliance-case"},{"title":"List normalized network status","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/compliance-cases/{id}/network-operations","href":"/api-reference/telephony/list-normalized-network-status"},{"title":"Search available numbers","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/available","href":"/api-reference/telephony/search-available-numbers"},{"title":"List your numbers","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/numbers","href":"/api-reference/telephony/list-your-numbers"},{"title":"Provision (buy) a number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/numbers","href":"/api-reference/telephony/provision-buy-a-number"},{"title":"Read a saved number order","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/number-orders/{id}","href":"/api-reference/telephony/read-a-saved-number-order"},{"title":"Confirm a saved number order","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/number-orders/{id}/reconcile","href":"/api-reference/telephony/confirm-a-saved-number-order"},{"title":"Read an explicit managed inbound binding","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/numbers/{id}/inbound-binding","href":"/api-reference/telephony/read-an-explicit-managed-inbound-binding"},{"title":"Set an explicit managed inbound binding","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/telephony/numbers/{id}/inbound-binding","href":"/api-reference/telephony/set-an-explicit-managed-inbound-binding"},{"title":"Route a number to an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/numbers/{id}/assign","href":"/api-reference/telephony/route-a-number-to-an-agent"},{"title":"Release a number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/telephony/numbers/{id}","href":"/api-reference/telephony/release-a-number"},{"title":"Get outbound compliance policy","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/compliance/policy","href":"/api-reference/telephony/get-outbound-compliance-policy"},{"title":"Configure outbound compliance policy","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json put /v1/telephony/compliance/policy","href":"/api-reference/telephony/configure-outbound-compliance-policy"},{"title":"Record destination consent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance/consents","href":"/api-reference/telephony/record-destination-consent"},{"title":"Suppress an outbound destination","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/compliance/suppressions","href":"/api-reference/telephony/suppress-an-outbound-destination"},{"title":"List caller identity readiness","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/compliance/caller-identities","href":"/api-reference/telephony/list-caller-identity-readiness"},{"title":"Create a managed human calling session","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/browser-sessions","href":"/api-reference/telephony/create-a-managed-human-calling-session"},{"title":"Start a human call transfer","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls/{id}/transfers","href":"/api-reference/telephony/start-a-human-call-transfer"},{"title":"Complete a connected warm transfer","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls/{id}/transfers/{transfer_id}/complete","href":"/api-reference/telephony/complete-a-connected-warm-transfer"},{"title":"Cancel a warm transfer","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls/{id}/transfers/{transfer_id}/cancel","href":"/api-reference/telephony/cancel-a-warm-transfer"},{"title":"Read a private human-call recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/calls/{id}/recording","href":"/api-reference/telephony/read-a-private-human-call-recording"},{"title":"Erase a human-call recording","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/telephony/calls/{id}/recording","href":"/api-reference/telephony/erase-a-human-call-recording"},{"title":"List telephony calls","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/calls","href":"/api-reference/telephony/list-telephony-calls"},{"title":"Start an outbound agent call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls","href":"/api-reference/telephony/start-an-outbound-agent-call"},{"title":"Decide a pending inbound admission","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls/{id}/admission","href":"/api-reference/telephony/decide-a-pending-inbound-admission"},{"title":"Request call termination","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/telephony/calls/{id}/hangup","href":"/api-reference/telephony/request-call-termination"},{"title":"Get an outbound call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/telephony/calls/{id}","href":"/api-reference/telephony/get-an-outbound-call"}]},{"group":"WhatsApp","pages":[{"title":"List your WhatsApp numbers","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/whatsapp/numbers","href":"/api-reference/whatsapp/list-your-whatsapp-numbers"},{"title":"Register a WhatsApp Business number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/numbers","href":"/api-reference/whatsapp/register-a-whatsapp-business-number"},{"title":"Get a WhatsApp number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/whatsapp/numbers/{id}","href":"/api-reference/whatsapp/get-a-whatsapp-number"},{"title":"Release a WhatsApp number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json delete /v1/whatsapp/numbers/{id}","href":"/api-reference/whatsapp/release-a-whatsapp-number"},{"title":"Route a WhatsApp number to an agent","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/numbers/{id}/assign","href":"/api-reference/whatsapp/route-a-whatsapp-number-to-an-agent"},{"title":"Enable or disable calling on a WhatsApp number","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/numbers/{id}/calling","href":"/api-reference/whatsapp/enable-or-disable-calling-on-a-whatsapp-number"},{"title":"Check call permission for a user","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/whatsapp/call-permissions","href":"/api-reference/whatsapp/check-call-permission-for-a-user"},{"title":"Ask a user for permission to call them","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/call-permissions","href":"/api-reference/whatsapp/ask-a-user-for-permission-to-call-them"},{"title":"List WhatsApp calls","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/whatsapp/calls","href":"/api-reference/whatsapp/list-whatsapp-calls"},{"title":"Place a WhatsApp call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/calls","href":"/api-reference/whatsapp/place-a-whatsapp-call"},{"title":"Get a WhatsApp call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json get /v1/whatsapp/calls/{id}","href":"/api-reference/whatsapp/get-a-whatsapp-call"},{"title":"Hang up a WhatsApp call","deprecated":null,"version":null,"openapi":"https://api.pyai.com/openapi.json post /v1/whatsapp/calls/{id}/terminate","href":"/api-reference/whatsapp/hang-up-a-whatsapp-call"}]}]}]},"basePath":"","title":"Create an agent profile - PyAI Developers","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","Page-BAvA99GL.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}