{
"message": [
"config.agent.instructions should not be empty",
"config.agent.instructions must be a string"
],
"error": "Bad Request",
"statusCode": 400
}
Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later.
The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.
POST
/
realtime-assistants
/
adhoc
/
session
Start a session from inline config
curl --request POST \ --url https://api.upliftai.org/v1/realtime-assistants/adhoc/session \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "participantName": "ayesha-web", "roomName": "shifa-clinic", "config": { "agent": { "instructions": "آپ شفا کلینک کی ہیلپ ڈیسک ایجنٹ ہیں۔ ویب وزیٹر کے سوالات کا جواب دیں: اوقاتِ کار، ڈاکٹروں کی دستیابی، اور اپائنٹمنٹ بکنگ۔ صرف نستعلیق اردو میں جواب دیں۔", "initialGreeting": true, "greetingInstructions": "السلام علیکم کہیں، شفا کلینک کا تعارف کروائیں، پھر پوچھیں کہ کس طرح مدد کر سکتے ہیں۔" }, "session": { "ttl": 900 }, "stt": { "default": { "provider": "soniox", "model": "stt-rt-preview", "language": "ur" } }, "tts": { "default": { "provider": "upliftai", "voiceId": "v_meklc281", "outputFormat": "MP3_22050_32" } }, "llm": { "default": { "provider": "google", "model": "gemini-2.5-flash" } } }}'
import requests
url = "https://api.upliftai.org/v1/realtime-assistants/adhoc/session"
payload = {
"participantName": "ayesha-web",
"roomName": "shifa-clinic",
"config": {
"agent": {
"instructions": "آپ شفا کلینک کی ہیلپ ڈیسک ایجنٹ ہیں۔ ویب وزیٹر کے سوالات کا جواب دیں: اوقاتِ کار، ڈاکٹروں کی دستیابی، اور اپائنٹمنٹ بکنگ۔ صرف نستعلیق اردو میں جواب دیں۔",
"initialGreeting": True,
"greetingInstructions": "السلام علیکم کہیں، شفا کلینک کا تعارف کروائیں، پھر پوچھیں کہ کس طرح مدد کر سکتے ہیں۔"
},
"session": { "ttl": 900 },
"stt": { "default": {
"provider": "soniox",
"model": "stt-rt-preview",
"language": "ur"
} },
"tts": { "default": {
"provider": "upliftai",
"voiceId": "v_meklc281",
"outputFormat": "MP3_22050_32"
} },
"llm": { "default": {
"provider": "google",
"model": "gemini-2.5-flash"
} }
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
participantName: 'ayesha-web',
roomName: 'shifa-clinic',
config: {
agent: {
instructions: 'آپ شفا کلینک کی ہیلپ ڈیسک ایجنٹ ہیں۔ ویب وزیٹر کے سوالات کا جواب دیں: اوقاتِ کار، ڈاکٹروں کی دستیابی، اور اپائنٹمنٹ بکنگ۔ صرف نستعلیق اردو میں جواب دیں۔',
initialGreeting: true,
greetingInstructions: 'السلام علیکم کہیں، شفا کلینک کا تعارف کروائیں، پھر پوچھیں کہ کس طرح مدد کر سکتے ہیں۔'
},
session: {ttl: 900},
stt: {default: {provider: 'soniox', model: 'stt-rt-preview', language: 'ur'}},
tts: {
default: {provider: 'upliftai', voiceId: 'v_meklc281', outputFormat: 'MP3_22050_32'}
},
llm: {default: {provider: 'google', model: 'gemini-2.5-flash'}}
}
})
};
fetch('https://api.upliftai.org/v1/realtime-assistants/adhoc/session', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
{
"message": [
"config.agent.instructions should not be empty",
"config.agent.instructions must be a string"
],
"error": "Bad Request",
"statusCode": 400
}
The room this token opens. Server-generated — treat it as opaque.
{"docsConfig":{"theme":"mint","$schema":"https://leaves.mintlify.com/schema/docs.json","name":"Uplift AI API Docs","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9","dark":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9"},"favicon":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/favicon.ico?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=a680f5e0b8dc59015e866648796975b1","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"mailto:founders@upliftai.org","label":"Support"}],"primary":{"type":"button","label":"Sign Up","href":"https://upliftai.org"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/upliftai"}},"integrations":{"posthog":{"apiKey":"phc_EGK5H7jrhZrIhLXWfAWCmjjljJQwF6ejp1P73EtmG7q","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upliftai","hasAudioNarration":false,"actualSubdomain":"upliftai","customDomains":["docs.upliftai.org"],"gitSource":{"type":"github","owner":"uplift-initiative","repo":"runtime-api-mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae19c28ba4b20fd94ecdb26","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Voice Agents","count":81},{"language":"default","tag":"API Reference","count":51},{"language":"default","tag":"Orator API","count":25},{"language":"default","tag":"SDKs","count":18},{"language":"default","tag":"Assistants","count":16},{"language":"default","tag":"Campaigns","count":11},{"language":"default","tag":"Contacts","count":11},{"language":"default","tag":"Orator REST API","count":9},{"language":"default","tag":"Node.js SDK","count":8},{"language":"default","tag":"Campaign outcomes","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"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":"editor-metadata","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},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".urdu{font-family:'Noto Nastaliq Urdu', sans-serif;font-size:1.2em;line-height:1.5em;text-align:justify;direction:rtl;unicode-bidi:embed;font-weight:normal;font-style:normal;font-variant:normal;text-transform:none}"}],"page":{"pagePath":"api-reference/starting-a-conversation/start-a-session-from-inline-config","slug":"/api-reference/starting-a-conversation/start-a-session-from-inline-config","pageMetadata":{"title":"Start a session from inline config","description":"Identical to [Create a web session token](/api-reference/starting-a-conversation/create-a-web-session-token) — you get a LiveKit `wsUrl` and token, and everything on that page applies. The difference: the assistant is created on the fly from the `config` you send, instead of using a stored id. It stays hidden from the stored-assistant routes and **is gone five hours later**.\n\nThe inline `config` follows the same rules as [Create an assistant](/api-reference/assistants/create-an-assistant): provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/adhoc/session","href":"/api-reference/starting-a-conversation/start-a-session-from-inline-config","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Identical to \", _jsx(_components.a, {\n href: \"/api-reference/starting-a-conversation/create-a-web-session-token\",\n children: \"Create a web session token\"\n }), \" — you get a LiveKit \", _jsx(_components.code, {\n children: \"wsUrl\"\n }), \" and token, and everything on that page applies. The difference: the assistant is created on the fly from the \", _jsx(_components.code, {\n children: \"config\"\n }), \" you send, instead of using a stored id. It stays hidden from the stored-assistant routes and \", _jsx(_components.strong, {\n children: \"is gone five hours later\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The inline \", _jsx(_components.code, {\n children: \"config\"\n }), \" follows the same rules as \", _jsx(_components.a, {\n href: \"/api-reference/assistants/create-an-assistant\",\n children: \"Create an assistant\"\n }), \": provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Start a session from inline config","description":"Identical to [Create a web session token](/api-reference/starting-a-conversation/create-a-web-session-token) — you get a LiveKit `wsUrl` and token, and everything on that page applies. The difference: the assistant is created on the fly from the `config` you send, instead of using a stored id. It stays hidden from the stored-assistant routes and **is gone five hours later**.\n\nThe inline `config` follows the same rules as [Create an assistant](/api-reference/assistants/create-an-assistant): provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/adhoc/session","href":"/api-reference/starting-a-conversation/start-a-session-from-inline-config","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upliftai/ed1a602c792dd94e/data/voices.js"],"openApiReferenceData":{"operation":{"operationId":"createAdhocSession","tags":["Starting a conversation"],"summary":"Start a session from inline config","description":"Identical to [Create a web session token](/api-reference/starting-a-conversation/create-a-web-session-token) — you get a LiveKit `wsUrl` and token, and everything on that page applies. The difference: the assistant is created on the fly from the `config` you send, instead of using a stored id. It stays hidden from the stored-assistant routes and **is gone five hours later**.\n\nThe inline `config` follows the same rules as [Create an assistant](/api-reference/assistants/create-an-assistant): provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.","requestBody":"44f68a50-df6e-47d6-98eb-852becdd8c18","responses":{"200":"5011fff8-4da8-402f-a3e8-b33c000afbac","400":"3b084a3e-a1ad-42de-a0fd-6f2381928776","401":"748bc710-c313-4482-922e-1a515c8bb575","402":"0fa7af2e-1970-42aa-aef2-9c2b2ceaebae","403":"bf423ed4-dec7-4cad-9be0-435308b2f576"},"method":"post","type":"path","servers":["f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef"],"security":["73bac4ee-98c5-4fa2-834c-9f180d41c637"],"path":"/realtime-assistants/adhoc/session","baseUrlOptions":["https://api.upliftai.org/v1"],"title":"Start a session from inline config","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"participantName":{"type":"string","minLength":1,"description":"Identity your client joins the room under.","isRequired":true,"uniqueKey":"participantName","typeLabel":"string"},"config":{"type":"object","additionalProperties":true,"description":"Keys beyond those listed are stored and returned unchanged.","properties":{"agent":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System prompt. For Urdu assistants, tell the model to reply in Nastaliq script — otherwise it tends to answer in Roman Urdu.","isRequired":true,"uniqueKey":"config.agent.instructions","typeLabel":"string"},"initialGreeting":{"type":"boolean","default":false,"description":"Whether the assistant speaks first instead of waiting for the caller.","uniqueKey":"config.agent.initialGreeting","typeLabel":"boolean"},"greetingInstructions":{"type":"string","description":"Describe how the agent should greet — it uses the prompt to come up with the opening line, so you can say \"Say salam and confirm you are talking to the right person.\" Ignored unless `initialGreeting` is true.","uniqueKey":"config.agent.greetingInstructions","typeLabel":"string"},"tools":{"type":"array","description":"A tool with no `execution` is a client tool: we deliver the call to your browser client over the session, with the tool name as the RPC method. A tool whose `execution` points at a tool endpoint connection goes to that endpoint instead, on phone calls and web sessions alike.","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"description":"What the tool does. The model picks the tool from this text.","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].description","typeLabel":"string"},"parameters":{"type":"object","description":"JSON Schema for the tool's arguments.","properties":{"type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.type","typeLabel":"string"},"properties":{"type":"object","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.properties","typeLabel":"object"},"required":{"type":"array","items":{"type":"string","uniqueKey":"config.agent.tools.items.[INDEX].parameters.required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.agent.tools.items.[INDEX].parameters.required","typeLabel":"string[]"}},"required":["type","properties"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters","typeLabel":"object"},"timeout":{"type":"number","minimum":0,"description":"Seconds to wait for a client tool's handler before the assistant moves on. Default 10. Webhook tools always get 10 seconds.","uniqueKey":"config.agent.tools.items.[INDEX].timeout","typeLabel":"number"},"execution":{"type":"object","description":"Where the tool runs. Omit it for a client tool, which your web page or mobile app executes over the session. Set `type: tool_endpoint` with the id of a tool endpoint you added on the [portal](https://upliftai.org/app/calling/webhooks) to have the platform POST the call to your server instead. See [Webhook tools](/voice-agents/tools/webhook-tools).","properties":{"type":{"type":"string","enum":["client_rpc","tool_endpoint"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].execution.type","typeLabel":"enum\u003cstring>"},"connectionId":{"type":"string","description":"Required when `type` is `tool_endpoint`. The id of a tool endpoint in this project, from the [portal](https://upliftai.org/app/calling/webhooks). A webhook's id is rejected at call time. Not checked on create: a missing or wrong id surfaces as an error result on the call, not a 400.","uniqueKey":"config.agent.tools.items.[INDEX].execution.connectionId","typeLabel":"string"}},"required":["type"],"uniqueKey":"config.agent.tools.items.[INDEX].execution","typeLabel":"object"}},"required":["name","description","parameters"],"uniqueKey":"config.agent.tools.items.[INDEX]","typeLabel":"object"},"uniqueKey":"config.agent.tools","typeLabel":"object[]"}},"required":["instructions"],"isRequired":true,"uniqueKey":"config.agent","typeLabel":"object"},"grading":{"type":"object","description":"Assistant-level scorecard. Every non-campaign call of this assistant — web, inbound, raw API dial — is graded against it; campaign calls use the campaign's own scorecard instead. See [Scorecards](/voice-agents/assistants/scorecards). A `scorecard` that is not an object, or whose points don't total 100, is a 400.","properties":{"scorecard":{"type":"object","description":"The rubric every call on this campaign is graded against. It freezes once any call has been graded, so revise it before launching.","properties":{"rubricVersionId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rubricVersionId","typeLabel":"string"},"rules":{"type":"array","minItems":1,"description":"Rule ids must be unique and their `points` must total exactly 100.","items":{"type":"object","properties":{"ruleId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].ruleId","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].title","typeLabel":"string"},"instruction":{"type":"string","minLength":1,"description":"What the grader looks for in the transcript to award this rule.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].instruction","typeLabel":"string"},"scoringType":{"type":"string","enum":["binary"],"description":"Each rule is earned in full or not at all.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].scoringType","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].points","typeLabel":"integer"},"evidenceRequired":{"type":"boolean","description":"When true, the grader must cite a transcript quote to award the rule.","uniqueKey":"config.grading.scorecard.rules.items.[INDEX].evidenceRequired","typeLabel":"boolean"}},"required":["ruleId","title","instruction","scoringType","points"],"uniqueKey":"config.grading.scorecard.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"config.grading.scorecard.rules","typeLabel":"object[]"}},"required":["rubricVersionId","rules"],"uniqueKey":"config.grading.scorecard","typeLabel":"object"}},"uniqueKey":"config.grading","typeLabel":"object"},"noiseCancellation":{"type":"object","description":"Cleans the caller's audio before speech-to-text. `enabled` is required, and an unknown `model` is a 400.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.noiseCancellation.enabled","typeLabel":"boolean"},"model":{"type":"string","enum":["quail_vf_s","quail_vf_l","quail_l"],"default":"quail_vf_s","uniqueKey":"config.noiseCancellation.model","typeLabel":"enum\u003cstring>"},"level":{"type":"number","default":0.1,"description":"Suppression strength. Stronger settings clipped short Urdu backchannels, which is why the default is low.","uniqueKey":"config.noiseCancellation.level","typeLabel":"number"}},"required":["enabled"],"uniqueKey":"config.noiseCancellation","typeLabel":"object"},"backgroundNoise":{"type":"object","description":"Plays ambient room sound under the call. `enabled` is required.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.backgroundNoise.enabled","typeLabel":"boolean"}},"required":["enabled"],"uniqueKey":"config.backgroundNoise","typeLabel":"object"},"session":{"type":"object","properties":{"ttl":{"type":"integer","minimum":1,"default":600,"description":"Lifetime in seconds of each web session's join token. Caps how long a client has to connect, not how long a call may run.","uniqueKey":"config.session.ttl","typeLabel":"integer"},"roomPrefix":{"type":"string","maxLength":32,"description":"Cosmetic prefix on generated room names. The server appends the session id.","uniqueKey":"config.session.roomPrefix","typeLabel":"string"}},"uniqueKey":"config.session","typeLabel":"object"},"stt":{"type":"object","description":"`default` is the only supported key today (same for `tts`/`llm`).","properties":{"default":{"oneOf":[{"type":"object","title":"Soniox","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`stt-rt-v4` (default) or `stt-rt-v5`.","example":"stt-rt-v4","uniqueKey":"config.stt.default.oneOf.0.model","typeLabel":"string"},"language":{"type":"string","description":"Bias hint, not a hard filter — language identification stays on, so other languages in the audio are still recognized. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.0.language","typeLabel":"string"},"context":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.0.context","typeLabel":"string"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"description":"How hard Soniox cuts the wait between the caller stopping and the final transcript. Higher is faster, with a small risk of ending a turn at a pause. Omit for the Soniox default.","example":1,"uniqueKey":"config.stt.default.oneOf.0.endpointLatencyAdjustmentLevel","typeLabel":"integer"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"description":"How readily Soniox ends a turn. Higher ends turns sooner. Omit for the Soniox default.","uniqueKey":"config.stt.default.oneOf.0.endpointSensitivity","typeLabel":"number"},"maxEndpointDelayMs":{"type":"integer","minimum":500,"maximum":3000,"description":"The longest Soniox waits after the caller stops before it ends the turn. Omit for the Soniox default (2000).","uniqueKey":"config.stt.default.oneOf.0.maxEndpointDelayMs","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0","typeLabel":"Soniox · object"},{"type":"object","title":"Deepgram","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["deepgram"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`nova-3` (default) or `nova-2`.","example":"nova-3","uniqueKey":"config.stt.default.oneOf.1.model","typeLabel":"string"},"language":{"type":"string","description":"Defaults to `multi` (multilingual).","example":"multi","uniqueKey":"config.stt.default.oneOf.1.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Deepgram key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1","typeLabel":"Deepgram · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `whisper-1`.","example":"whisper-1","uniqueKey":"config.stt.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.2.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.2.prompt","typeLabel":"string"},"useRealtime":{"type":"boolean","description":"Use OpenAI's realtime transcription. Defaults to false.","uniqueKey":"config.stt.default.oneOf.2.useRealtime","typeLabel":"boolean"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2","typeLabel":"OpenAI · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`whisper-large-v3-turbo` (default), `whisper-large-v3`, or `distil-whisper-large-v3-en`.","example":"whisper-large-v3-turbo","uniqueKey":"config.stt.default.oneOf.3.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.3.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.3.prompt","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3","typeLabel":"Groq · object"},{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`large-v3`.","example":"large-v3","uniqueKey":"config.stt.default.oneOf.4.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.4.language","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4","typeLabel":"Uplift AI · object"}],"isRequired":true,"uniqueKey":"config.stt.default","typeLabel":"Soniox · object | Deepgram · object | OpenAI · object | Groq · object | Uplift AI · object"}},"required":["default"],"uniqueKey":"config.stt","typeLabel":"object"},"tts":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"Pick an id from the [voices gallery](/orator_voices) — 80+ voices tuned for Urdu and regional languages.","example":"helpdesk-agent","isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.voiceId","typeLabel":"string"},"outputFormat":{"type":"string","description":"Defaults to `MP3_22050_32`.","example":"MP3_22050_32","uniqueKey":"config.tts.default.oneOf.0.outputFormat","typeLabel":"string"},"speed":{"type":"number","minimum":0.5,"maximum":2,"default":1,"description":"How fast the voice speaks. `1` is the normal rate, `0.5` is half the speed and `2` is twice as fast. A value outside 0.5 to 2 is not rejected: the call speaks at the normal rate.","example":1,"uniqueKey":"config.tts.default.oneOf.0.speed","typeLabel":"number"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0","typeLabel":"Uplift AI · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `gpt-4o-mini-tts`.","example":"gpt-4o-mini-tts","uniqueKey":"config.tts.default.oneOf.1.model","typeLabel":"string"},"voiceId":{"type":"string","description":"An OpenAI voice name. Defaults to `alloy`.","example":"alloy","uniqueKey":"config.tts.default.oneOf.1.voiceId","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Soniox","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"A Soniox voice name.","example":"Maya","isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.voiceId","typeLabel":"string"},"model":{"type":"string","description":"Defaults to `tts-rt-v1`.","example":"tts-rt-v1","uniqueKey":"config.tts.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.tts.default.oneOf.2.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2","typeLabel":"Soniox · object"}],"isRequired":true,"uniqueKey":"config.tts.default","typeLabel":"Uplift AI · object | OpenAI · object | Soniox · object"}},"required":["default"],"uniqueKey":"config.tts","typeLabel":"object"},"llm":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Google Gemini","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["google"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gemini-3.5-flash`, `gemini-3.1-flash-lite`, or `gemini-2.5-flash`.","example":"gemini-2.5-flash","isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.model","typeLabel":"string"},"thinkingLevel":{"type":"string","enum":["minimal","low","medium","high"],"description":"Gemini 3.x models only. Reasoning depth per response — each step up adds latency, so `high` is rarely right for live calls. Absent behaves as the voice-tuned `low`.","uniqueKey":"config.llm.default.oneOf.0.thinkingLevel","typeLabel":"enum\u003cstring>"},"thinkingBudget":{"type":"integer","minimum":-1,"maximum":24576,"description":"Gemini 2.5 models only (not `-lite`). Maximum thinking tokens per response: `0` turns thinking off, `-1` lets the model decide, `1`–`24576` sets an explicit cap. Absent uses a voice-tuned low cap (512).","uniqueKey":"config.llm.default.oneOf.0.thinkingBudget","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Gemini key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0","typeLabel":"Google Gemini · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-5.4-nano`, `gpt-5.4-mini`, or `gpt-4o-mini`.","example":"gpt-5.4-nano","isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["none","low","medium","high","xhigh"],"description":"gpt-5.x models. Each step up adds latency per reply. Unset runs the model without a reasoning phase (classic `temperature: 0`).","uniqueKey":"config.llm.default.oneOf.1.reasoningEffort","typeLabel":"enum\u003cstring>"},"verbosity":{"type":"string","enum":["low","medium","high"],"description":"Answer-length control, gpt-5.x models only.","uniqueKey":"config.llm.default.oneOf.1.verbosity","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Cerebras","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["cerebras"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-oss-120b`.","example":"gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["low","medium","high"],"description":"Supported by the reasoning models (`gpt-oss-120b`). `none` is rejected by Cerebras; `verbosity` is not supported on any Cerebras model.","uniqueKey":"config.llm.default.oneOf.2.reasoningEffort","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own Cerebras key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2","typeLabel":"Cerebras · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`openai/gpt-oss-120b` or `openai/gpt-oss-20b`. No reasoning or verbosity knobs on this provider.","example":"openai/gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.model","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3","typeLabel":"Groq · object"}],"isRequired":true,"uniqueKey":"config.llm.default","typeLabel":"Google Gemini · object | OpenAI · object | Cerebras · object | Groq · object"}},"required":["default"],"uniqueKey":"config.llm","typeLabel":"object"}},"required":["agent"],"isRequired":true,"uniqueKey":"config","typeLabel":"object"},"roomName":{"type":"string","description":"Cosmetic room prefix, truncated to its first 15 characters. Overrides `config.session.roomPrefix`; without either, the prefix is `adhoc`.","uniqueKey":"roomName","typeLabel":"string"}},"required":["participantName","config"],"uniqueKey":"","typeLabel":"object"},"example":{"participantName":"ayesha-web","roomName":"shifa-clinic","config":{"agent":{"instructions":"آپ شفا کلینک کی ہیلپ ڈیسک ایجنٹ ہیں۔ ویب وزیٹر کے سوالات کا جواب دیں: اوقاتِ کار، ڈاکٹروں کی دستیابی، اور اپائنٹمنٹ بکنگ۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، شفا کلینک کا تعارف کروائیں، پھر پوچھیں کہ کس طرح مدد کر سکتے ہیں۔"},"session":{"ttl":900},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}}},"examples":{"Example":{"title":"Example","value":{"participantName":"ayesha-web","roomName":"shifa-clinic","config":{"agent":{"instructions":"آپ شفا کلینک کی ہیلپ ڈیسک ایجنٹ ہیں۔ ویب وزیٹر کے سوالات کا جواب دیں: اوقاتِ کار، ڈاکٹروں کی دستیابی، اور اپائنٹمنٹ بکنگ۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، شفا کلینک کا تعارف کروائیں، پھر پوچھیں کہ کس طرح مدد کر سکتے ہیں۔"},"session":{"ttl":900},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"5011fff8-4da8-402f-a3e8-b33c000afbac":{"description":"Credentials for the browser client to join with.","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"LiveKit access token. Hand it to a LiveKit client SDK along with `wsUrl`.","uniqueKey":"token","typeLabel":"string"},"wsUrl":{"type":"string","format":"uri","description":"LiveKit WebSocket URL the client connects to.","uniqueKey":"wsUrl","typeLabel":"string\u003curi>"},"roomName":{"type":"string","description":"The room this token opens. Server-generated — treat it as opaque.","uniqueKey":"roomName","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"token":"eyJhbGciOiJIUzI1NiJ9.eyJ2aWRlbyI6eyJyb29tSm9pbiI6dHJ1ZSwicm9vbSI6…","wsUrl":"wss://upliftai-prod-yd34to8b.livekit.cloud","roomName":"shifa-clinic-835050e4-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},"examples":{"Example":{"title":"Example","value":{"token":"eyJhbGciOiJIUzI1NiJ9.eyJ2aWRlbyI6eyJyb29tSm9pbiI6dHJ1ZSwicm9vbSI6…","wsUrl":"wss://upliftai-prod-yd34to8b.livekit.cloud","roomName":"shifa-clinic-835050e4-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}}},"exampleType":"examples"}},"exampleType":"examples"},"3b084a3e-a1ad-42de-a0fd-6f2381928776":{"description":"Validation failed.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":["config.agent.instructions should not be empty","config.agent.instructions must be a string"],"error":"Bad Request","statusCode":400},"examples":{"Example":{"title":"Example","value":{"message":["config.agent.instructions should not be empty","config.agent.instructions must be a string"],"error":"Bad Request","statusCode":400}}},"exampleType":"examples"}},"exampleType":"examples"},"748bc710-c313-4482-922e-1a515c8bb575":{"description":"A bearer key was sent but is not recognized.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"invalid authorization","error":"Unauthorized","statusCode":401},"examples":{"Example":{"title":"Example","value":{"message":"invalid authorization","error":"Unauthorized","statusCode":401}}},"exampleType":"examples"}},"exampleType":"examples"},"0fa7af2e-1970-42aa-aef2-9c2b2ceaebae":{"description":"The organization is out of credits. No session is created.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Insufficient credits to start a realtime session","error":"Payment Required","statusCode":402},"examples":{"Example":{"title":"Example","value":{"message":"Insufficient credits to start a realtime session","error":"Payment Required","statusCode":402}}},"exampleType":"examples"}},"exampleType":"examples"},"bf423ed4-dec7-4cad-9be0-435308b2f576":{"description":"No API key sent, or the key lacks permission for this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Forbidden resource","error":"Forbidden","statusCode":403},"examples":{"Example":{"title":"Example","value":{"message":"Forbidden resource","error":"Forbidden","statusCode":403}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"73bac4ee-98c5-4fa2-834c-9f180d41c637":{"apiKey":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"}}},"servers":{"f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef":{"url":"https://api.upliftai.org/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Project API key (`sk_api_…`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"voice-agents/api-reference/openapi.yaml"},"subdomain":"upliftai","siteName":"Uplift AI API Docs","title":"Start a session from inline config - Uplift AI API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T06:54:41.159Z","originalFileLocation":"api-reference/starting-a-conversation/start-a-session-from-inline-config.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later. The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_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/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start a session from inline config - Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later. The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Starting+a+conversation\u0026amp;title=Start+a+session+from+inline+config\u0026amp;description=Identical+to+%5BCreate+a+web+session+token%5D%28%2Fapi-reference%2Fstarting-a-conversation%2Fcreate-a-web-session-token%29+%E2%80%94+you+get+a+LiveKit+%60wsUrl%60+and+token%2C+and+everythi\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=be0160af900aafcaab13ee369c1e73a285230ef3c3b9d021b58a4bf05b136286\">\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=\"Start a session from inline config - Uplift AI API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later. The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Starting+a+conversation\u0026amp;title=Start+a+session+from+inline+config\u0026amp;description=Identical+to+%5BCreate+a+web+session+token%5D%28%2Fapi-reference%2Fstarting-a-conversation%2Fcreate-a-web-session-token%29+%E2%80%94+you+get+a+LiveKit+%60wsUrl%60+and+token%2C+and+everythi\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=be0160af900aafcaab13ee369c1e73a285230ef3c3b9d021b58a4bf05b136286\">\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/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/starting-a-conversation/start-a-session-from-inline-config.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.upliftai.org/#organization\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.upliftai.org#website\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config#webpage\",\"url\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config\",\"name\":\"Start a session from inline config\",\"description\":\"Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later. The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\",\"dateModified\":\"2026-10-28T06:54:41.159Z\",\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.upliftai.org/voice-agents/api-reference/limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Starting a conversation\",\"item\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/create-a-web-session-token\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Start a session from inline config\",\"item\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config#apireference\",\"headline\":\"Start a session from inline config\",\"name\":\"Start a session from inline config\",\"description\":\"Identical to Create a web session token — you get a LiveKit wsUrl and token, and everything on that page applies. The difference: the assistant is created on the fly from the config you send, instead of using a stored id. It stays hidden from the stored-assistant routes and is gone five hours later. The inline config follows the same rules as Create an assistant: provider and model strings resolve when the client connects, so an unsupported value kills that conversation rather than failing this request. For Urdu, tell the model to reply in Nastaliq script, not Roman Urdu.\",\"url\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config\",\"mainEntityOfPage\":{\"@id\":\"https://docs.upliftai.org/api-reference/starting-a-conversation/start-a-session-from-inline-config#webpage\"},\"dateModified\":\"2026-10-28T06:54:41.159Z\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Uplift AI API Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Uplift AI API Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/starting-a-conversation/start-a-session-from-inline-config.md","siteName":"Uplift AI API Docs","nav":{"global":null,"tabs":[{"tab":"Orator API","pages":[{"title":"Orator API","href":"/introduction"}]},{"tab":"Voice Agents","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/voice-agents/getting-started/overview"},{"title":"Quickstart: Web","href":"/voice-agents/getting-started/quickstart-web"},{"title":"Quickstart: Phone","href":"/voice-agents/getting-started/quickstart-phone"}]},{"group":"Concepts","pages":[{"title":"How it works","href":"/voice-agents/concepts/how-it-works"},{"title":"Tools overview","href":"/voice-agents/concepts/tools-overview"},{"title":"Phone call states","href":"/voice-agents/concepts/phone-call-states"},{"title":"Pricing","href":"/voice-agents/concepts/pricing"}]},{"group":"Assistants","pages":[{"title":"Working with assistants","href":"/voice-agents/assistants/working-with-assistants"},{"title":"Draft and publish","href":"/voice-agents/assistants/versions"},{"title":"Transient vs stored assistants","href":"/voice-agents/assistants/transient-vs-stored"},{"title":"Provider \u0026 model reference","href":"/voice-agents/assistants/providers-and-models"},{"title":"Recommended stack","href":"/voice-agents/assistants/recommended-stack"},{"title":"Voice prompting","href":"/voice-agents/assistants/voice-prompting"},{"title":"Build, refine \u0026 simulate","href":"/voice-agents/assistants/build-refine-simulate"},{"title":"Scorecards","href":"/voice-agents/assistants/scorecards"}]},{"group":"Tools","pages":[{"title":"Client tools","href":"/voice-agents/tools/client-tools"},{"title":"Webhook tools","href":"/voice-agents/tools/webhook-tools"},{"title":"End call","href":"/voice-agents/tools/system/end-call"}]},{"group":"Personalization","pages":[{"title":"Variables","href":"/voice-agents/personalization/variables"},{"title":"Per-call instructions","href":"/voice-agents/personalization/per-call-instructions"}]},{"group":"Calling","pages":[{"title":"Outbound calls","href":"/voice-agents/calling/outbound"},{"title":"Inbound calls","href":"/voice-agents/calling/inbound"},{"title":"Phone numbers \u0026 concurrency","href":"/voice-agents/calling/concurrency"},{"title":"Call end reasons","href":"/voice-agents/calling/call-end-reasons"},{"title":"Session details \u0026 transcripts","href":"/voice-agents/calling/session-details"},{"title":"Live listen","href":"/voice-agents/calling/live-listen"}]},{"group":"Campaigns","pages":[{"title":"Getting started with batch calling","href":"/voice-agents/campaigns/getting-started"},{"title":"[ ] Static vs continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/static-vs-continuous"},{"title":"[ ] Static campaigns","hidden":true,"href":"/voice-agents/campaigns/static"},{"title":"[ ] Continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/continuous"},{"title":"[ ] Contacts","hidden":true,"href":"/voice-agents/campaigns/contacts"},{"title":"[ ] Scheduling \u0026 retries","hidden":true,"href":"/voice-agents/campaigns/scheduling-and-retries"},{"title":"[ ] Goals \u0026 scorecards","hidden":true,"href":"/voice-agents/campaigns/goals-and-scorecards"},{"title":"[ ] Results \u0026 stats","hidden":true,"href":"/voice-agents/campaigns/results"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","href":"/voice-agents/webhooks/overview"},{"title":"Event reference","href":"/voice-agents/webhooks/events"}]},{"group":"Frontend","pages":[{"title":"[ ] Architecture","hidden":true,"href":"/voice-agents/frontend/architecture"},{"title":"[ ] React","hidden":true,"href":"/voice-agents/frontend/react"},{"title":"[ ] Widget embed","hidden":true,"href":"/voice-agents/frontend/widget"},{"title":"[ ] Monitoring UI","hidden":true,"href":"/voice-agents/frontend/monitoring-ui"}]},{"group":"Testing","pages":[{"title":"Simulating conversations","href":"/voice-agents/testing/simulation"}]},{"group":"Guides","pages":[{"title":"[ ] Appointment scheduling","hidden":true,"href":"/voice-agents/guides/appointment-scheduling"},{"title":"[ ] Event invitation","hidden":true,"href":"/voice-agents/guides/event-invitation"},{"title":"[ ] Sales / lead qualification","hidden":true,"href":"/voice-agents/guides/lead-qualification"},{"title":"[ ] Payment reminder","hidden":true,"href":"/voice-agents/guides/payment-reminder"},{"title":"[ ] Order confirmation","hidden":true,"href":"/voice-agents/guides/order-confirmation"}]},{"group":"API Reference","pages":[{"title":"Phone numbers \u0026 limits","href":"/voice-agents/api-reference/limits"},{"group":"Assistants","pages":[{"title":"Create an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants","href":"/api-reference/assistants/create-an-assistant"},{"title":"List assistants","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants","href":"/api-reference/assistants/list-assistants"},{"title":"Get an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/get-an-assistant"},{"title":"Update an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/update-an-assistant"},{"title":"Delete an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml delete /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/delete-an-assistant"},{"title":"Publish an assistant version","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/publish","href":"/api-reference/assistants/publish-an-assistant-version"},{"title":"List published versions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/versions","href":"/api-reference/assistants/list-published-versions"},{"title":"Get an assistant's publish state","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/metadata","href":"/api-reference/assistants/get-an-assistants-publish-state"}]},{"group":"Authoring an assistant","pages":[{"title":"Build an assistant from a brief","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds","href":"/api-reference/authoring-an-assistant/build-an-assistant-from-a-brief"},{"title":"Poll a build's progress","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/status/{buildId}","href":"/api-reference/authoring-an-assistant/poll-a-builds-progress"},{"title":"Rehearse a call against a persona","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/simulate","href":"/api-reference/authoring-an-assistant/rehearse-a-call-against-a-persona"},{"title":"Refine a built assistant's prompt","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/refine","href":"/api-reference/authoring-an-assistant/refine-a-built-assistants-prompt"},{"title":"Get an assistant's build record","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/{assistantId}","href":"/api-reference/authoring-an-assistant/get-an-assistants-build-record"}]},{"group":"Starting a conversation","pages":[{"title":"Create a web session token","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/session","href":"/api-reference/starting-a-conversation/create-a-web-session-token"},{"title":"Open a session without an API key","description":"Open a web session with no API key, so client-side code can mint its own token. Works only for assistants marked `public`, which makes the assistant id the entire credential: anyone who reads it out of your page source can start sessions billed to your organization. The assistant joins the room once the client connects.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/public-session","href":"/api-reference/starting-a-conversation/open-a-session-without-an-api-key"},{"title":"Start a session from inline config","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/adhoc/session","href":"/api-reference/starting-a-conversation/start-a-session-from-inline-config"},{"title":"Dispatch a call from this assistant","description":"Dial a customer as this assistant. `dispatched` means the carrier accepted the call and it is about to ring, not that anyone picked up. The returned `callId` is also the `sessionId`: [poll the session status](/api-reference/sessions-%26-call-records/get-a-sessions-status) for ringing, answer, and outcome. The response's `externalRef` is the telephony reference to quote in support tickets.\n\nSend an `Idempotency-Key` on retries so a timed-out request can't place a second call; the key also makes the `callId` start with `api_` instead of being a fresh UUID.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/call","href":"/api-reference/starting-a-conversation/dispatch-a-call-from-this-assistant"}]},{"group":"Sessions \u0026 call records","pages":[{"title":"List an assistant's sessions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/sessions","href":"/api-reference/sessions-\u0026-call-records/list-an-assistants-sessions"},{"title":"Get a session's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}","href":"/api-reference/sessions-\u0026-call-records/get-a-sessions-status"},{"title":"Get a call's transcript and outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}/detail","href":"/api-reference/sessions-\u0026-call-records/get-a-calls-transcript-and-outcomes"},{"title":"Listen in on a live call","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/sessions/{sessionId}/listen","href":"/api-reference/sessions-\u0026-call-records/listen-in-on-a-live-call"}]},{"group":"Campaigns","pages":[{"title":"Create a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"List campaigns","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Get a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}","href":"/api-reference/campaigns/get-a-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"Schedule a campaign launch","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/schedule","href":"/api-reference/campaigns/schedule-a-campaign-launch"},{"title":"Launch a campaign now","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/launch","href":"/api-reference/campaigns/launch-a-campaign-now"},{"title":"Append contacts to a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/contacts","href":"/api-reference/campaigns/append-contacts-to-a-campaign"},{"title":"Pause campaign dialing","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/pause","href":"/api-reference/campaigns/pause-campaign-dialing"},{"title":"Resume a paused campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/resume","href":"/api-reference/campaigns/resume-a-paused-campaign"},{"title":"Close a continuous campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/close","href":"/api-reference/campaigns/close-a-continuous-campaign"}]},{"group":"Campaign outcomes","pages":[{"title":"Aggregate stats for a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/stats","href":"/api-reference/campaign-outcomes/aggregate-stats-for-a-campaign"},{"title":"List a campaign's outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/results","href":"/api-reference/campaign-outcomes/list-a-campaigns-outcomes"},{"title":"List a campaign's calls","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/calls","href":"/api-reference/campaign-outcomes/list-a-campaigns-calls"},{"title":"List a campaign's callback requests","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/callbacks","href":"/api-reference/campaign-outcomes/list-a-campaigns-callback-requests"},{"title":"Update a callback's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/callbacks/{callbackId}","href":"/api-reference/campaign-outcomes/update-a-callbacks-status"},{"title":"Add a note to a callback","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/callbacks/{callbackId}/notes","href":"/api-reference/campaign-outcomes/add-a-note-to-a-callback"},{"title":"List a campaign's conversion records","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/conversions","href":"/api-reference/campaign-outcomes/list-a-campaigns-conversion-records"}]},{"group":"Contacts","pages":[{"title":"Upload a contact file","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads","href":"/api-reference/contacts/upload-a-contact-file"},{"title":"Re-preview an upload with a mapping","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads/{uploadId}/preview","href":"/api-reference/contacts/re-preview-an-upload-with-a-mapping"},{"title":"Dry-run a contact import","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/preview","href":"/api-reference/contacts/dry-run-a-contact-import"},{"title":"Create a contact list","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists","href":"/api-reference/contacts/create-a-contact-list"},{"title":"List contact lists","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists","href":"/api-reference/contacts/list-contact-lists"},{"title":"Get a contact list's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}","href":"/api-reference/contacts/get-a-contact-lists-metadata"},{"title":"Page through a list's contacts","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}/contacts","href":"/api-reference/contacts/page-through-a-lists-contacts"},{"group":"Google Sheet sources","pages":[{"title":"Register a Google Sheet as a source","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources","href":"/api-reference/google-sheet-sources/register-a-google-sheet-as-a-source"},{"title":"List registered contact sources","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources","href":"/api-reference/google-sheet-sources/list-registered-contact-sources"},{"title":"Get a contact source's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources/{sourceId}","href":"/api-reference/google-sheet-sources/get-a-contact-sources-metadata"},{"title":"Re-check a registered sheet","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/{sourceId}/preview","href":"/api-reference/google-sheet-sources/re-check-a-registered-sheet"}]}]},{"group":"Integrations \u0026 delivery health","pages":[{"title":"Webhooks on the portal","href":"/voice-agents/api-reference/webhooks-on-the-portal"}]}]}]},{"tab":"Integration API","hidden":true,"pages":[{"title":"Integration API","href":"/voice-agents/api-reference/integration-api"}]},{"tab":"Realtime Assistants","hidden":true,"pages":[{"title":"Realtime Assistants","href":"/assistants/introduction"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials/livekit-voice-agent"}]},{"tab":"Syngenta Assistant","hidden":true,"pages":[{"title":"Syngenta Assistant","href":"/syngenta/authentication"}]}]},"basePath":"","title":"Start a session from inline config - Uplift AI API Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}