A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.
To A/B test a Bolna voice agent, save each variant as an agent version, send part of your calls to each version, then compare the results by agent_version_id and make the winner live. Your live agent keeps answering every other call while the test runs.A version is a full copy of the agent’s setup, so you can test any change: a new prompt or welcome message, a different voice, LLM or transcriber, or other call settings. Each call runs on exactly one version, and records it as the call’s agent_version_id.
Split the calls. Pass agent_version_id on each POST /call, or split a batch across 2 to 4 versions by percentage.
Compare the results. Filter call history and executions by version, and compare answer rate, duration, cost and extracted data. See Compare the results.
Make the winner live. Every call that doesn’t ask for a version then uses it. See Pick a winner.
There are two ways to split calls across versions:
Make call takes an optional agent_version_id. The call runs on that version’s prompts, voice, models and settings, and calls without it run on the live version. To A/B test, choose a version for each call in your own code and pass it.Assign each contact a version once and reuse it, so a contact called again gets the same version. Hashing a stable ID does this without storing anything:
A version that doesn’t exist, belongs to another agent or was deleted returns 404 with Agent version not found.
Split a batch
A batch can split its contacts across two to four versions. Each contact is assigned a version when the batch is uploaded, in proportion to the percentages you set, and its retries keep that version.
Dashboard
API
On the Batches page, select your agent and click Upload Batch. Turn on A/B test versions, then pick a version and a traffic share for each variant. See Test agent versions against each other.
Upload Batch dialog with A/B test versions turned on
Each row is a variant: choose its version and its share of the batch’s contacts. The shares must add up to 100%, and Split evenly resets them to equal shares.
Two variants, the live v1 and v2, each getting 50% of the contacts
Weights are whole numbers from 1 to 99 that add up to 100, and each arm needs a different version.
All versions in the split need the same telephony provider as the live version, and batches with a workflow can’t be split.
Compare the results
Every call records the version it ran on, however it was started.
Dashboard: in call history, select the agent and use the Version filter and column. Download Records includes an agent_version_id column.
API: filter Get agent executions with agent_version_id. Each execution also returns its agent_version_id.
Compare outcomes such as answer rate, call duration, cost and your extracted data between versions.
Pick a winner
Make the winning version live with Make live in the version switcher, or with Set current version. From then on, every call that doesn’t ask for a version, including inbound calls, uses it.
FAQ
What can I A/B test on a voice agent?
Anything saved in an agent version: the prompts, the welcome message, the voice, the LLM and transcriber models, and the other call settings. Change one thing per version so you know which change made the difference.
Does an A/B test change my live agent?
No. Calls that don’t ask for a version, including all inbound calls, keep running on the live version. A version only takes over once you make it live.
How many versions can I test at once?
A batch splits across 2 to 4 versions. With individual calls there’s no limit, because your code picks the version for each call.
Can I A/B test inbound calls?
No. Inbound numbers always answer with the live version. To compare versions on inbound traffic, make one version live for a period, then the other, and compare the two periods.
Do retries and repeat calls use the same version?
In a batch, yes: each contact gets its version when the batch is uploaded, and its retries keep it. With individual calls, it’s up to your code, so assign each contact one version and reuse it, as in the example above.
Can I delete a version while it's being tested?
Not while it’s in the split of a batch that hasn’t finished. Delete agent version returns 409 until that batch completes or is stopped. The live version can’t be deleted either, so make another version live first. Calls that already ran on a deleted version keep their transcripts and still show it as their version.
Can I A/B test a batch that uses a workflow?
Not yet. Batches with a workflow can’t be split across versions.
Next steps
Agent versions
Save, edit and manage versions
Batch calling
Upload and run batches
Was this page helpful?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Bolna Docs","description":"Quickly build and deploy conversational Voice AI agents","colors":{"primary":"#2563EB","light":"#BAE6FD","dark":"#2563EB"},"logo":{"light":"https://mintcdn.com/bolna-54a2d4fe/n6ISBDZpjo2_6G0U/logo/bolna-logo.png?fit=max\u0026auto=format\u0026n=n6ISBDZpjo2_6G0U\u0026q=85\u0026s=1df42427a7bac4c04ba42e35c42aaff5","dark":"https://mintcdn.com/bolna-54a2d4fe/PGaphb2L1IE-6aKF/logo/Bolna-white.png?fit=max\u0026auto=format\u0026n=PGaphb2L1IE-6aKF\u0026q=85\u0026s=8a0baa4c200add0fe463dfde6bcb10d6","href":"https://www.bolna.ai/docs"},"favicon":"https://mintcdn.com/bolna-54a2d4fe/mJ1zPF3eB4Dyupzj/favicon1.ico?fit=max\u0026auto=format\u0026n=mJ1zPF3eB4Dyupzj\u0026q=85\u0026s=2c2d3c96d1d4add97ebe430ade591aa3","api":{"openapi":"api-reference/openapi.yml"},"background":{"decoration":"grid"},"navbar":{"links":[{"icon":"globe","href":"https://status.bolna.ai","label":"Status"},{"icon":"slack","href":"https://www.bolna.ai/join-slack","label":"Ask us on Slack"},{"icon":"gauge","href":"https://platform.bolna.ai/sign-up","label":"Platform"}]},"footer":{"socials":{"website":"https://platform.bolna.ai","github":"https://github.com/bolna-ai/bolna","slack":"https://www.bolna.ai/join-slack"}},"seo":{"metatags":{"og:type":"website","og:site_name":"Bolna AI Documentation","canonical":"https://www.bolna.ai/docs"},"organization":{"id":"https://www.bolna.ai/#organization","name":"Bolna AI","legalName":"Whismurwave Inc.","url":"https://www.bolna.ai","logo":"https://www.bolna.ai/logos/logo-black.png","sameAs":["https://www.linkedin.com/company/bolna-ai/","https://www.ycombinator.com/companies/bolna-ai","https://github.com/bolna-ai","https://x.com/bolna_dev","https://www.youtube.com/@BolnaVoiceAI"]}},"styling":{"codeblocks":"system","latex":false},"integrations":{"ga4":{"measurementId":"G-BJ5QXHE52P"},"gtm":{"tagId":"GTM-53BBWG2J"}},"contextual":{"options":["copy","view","chatgpt","claude","add-mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bolna-54a2d4fe","hasAudioNarration":false,"actualSubdomain":"bolna-54a2d4fe","customDomains":["www.bolna.ai"],"gitSource":{"type":"github","owner":"bolna-ai","repo":"docs","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af822dd8deffcac16fbef83","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"Voice Agents","count":157},{"language":"default","tag":"API Reference","count":143},{"language":"default","tag":"Build","count":77},{"language":"default","tag":"Integrations","count":60},{"language":"default","tag":"Deploy","count":59},{"language":"default","tag":"Workflows","count":57},{"language":"default","tag":"Voice agents","count":48},{"language":"default","tag":"AI models","count":42},{"language":"default","tag":"Developers","count":41},{"language":"default","tag":"Telephony","count":36}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@bolna.ai"}},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":true,"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":"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},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"#banner{background-color:#60A5FA!important}img[src*=\"bolna-logo\"],img[src*=\"Bolna-white\"]{height:52px!important;width:auto!important;max-height:unset!important;max-width:unset!important}.update-container{flex-direction:column!important;align-items:stretch!important}.update-container>div:first-child{position:static!important;width:auto!important;margin-bottom:0.5rem}#content-container,#content-container :is(p,li,td,th,dd,dt,span,div){hyphens:none!important;-webkit-hyphens:none!important}#content-container code:not(pre code){word-break:normal!important;overflow-wrap:break-word!important}"}],"page":{"pagePath":"agents/ab-testing","slug":"/agents/ab-testing","pageMetadata":{"title":"A/B test voice agent prompts and versions","sidebarTitle":"A/B testing","description":"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.","keywords":["A/B testing","A/B test voice agent","A/B test voice agent prompts","voice agent testing","split testing","AI A/B testing","prompt versioning","agent versions","version_split","agent_version_id"],"icon":"flask","iconType":"solid","last_reviewed":"2026-11-14","href":"/agents/ab-testing"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Note,OptimizedImage,Tab,Table,Tabs}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`To A/B test a Bolna voice agent, save each variant as an `,_jsx(_components.a,{href:`/agent-setup/agent-versions`,children:`agent version`}),`, send part of your calls to each version, then compare the results by `,_jsx(_components.code,{children:`agent_version_id`}),` and make the winner live. Your live agent keeps answering every other call while the test runs.`]}),`\n`,_jsxs(_components.p,{children:[`A version is a full copy of the agent’s setup, so you can test any change: a new prompt or welcome message, a different voice, LLM or transcriber, or other call settings. Each call runs on exactly one version, and records it as the call’s `,_jsx(_components.code,{children:`agent_version_id`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-a/b-test-a-voice-agent`,children:`How to A/B test a voice agent`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Save the variants.`}),` Edit the agent and `,_jsx(_components.a,{href:`/agent-setup/agent-versions#save-as-a-new-version`,children:`save each change as a new version`}),`. The live version is usually your control.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Split the calls.`}),` Pass `,_jsx(_components.code,{children:`agent_version_id`}),` on each `,_jsx(_components.a,{href:`#split-individual-calls`,children:_jsx(_components.code,{children:`POST /call`})}),`, or `,_jsx(_components.a,{href:`#split-a-batch`,children:`split a batch`}),` across 2 to 4 versions by percentage.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compare the results.`}),` Filter call history and executions by version, and compare answer rate, duration, cost and extracted data. See `,_jsx(_components.a,{href:`#compare-the-results`,children:`Compare the results`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Make the winner live.`}),` Every call that doesn’t ask for a version then uses it. See `,_jsx(_components.a,{href:`#pick-a-winner`,children:`Pick a winner`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`There are two ways to split calls across versions:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:_jsx(_components.a,{href:`#split-individual-calls`,children:`Individual calls`})}),_jsx(_components.th,{children:_jsx(_components.a,{href:`#split-a-batch`,children:`Batches`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`How`})}),_jsxs(_components.td,{children:[`Pass `,_jsx(_components.code,{children:`agent_version_id`}),` on each `,_jsx(_components.code,{children:`POST /call`})]}),_jsxs(_components.td,{children:[`Set the split when you upload the batch, in the dashboard or with `,_jsx(_components.code,{children:`version_split`}),` on `,_jsx(_components.code,{children:`POST /batches`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Who decides each call’s version`})}),_jsx(_components.td,{children:`You, in your own code`}),_jsx(_components.td,{children:`Bolna, by the percentages you set`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Versions`})}),_jsx(_components.td,{children:`Any number`}),_jsx(_components.td,{children:`2 to 4`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Best for`})}),_jsx(_components.td,{children:`Calls you trigger from your own system`}),_jsx(_components.td,{children:`Outbound campaigns from a CSV`})]})]})]}),`\n`,_jsx(_components.p,{children:`Calls that don’t ask for a version, including all inbound calls, keep using the live version.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Save each variant as its own version first, see `,_jsx(_components.a,{href:`/agent-setup/agent-versions#save-as-a-new-version`,children:`Save as a new version`}),`. You’ll need each version’s `,_jsx(_components.code,{children:`id`}),`, from the version switcher or from `,_jsx(_components.a,{href:`/api-reference/agent/v2/versions/list`,children:`List agent versions`}),`.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`split-individual-calls`,children:`Split individual calls`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/api-reference/calls/make#call-a-specific-agent-version`,children:`Make call`}),` takes an optional `,_jsx(_components.code,{children:`agent_version_id`}),`. The call runs on that version’s prompts, voice, models and settings, and calls without it run on the live version. To A/B test, choose a version for each call in your own code and pass it.`]}),`\n`,_jsx(_components.p,{children:`Assign each contact a version once and reuse it, so a contact called again gets the same version. Hashing a stable ID does this without storing anything:`}),`\n`,_jsx(CodeBlock,{filename:`Pick a version per contact`,numberOfLines:`27`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`27`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hashlib`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`VERSIONS`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0c6a5e0e-7b8f-4d1a-9f2e-3a4b5c6d7e8f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`70`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# control, 70%`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`30`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# challenger, 30%`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` version_for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`contact_id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` bucket `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` int`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(hashlib.sha256(contact_id.encode()).hexdigest(), `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`16`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`%`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 100`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` for`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` version_id, weight `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`in`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` VERSIONS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` bucket `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` weight:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` version_id`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` bucket `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` weight`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` VERSIONS`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`requests.post(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.bolna.ai/call\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` headers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Authorization\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Bearer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'BOLNA_API_KEY'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` json`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"agent_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"123e4567-e89b-12d3-a456-426655440000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"agent_version_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: version_for(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+919876543210\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipient_phone_number\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+919876543210\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A version that doesn’t exist, belongs to another agent or was deleted returns `,_jsx(_components.code,{children:`404`}),` with `,_jsx(_components.code,{children:`Agent version not found.`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`split-a-batch`,children:`Split a batch`}),`\n`,_jsx(_components.p,{children:`A batch can split its contacts across two to four versions. Each contact is assigned a version when the batch is uploaded, in proportion to the percentages you set, and its retries keep that version.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Dashboard`,id:`dashboard`,children:[_jsxs(_components.p,{children:[`On the `,_jsx(_components.strong,{children:`Batches`}),` page, select your agent and click `,_jsx(_components.strong,{children:`Upload Batch`}),`. Turn on `,_jsx(_components.strong,{children:`A/B test versions`}),`, then pick a version and a traffic share for each variant. See `,_jsx(_components.a,{href:`/outbound/batch-calling#test-agent-versions-against-each-other`,children:`Test agent versions against each other`}),`.`]}),_jsx(Frame,{caption:`Upload Batch dialog with A/B test versions turned on`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=6bd710b43f6d841df2bca61cdb50bf00`,alt:`Upload Batch dialog with A/B test versions turned on`,\"data-og-width\":`671`,width:`671`,\"data-og-height\":`875`,height:`875`,\"data-path\":`images/batch-calling/upload-batch-ab-test.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=280\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=cdd62ddc0f5d980b258644e170a461e9 280w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=560\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=62c6a1a03f6e9e4dd258f91aa2684ace 560w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=840\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=668ccff954f2d979eddfdc6755b6c81e 840w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=fdab34500abe8368e167e173581218bd 1100w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=55819627f29c8952a032f3383a4b562a 1650w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/upload-batch-ab-test.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=c54e71ff296703b7d16d9eefce91bd32 2500w`})}),_jsxs(_components.p,{children:[`Each row is a variant: choose its version and its share of the batch’s contacts. The shares must add up to 100%, and `,_jsx(_components.strong,{children:`Split evenly`}),` resets them to equal shares.`]}),_jsx(Frame,{caption:`Two variants, the live v1 and v2, each getting 50% of the contacts`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=e951686b96c9c5f0dff14b8d0c5c5303`,alt:`A/B test versions with v1 and v2 at 50% each`,\"data-og-width\":`671`,width:`671`,\"data-og-height\":`208`,height:`208`,\"data-path\":`images/batch-calling/ab-test-versions-split.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=280\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=f2541bc0cdf0a52993637e27e1b54fdc 280w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=560\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=06648cf53775e6f790030621527ef4d8 560w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=840\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=8498ee630a9bab151ecd1800058081fe 840w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=30a4e5d238d8055cfe20c51c0ac75b20 1100w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=ee7ba79c2612b83d3ec82a7597d1ae63 1650w, https://mintcdn.com/bolna-54a2d4fe/dmTdbxeZGEzAsBts/images/batch-calling/ab-test-versions-split.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dmTdbxeZGEzAsBts\u0026q=85\u0026s=c907f47d527967ed4e12e51991c81d70 2500w`})})]}),_jsxs(Tab,{title:`API`,id:`api`,children:[_jsxs(_components.p,{children:[`Pass `,_jsx(_components.code,{children:`version_split`}),` on `,_jsx(_components.a,{href:`/api-reference/batches/create#split-a-batch-across-agent-versions`,children:`Create batch`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.bolna.ai/batches`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$BOLNA_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"agent_id=123e4567-e89b-12d3-a456-426655440000\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"file=@recipients.csv\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -F`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'version_split={\"arms\":[{\"agent_version_id\":\"0c6a5e0e-7b8f-4d1a-9f2e-3a4b5c6d7e8f\",\"weight\":70},{\"agent_version_id\":\"9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b\",\"weight\":30}]}'`})]}),`\n`]})})}),_jsx(_components.p,{children:`Weights are whole numbers from 1 to 99 that add up to 100, and each arm needs a different version.`})]})]}),`\n`,_jsx(_components.p,{children:`All versions in the split need the same telephony provider as the live version, and batches with a workflow can’t be split.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`compare-the-results`,children:`Compare the results`}),`\n`,_jsx(_components.p,{children:`Every call records the version it ran on, however it was started.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Dashboard:`}),` in `,_jsx(_components.a,{href:`/agent-setup/call-history`,children:`call history`}),`, select the agent and use the `,_jsx(_components.strong,{children:`Version`}),` filter and column. `,_jsx(_components.strong,{children:`Download Records`}),` includes an `,_jsx(_components.code,{children:`agent_version_id`}),` column.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`API:`}),` filter `,_jsx(_components.a,{href:`/api-reference/executions/get_executions#filter-by-agent-version`,children:`Get agent executions`}),` with `,_jsx(_components.code,{children:`agent_version_id`}),`. Each execution also returns its `,_jsx(_components.code,{children:`agent_version_id`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Compare outcomes such as answer rate, call duration, cost and your `,_jsx(_components.a,{href:`/agent-setup/analytics-tab`,children:`extracted data`}),` between versions.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`pick-a-winner`,children:`Pick a winner`}),`\n`,_jsxs(_components.p,{children:[`Make the winning version live with `,_jsx(_components.strong,{children:`Make live`}),` in the version switcher, or with `,_jsx(_components.a,{href:`/api-reference/agent/v2/versions/set_current`,children:`Set current version`}),`. From then on, every call that doesn’t ask for a version, including inbound calls, uses it.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`What can I A/B test on a voice agent?`,id:`what-can-i-a-b-test-on-a-voice-agent`,children:_jsx(_components.p,{children:`Anything saved in an agent version: the prompts, the welcome message, the voice, the LLM and transcriber models, and the other call settings. Change one thing per version so you know which change made the difference.`})}),_jsx(Accordion,{title:`Does an A/B test change my live agent?`,id:`does-an-a-b-test-change-my-live-agent`,children:_jsx(_components.p,{children:`No. Calls that don’t ask for a version, including all inbound calls, keep running on the live version. A version only takes over once you make it live.`})}),_jsx(Accordion,{title:`How many versions can I test at once?`,id:`how-many-versions-can-i-test-at-once`,children:_jsx(_components.p,{children:`A batch splits across 2 to 4 versions. With individual calls there’s no limit, because your code picks the version for each call.`})}),_jsx(Accordion,{title:`Can I A/B test inbound calls?`,id:`can-i-a-b-test-inbound-calls`,children:_jsx(_components.p,{children:`No. Inbound numbers always answer with the live version. To compare versions on inbound traffic, make one version live for a period, then the other, and compare the two periods.`})}),_jsx(Accordion,{title:`Do retries and repeat calls use the same version?`,id:`do-retries-and-repeat-calls-use-the-same-version`,children:_jsxs(_components.p,{children:[`In a batch, yes: each contact gets its version when the batch is uploaded, and its retries keep it. With individual calls, it’s up to your code, so assign each contact one version and reuse it, as in the `,_jsx(_components.a,{href:`#split-individual-calls`,children:`example above`}),`.`]})}),_jsx(Accordion,{title:`Can I delete a version while it's being tested?`,id:`can-i-delete-a-version-while-its-being-tested`,children:_jsxs(_components.p,{children:[`Not while it’s in the split of a batch that hasn’t finished. `,_jsx(_components.a,{href:`/api-reference/agent/v2/versions/delete`,children:`Delete agent version`}),` returns `,_jsx(_components.code,{children:`409`}),` until that batch completes or is stopped. The live version can’t be deleted either, so make another version live first. Calls that already ran on a deleted version keep their transcripts and still show it as their version.`]})}),_jsx(Accordion,{title:`Can I A/B test a batch that uses a workflow?`,id:`can-i-a-b-test-a-batch-that-uses-a-workflow`,children:_jsx(_components.p,{children:`Not yet. Batches with a workflow can’t be split across versions.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Agent versions`,icon:`code-branch`,href:`/agent-setup/agent-versions`,children:_jsx(_components.p,{children:`Save, edit and manage versions`})}),_jsx(Card,{title:`Batch calling`,icon:`list`,href:`/outbound/batch-calling`,children:_jsx(_components.p,{children:`Upload and run batches`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"system","config":{},"pageMetadata":{"title":"A/B test voice agent prompts and versions","sidebarTitle":"A/B testing","description":"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.","keywords":["A/B testing","A/B test voice agent","A/B test voice agent prompts","voice agent testing","split testing","AI A/B testing","prompt versioning","agent versions","version_split","agent_version_id"],"icon":"flask","iconType":"solid","last_reviewed":"2026-11-14","href":"/agents/ab-testing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How to A/B test a voice agent","slug":"how-to-a/b-test-a-voice-agent","depth":2,"children":[]},{"title":"Split individual calls","slug":"split-individual-calls","depth":2,"children":[]},{"title":"Split a batch","slug":"split-a-batch","depth":2,"children":[]},{"title":"Compare the results","slug":"compare-the-results","depth":2,"children":[]},{"title":"Pick a winner","slug":"pick-a-winner","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/bolna-54a2d4fe/9e81444dbfd8a835/custom.js","/docs/_mintlify/custom/bolna-54a2d4fe/786be19ebac8ab86/faq-schema.js"],"subdomain":"bolna-54a2d4fe","siteName":"Bolna Docs","title":"A/B test voice agent prompts and versions - Bolna Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-14T08:59:14.229Z","originalFileLocation":"agents/ab-testing.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=\"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bolna Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_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=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"A/B test voice agent prompts and versions - Bolna Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bolna AI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.bolna.ai/docs/agents/ab-testing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bolna-54a2d4fe.mintlify.site/docs/_mintlify/api/og/v2?division=Deploy\u0026amp;title=A%2FB+test+voice+agent+prompts+and+versions\u0026amp;description=A%2FB+test+a+Bolna+voice+agent%3A+run+a+prompt%2C+voice+or+model+change+as+an+agent+version+on+some+calls+or+a+batch%2C+compare+results%2C+make+the+winner+live.\u0026amp;theme=c2a564e4527791006d5cf593\u0026amp;signature=717146753f30eb00eeaf133a26cff7fe59ffd3aaac0619741232c522108d8f2f\">\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=\"A/B test voice agent prompts and versions - Bolna Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bolna-54a2d4fe.mintlify.site/docs/_mintlify/api/og/v2?division=Deploy\u0026amp;title=A%2FB+test+voice+agent+prompts+and+versions\u0026amp;description=A%2FB+test+a+Bolna+voice+agent%3A+run+a+prompt%2C+voice+or+model+change+as+an+agent+version+on+some+calls+or+a+batch%2C+compare+results%2C+make+the+winner+live.\u0026amp;theme=c2a564e4527791006d5cf593\u0026amp;signature=717146753f30eb00eeaf133a26cff7fe59ffd3aaac0619741232c522108d8f2f\">\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=\"/docs/mintlify-assets/_mintlify/favicons/bolna-54a2d4fe/eeJFp-o5babnY7O-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bolna Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.bolna.ai/docs/agents/ab-testing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/agents/ab-testing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.bolna.ai/#organization\",\"name\":\"Bolna AI\",\"legalName\":\"Whismurwave Inc.\",\"url\":\"https://www.bolna.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://www.bolna.ai/logos/logo-black.png\"},\"sameAs\":[\"https://www.linkedin.com/company/bolna-ai/\",\"https://www.ycombinator.com/companies/bolna-ai\",\"https://github.com/bolna-ai\",\"https://x.com/bolna_dev\",\"https://www.youtube.com/@BolnaVoiceAI\"]},{\"@type\":\"WebSite\",\"@id\":\"https://www.bolna.ai/docs#website\",\"name\":\"Bolna Docs\",\"url\":\"https://www.bolna.ai/docs\",\"publisher\":{\"@id\":\"https://www.bolna.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.bolna.ai/docs/agents/ab-testing#webpage\",\"url\":\"https://www.bolna.ai/docs/agents/ab-testing\",\"name\":\"A/B test voice agent prompts and versions\",\"description\":\"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\",\"dateModified\":\"2026-11-14T08:59:14.229Z\",\"isPartOf\":{\"@id\":\"https://www.bolna.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.bolna.ai/docs/agents/ab-testing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.bolna.ai/docs/agents/ab-testing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy\",\"item\":\"https://www.bolna.ai/docs/agents/deploy\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A/B test voice agent prompts and versions\",\"item\":\"https://www.bolna.ai/docs/agents/ab-testing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.bolna.ai/docs/agents/ab-testing#article\",\"headline\":\"A/B test voice agent prompts and versions\",\"name\":\"A/B test voice agent prompts and versions\",\"description\":\"A/B test a Bolna voice agent: run a prompt, voice or model change as an agent version on some calls or a batch, compare results, make the winner live.\",\"url\":\"https://www.bolna.ai/docs/agents/ab-testing\",\"mainEntityOfPage\":{\"@id\":\"https://www.bolna.ai/docs/agents/ab-testing#webpage\"},\"dateModified\":\"2026-11-14T08:59:14.229Z\",\"keywords\":\"A/B testing, A/B test voice agent, A/B test voice agent prompts, voice agent testing, split testing, AI A/B testing, prompt versioning, agent versions, version_split, agent_version_id\",\"publisher\":{\"@id\":\"https://www.bolna.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://www.bolna.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bolna Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Bolna AI\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/agents/ab-testing.md","siteName":"Bolna Docs","nav":{"global":null,"tabs":[{"tab":"Overview","icon":"book","pages":[{"title":"Overview","href":""}]},{"tab":"Voice Agents","icon":"waveform-lines","groups":[{"group":" ","pages":[{"title":"Voice agents: build, deploy and monitor","sidebarTitle":"Overview","icon":"robot","href":"/agents/overview"}]},{"group":"Build","icon":"hammer","pages":[{"group":"Agent setup","icon":"sliders","root":{"title":"Configure voice AI agents in Bolna","sidebarTitle":"Agent builder overview","icon":"compass","iconType":"solid","href":"/agent-setup/overview"},"expanded":false,"pages":[{"title":"Configure multilingual agent prompts and hangup settings","sidebarTitle":"Prompt \u0026 greeting","icon":"file-lines","iconType":"solid","href":"/agent-setup/agent-tab"},{"title":"Single Prompt view for multilingual agents","sidebarTitle":"Single Prompt view","icon":"language","iconType":"solid","tag":"Beta","href":"/agent-setup/single-prompt-view"},{"title":"Choose and configure LLM models for voice AI","sidebarTitle":"Choose an LLM","icon":"brain","iconType":"solid","href":"/agent-setup/llm-tab"},{"title":"Configure languages, voice and transcription settings","sidebarTitle":"Voice \u0026 language","icon":"language","iconType":"solid","href":"/agent-setup/audio-tab"},{"title":"Configure voice AI latency and interruptions","sidebarTitle":"Interruptions \u0026 speed","icon":"gear","iconType":"solid","href":"/agent-setup/engine-tab"},{"title":"Configure telephony, noise, and call timing for voice AI","sidebarTitle":"Calling tab","icon":"phone","iconType":"solid","href":"/agent-setup/call-tab"},{"title":"Set up inbound calls \u0026 caller matching","sidebarTitle":"Inbound calling tab","icon":"phone-arrow-down","iconType":"solid","href":"/agent-setup/inbound-tab"},{"title":"Connect function tools and API integrations","sidebarTitle":"Connect tools and APIs","icon":"function","iconType":"solid","href":"/agent-setup/tools-tab"},{"title":"Set up webhooks and post-call extractions","sidebarTitle":"Extractions tab","icon":"chart-line","iconType":"solid","href":"/agent-setup/analytics-tab"},{"title":"Agent versions","sidebarTitle":"Agent versions","icon":"code-branch","iconType":"solid","href":"/agent-setup/agent-versions"},{"title":"Import agents","sidebarTitle":"Copy or import an agent","icon":"copy","iconType":"solid","href":"/agent-setup/copy-import-agent"}]},{"group":"Graph agents","icon":"diagram-nested","root":{"title":"Graph agents","sidebarTitle":"Graph agents overview","icon":"diagram-project","iconType":"solid","href":"/graph-agent/introduction"},"expanded":false,"pages":[{"title":"Using the graph agent editor","sidebarTitle":"Using the editor","icon":"pen-to-square","iconType":"solid","href":"/graph-agent/using-the-editor"},{"title":"Managing nodes","sidebarTitle":"Managing nodes","icon":"circle-nodes","iconType":"solid","href":"/graph-agent/managing-nodes"},{"title":"Managing transitions","sidebarTitle":"Managing transitions","icon":"arrow-right-arrow-left","iconType":"solid","href":"/graph-agent/managing-transitions"},{"title":"Edges \u0026 routing","sidebarTitle":"Edges \u0026 routing","icon":"route","iconType":"solid","href":"/graph-agent/edges-and-routing"},{"title":"Router nodes","sidebarTitle":"Router nodes","icon":"diagram-project","iconType":"solid","href":"/graph-agent/router-nodes"},{"title":"Static nodes \u0026 silence repeat","sidebarTitle":"Static nodes","icon":"volume","iconType":"solid","href":"/graph-agent/static-nodes"},{"title":"Variables","sidebarTitle":"Variables","icon":"brackets-curly","iconType":"solid","href":"/graph-agent/variables"},{"title":"Agent setup","sidebarTitle":"Agent setup","icon":"sliders","iconType":"solid","href":"/graph-agent/settings"},{"title":"Tools \u0026 knowledge base","sidebarTitle":"Tools \u0026 RAG","icon":"screwdriver-wrench","iconType":"solid","href":"/graph-agent/tools-and-rag"},{"title":"Real-time event injection","sidebarTitle":"Event injection","icon":"bolt","iconType":"solid","href":"/graph-agent/event-injection"},{"title":"Testing your agent","sidebarTitle":"Testing","icon":"flask","iconType":"solid","href":"/graph-agent/testing"},{"title":"Validation","sidebarTitle":"Validation","icon":"circle-check","iconType":"solid","href":"/graph-agent/validation"},{"title":"Debugging graph agents","sidebarTitle":"Debug a graph agent","icon":"bug","iconType":"solid","href":"/graph-agent/debugging"},{"title":"Version history","sidebarTitle":"Version history","icon":"clock-rotate-left","iconType":"solid","href":"/graph-agent/version-history"},{"title":"Import \u0026 export","sidebarTitle":"Import / export","icon":"file-export","iconType":"solid","href":"/graph-agent/import-export"},{"title":"Full example","sidebarTitle":"Full example","icon":"file-code","iconType":"solid","href":"/graph-agent/full-example"}]},{"group":"Prompts","icon":"file-lines","root":{"title":"Prompting guide and best practices for Bolna voice AI","sidebarTitle":"Write better prompts","icon":"wand-magic-sparkles","iconType":"solid","href":"/prompting/introduction"},"expanded":false,"pages":[{"title":"Use dynamic variables to personalize voice AI calls","sidebarTitle":"Dynamic variables","icon":"code","iconType":"solid","href":"/prompting/using-context"}]},{"group":"Knowledge base","icon":"book","root":{"title":"Knowledge base for voice AI agents","sidebarTitle":"Overview","icon":"book","iconType":"solid","href":"/knowledge-base"},"expanded":false,"pages":[{"title":"Add PDFs and URLs to a knowledge base","sidebarTitle":"Add PDFs and URLs","icon":"file-arrow-up","iconType":"solid","href":"/knowledge-base/add-sources"},{"title":"Manage and connect knowledge bases","sidebarTitle":"Manage and connect","icon":"link","iconType":"solid","href":"/knowledge-base/manage-and-connect"}]},{"group":"Voices","icon":"microphone-lines","expanded":false,"pages":[{"title":"Clone your voice","sidebarTitle":"Clone a voice","icon":"microphone","iconType":"solid","href":"/clone-voices"},{"title":"Importing your voices to use with Bolna voice AI","sidebarTitle":"Import a voice","icon":"cloud-arrow-up","iconType":"solid","href":"/import-voices"},{"title":"Control how your agent pronounces words","sidebarTitle":"Pronunciation","icon":"spell-check","iconType":"solid","href":"/customizations/pronunciation"}]},{"group":"Languages \u0026 transcripts","icon":"language","root":{"title":"Supported languages","sidebarTitle":"Supported languages","icon":"language","iconType":"solid","href":"/customizations/supported-languages"},"expanded":false,"pages":[{"title":"Improve transcription accuracy with keywords and context","sidebarTitle":"Keywords and context","icon":"bullseye-arrow","iconType":"solid","href":"/customizations/asr-keywords-and-context"},{"title":"Capturing precise transcripts in Bolna voice AI","sidebarTitle":"Precise transcripts","icon":"message-dots","iconType":"solid","href":"/customizations/capturing-precise-transcripts"}]},{"group":"Multilingual","icon":"earth-americas","root":{"title":"Set up multilingual voice AI agents","sidebarTitle":"Multilingual setup","icon":"earth-americas","iconType":"solid","href":"/customizations/multilingual-languages-support"},"expanded":false,"pages":[{"title":"Multilingual agent quickstart","sidebarTitle":"Multilingual quickstart","icon":"earth-americas","iconType":"solid","href":"/quickstarts/multilingual"},{"title":"How language switching works","sidebarTitle":"Language switching","icon":"ear-listen","iconType":"solid","href":"/customizations/language-switching-behavior"},{"title":"Start a call in a chosen language","sidebarTitle":"Starting language","icon":"flag","iconType":"solid","href":"/customizations/start-call-in-language"},{"title":"Auto-detect and switch languages in Bolna voice AI","sidebarTitle":"Auto-switch mid-call","icon":"shuffle","iconType":"solid","href":"/customizations/auto-switch-multilingual-messages"},{"title":"Multilingual config reference","sidebarTitle":"Config reference","icon":"code","iconType":"solid","href":"/customizations/multilingual-config-reference"},{"title":"Writing prompts in non-English languages","sidebarTitle":"Non-English prompts","icon":"language","iconType":"solid","href":"/writing-prompts-in-non-english-languages"}]},{"group":"Languages","icon":"globe","root":{"title":"Indian language voice agents on Bolna","sidebarTitle":"Overview","icon":"language","iconType":"solid","href":"/customizations/languages/overview"},"expanded":false,"pages":[{"title":"Build a Hindi voice agent on Bolna","sidebarTitle":"Hindi voice agent","icon":"language","iconType":"solid","href":"/customizations/hindi-voice-agent"},{"title":"Build a Bengali voice agent on Bolna","sidebarTitle":"Bengali","icon":"language","iconType":"solid","href":"/customizations/languages/bengali"},{"title":"Build a Tamil voice agent on Bolna","sidebarTitle":"Tamil","icon":"language","iconType":"solid","href":"/customizations/languages/tamil"},{"title":"Build a Telugu voice agent on Bolna","sidebarTitle":"Telugu","icon":"language","iconType":"solid","href":"/customizations/languages/telugu"},{"title":"Build a Marathi voice agent on Bolna","sidebarTitle":"Marathi","icon":"language","iconType":"solid","href":"/customizations/languages/marathi"},{"title":"Build a Gujarati voice agent on Bolna","sidebarTitle":"Gujarati","icon":"language","iconType":"solid","href":"/customizations/languages/gujarati"},{"title":"Build a Kannada voice agent on Bolna","sidebarTitle":"Kannada","icon":"language","iconType":"solid","href":"/customizations/languages/kannada"},{"title":"Build a Malayalam voice agent on Bolna","sidebarTitle":"Malayalam","icon":"language","iconType":"solid","href":"/customizations/languages/malayalam"},{"title":"Build a Punjabi voice agent on Bolna","sidebarTitle":"Punjabi","icon":"language","iconType":"solid","href":"/customizations/languages/punjabi"},{"title":"Build an Odia voice agent on Bolna","sidebarTitle":"Odia","icon":"language","iconType":"solid","href":"/customizations/languages/odia"},{"title":"Build an Urdu voice agent on Bolna","sidebarTitle":"Urdu","icon":"language","iconType":"solid","href":"/customizations/languages/urdu"}]},{"group":"Tools \u0026 actions","icon":"screwdriver-wrench","root":{"title":"Function calling for voice AI agents","sidebarTitle":"How tool calling works","icon":"function","iconType":"solid","href":"/tool-calling/introduction"},"expanded":false,"pages":[{"title":"Transfer Live calls to human agents with Bolna voice AI","sidebarTitle":"Transfer calls","icon":"phone-arrow-right","iconType":"solid","href":"/tool-calling/transfer-calls"},{"title":"Search the web during live calls with Bolna Voice AI","sidebarTitle":"Web search","icon":"globe","iconType":"solid","href":"/tool-calling/web-search"},{"group":"Custom functions","icon":"code","root":{"title":"Custom function calls: Complete guide for Bolna voice AI","sidebarTitle":"Call your own API","icon":"code","iconType":"solid","href":"/tool-calling/custom-function-calls"},"pages":[{"title":"Custom function schema reference","sidebarTitle":"Schema reference","icon":"brackets-curly","iconType":"solid","href":"/tool-calling/custom-function-schema"},{"title":"Custom function examples","sidebarTitle":"Examples","icon":"code","iconType":"solid","href":"/tool-calling/custom-function-examples"},{"title":"Using variables in custom functions","sidebarTitle":"Variables \u0026 context","icon":"brackets-curly","iconType":"solid","href":"/tool-calling/custom-function-variables"},{"title":"Pre-call webhooks for custom functions","sidebarTitle":"Pre-call webhooks","icon":"webhook","iconType":"solid","href":"/tool-calling/pre-call-webhooks"}]},{"title":"Check calendar slots with Bolna and Cal.com","sidebarTitle":"Check availability","icon":"calendar-range","iconType":"solid","href":"/tool-calling/fetch-calendar-slots"},{"title":"Book calendar slots with Bolna voice AI and Cal.com","sidebarTitle":"Book an appointment","icon":"calendar-check","iconType":"solid","href":"/tool-calling/book-calendar-slots"},{"title":"Fetching dynamic date and time with Bolna voice AI","sidebarTitle":"Date and time","icon":"clock","iconType":"solid","href":"/tool-calling/fetch-date-and-time"}]},{"group":"Agent templates","icon":"clone","root":{"title":"Agents Library","sidebarTitle":"Agents library","icon":"head-side-gear","iconType":"solid","href":"/agent-templates"},"expanded":false,"pages":[{"group":"E-commerce","icon":"cart-shopping","pages":[{"title":"Customer support agent","sidebarTitle":"Customer support agent","icon":"headset","iconType":"solid","href":"/agent-templates/customer-support-agent"},{"title":"Cart abandonment agent","sidebarTitle":"Cart abandonment agent","icon":"cart-shopping","iconType":"solid","href":"/agent-templates/cart-abandonment-agent"},{"title":"COD confirmation agent","sidebarTitle":"COD confirmation agent","icon":"truck-fast","iconType":"solid","href":"/agent-templates/cod-confirmation-agent"}]},{"group":"BFSI","icon":"building-columns","pages":[{"title":"Announcements agent","sidebarTitle":"Announcements agent","icon":"bullhorn","iconType":"solid","href":"/agent-templates/announcements-agent"},{"title":"Reminders agent","sidebarTitle":"Reminders agent","icon":"clock","iconType":"solid","href":"/agent-templates/reminders-agent"},{"title":"Sales - credit card agent","sidebarTitle":"Sales: credit card agent","icon":"credit-card","iconType":"solid","href":"/agent-templates/sales-credit-card-agent"},{"title":"Sales - loans agent","sidebarTitle":"Sales: loans agent","icon":"hand-holding-dollar","iconType":"solid","href":"/agent-templates/sales-loans-agent"}]},{"group":"Hospitality","icon":"hotel","pages":[{"title":"Front desk agent","sidebarTitle":"Front desk agent","icon":"bell-concierge","iconType":"solid","href":"/agent-templates/front-desk-agent"},{"title":"Salon booking agent","sidebarTitle":"Salon booking agent","icon":"scissors","iconType":"solid","href":"/agent-templates/salon-booking-agent"},{"title":"Dentist appointment agent","sidebarTitle":"Dentist appointments","icon":"tooth","iconType":"solid","href":"/agent-templates/dentist-appointment-agent"},{"title":"Surveys agent","sidebarTitle":"Surveys agent","icon":"clipboard-question","iconType":"solid","href":"/agent-templates/surveys-agent"}]},{"group":"More industries","icon":"industry","pages":[{"title":"Recruitment agent","sidebarTitle":"Recruitment agent","icon":"user-tie","iconType":"solid","href":"/agent-templates/recruitment-agent"},{"title":"Lead qualification agent","sidebarTitle":"Lead qualification agent","icon":"magnifying-glass-chart","iconType":"solid","href":"/agent-templates/lead-qualification-agent"},{"title":"Onboarding agent","sidebarTitle":"Onboarding agent","icon":"user-plus","iconType":"solid","href":"/agent-templates/onboarding-agent"},{"title":"Property tech agent","sidebarTitle":"Property tech agent","icon":"house","iconType":"solid","href":"/agent-templates/property-tech-agent"},{"title":"Weekend planner agent","sidebarTitle":"Weekend planner agent","icon":"calendar-days","iconType":"solid","href":"/agent-templates/weekend-planner-agent"}]}]}]},{"group":"Deploy","icon":"rocket","pages":[{"title":"Deploy your voice agent","sidebarTitle":"Overview","icon":"rocket","href":"/agents/deploy"},{"group":"Phone numbers","icon":"hashtag","root":{"title":"Buy phone numbers for your Bolna voice AI agents","sidebarTitle":"Buy a number from Bolna","icon":"phone-plus","iconType":"solid","href":"/buying-phone-numbers"},"expanded":false,"pages":[{"title":"How to get 140 \u0026 160-series phone numbers in India","sidebarTitle":"Indian 140/160 numbers","icon":"phone-office","iconType":"solid","href":"/obtaining-regulated-phone-numbers"},{"title":"Truecaller verification for phone numbers","sidebarTitle":"Truecaller verification","icon":"shield-check","iconType":"solid","href":"/truecaller-verification"},{"group":"Phone number compliance","icon":"file-shield","root":{"title":"Phone number compliance requirements for India - Bolna AI","sidebarTitle":"India DLT compliance","icon":"file-certificate","iconType":"solid","href":"/compliance-application/introduction"},"pages":[{"title":"Submit phone number compliance application","sidebarTitle":"Submit an application","icon":"file-arrow-up","iconType":"solid","href":"/compliance-application/how-to-submit-guide"}]}]},{"group":"Outbound calls","icon":"phone-arrow-up-right","root":{"title":"Make outbound calls using Bolna voice AI agents","sidebarTitle":"Single outbound call","icon":"phone-arrow-up-right","iconType":"solid","href":"/outbound/making-calls"},"expanded":false,"pages":[{"title":"Automate and schedule calls using batches","sidebarTitle":"Batch calling","icon":"file-spreadsheet","iconType":"solid","href":"/outbound/batch-calling"},{"title":"Batch calling quickstart","sidebarTitle":"Batch calling via API","icon":"layer-group","iconType":"solid","href":"/quickstarts/batch"},{"title":"Auto-retry for failed calls","sidebarTitle":"Auto-retry calls","icon":"arrow-rotate-right","iconType":"solid","href":"/outbound/auto-retry"},{"title":"Calling guardrails for outbound calls","sidebarTitle":"Calling guardrails","icon":"clock","iconType":"solid","href":"/outbound/calling-guardrails"},{"title":"Hangup and disconnect Bolna voice AI calls","sidebarTitle":"End a call automatically","description":"Discover methods to disconnect live Bolna Voice AI calls. Implement time-based hangups, custom prompts, and personalized messages for seamless call termination.","icon":"phone-hangup","iconType":"solid","href":"/outbound/hangup-calls"}]},{"title":"A/B test voice agent prompts and versions","sidebarTitle":"A/B testing","icon":"flask","iconType":"solid","href":"/agents/ab-testing"},{"group":"Workflows","icon":"diagram-project","root":{"title":"Workflows introduction","sidebarTitle":"Workflows overview","description":"Build multi-step outreach sequences that combine voice agent calls, WhatsApp messages, API calls, waits and retries, driven entirely through the Bolna API.","icon":"diagram-project","iconType":"solid","href":"/workflows/introduction"},"tag":"BETA","expanded":false,"pages":[{"title":"Workflow quickstart","sidebarTitle":"Quickstart","icon":"rocket","iconType":"solid","href":"/workflows/quickstart"},{"group":"Build a workflow","icon":"pen-ruler","root":{"title":"Using the workflow editor","sidebarTitle":"Using the editor","icon":"pen-to-square","iconType":"solid","href":"/workflows/using-the-editor"},"expanded":false,"pages":[{"title":"Workflow nodes","sidebarTitle":"Nodes","icon":"circle-nodes","iconType":"solid","href":"/workflows/nodes"},{"title":"Workflow callback node","sidebarTitle":"Callback node","icon":"reply","iconType":"solid","href":"/workflows/callback"},{"title":"Pause a journey until your system responds","sidebarTitle":"Callback API guide","icon":"hourglass-half","iconType":"solid","href":"/workflows/callback-guide"},{"title":"Workflow conditions and variables","sidebarTitle":"Conditions \u0026 variables","icon":"code-branch","iconType":"solid","href":"/workflows/conditions-and-variables"},{"title":"Send WhatsApp messages with AiSensy","sidebarTitle":"WhatsApp via AiSensy","icon":"whatsapp","iconType":"brands","href":"/workflows/aisensy-whatsapp"}]},{"title":"Workflow campaigns","sidebarTitle":"Campaigns","icon":"bullhorn","iconType":"solid","href":"/workflows/campaigns"},{"group":"Workflow webhooks","icon":"webhook","root":{"title":"Workflow execution webhook","sidebarTitle":"Workflow webhooks","icon":"bell","iconType":"solid","href":"/workflows/execution-webhook"},"expanded":false,"pages":[{"title":"Execution webhook payload","sidebarTitle":"Webhook payload","openapi":"api-reference/openapi.yml webhook executionTerminal","href":"/api-reference/workflow-webhooks/execution-terminal"}]},{"title":"Graph agents vs workflows: which one to use","sidebarTitle":"Compare to graph agents","icon":"code-branch","iconType":"solid","href":"/graph-agent/graph-agents-vs-workflows"}]},{"group":"Inbound calls","icon":"phone-arrow-down-left","root":{"title":"Handle inbound calls with Bolna voice AI agents","sidebarTitle":"Receive inbound calls","icon":"phone-arrow-down-left","iconType":"solid","href":"/inbound/receiving-calls"},"expanded":false,"pages":[{"title":"Inbound quickstart","sidebarTitle":"Receive your first call","icon":"phone-arrow-down-left","iconType":"solid","href":"/quickstarts/inbound"},{"title":"Set up IVR for inbound calls in Bolna voice AI","sidebarTitle":"Build an IVR menu","icon":"phone-intercom","iconType":"solid","href":"/inbound/ivr"},{"title":"DTMF (keypad input)","sidebarTitle":"Keypad input (DTMF)","icon":"keyboard","iconType":"solid","href":"/inbound/dtmf"},{"title":"Dynamically identify incoming callers","sidebarTitle":"Identify the caller","icon":"filter-list","iconType":"solid","href":"/customizations/identify-incoming-callers"},{"title":"Block incoming callers by number or prefix","sidebarTitle":"Block unwanted callers","icon":"phone-slash","iconType":"solid","href":"/customizations/block-incoming-callers"}]},{"group":"Web calls","icon":"globe","root":{"title":"Web Call SDK","sidebarTitle":"Web Call SDK","icon":"browser","iconType":"solid","href":"/developer-resources/sdks/web-call"},"expanded":false,"pages":[{"title":"Web Call SDK starter templates","sidebarTitle":"Starter templates","icon":"copy","iconType":"solid","href":"/developer-resources/sdks/web-call-templates"},{"title":"Web Call SDK API reference","sidebarTitle":"SDK API reference","icon":"code","iconType":"solid","href":"/developer-resources/sdks/web-call-api"}]},{"group":"Telephony providers","icon":"tower-cell","root":{"title":"Explore telephony integrations with Bolna voice AI","sidebarTitle":"Choose a telephony setup","icon":"scale-balanced","href":"/supported-telephony-providers"},"expanded":false,"pages":[{"group":"Twilio","icon":"phone","root":{"title":"Integrate Twilio with Bolna for enhanced calling","sidebarTitle":"Using Twilio","icon":"phone","href":"/twilio"},"pages":[{"title":"Securely link your Twilio account to Bolna","sidebarTitle":"Connect account","icon":"plug","href":"/twilio/connect-provider"},{"title":"Make outbound calls via Twilio with Bolna voice AI","sidebarTitle":"Outbound calls","icon":"phone-arrow-up-right","href":"/twilio/outbound-calls"},{"title":"Using Twilio for inbound calls","sidebarTitle":"Inbound calls","icon":"phone-arrow-down-left","href":"/twilio/receive-calls"},{"title":"Serving Twilio on prem","sidebarTitle":"On-premise","icon":"server","href":"/twilio/on-prem"}]},{"group":"Plivo","icon":"phone","root":{"title":"Enhance call capabilities with Bolna's Plivo integration","sidebarTitle":"Using Plivo","icon":"phone","href":"/plivo"},"pages":[{"title":"Link your Plivo account to Bolna for voice AI","sidebarTitle":"Connect account","icon":"plug","href":"/plivo/connect-provider"},{"title":"Initiate outbound calls via Plivo with Bolna voice AI","sidebarTitle":"Outbound calls","icon":"phone-arrow-up-right","href":"/plivo/outbound-calls"},{"title":"Using Plivo for inbound calls","sidebarTitle":"Inbound calls","icon":"phone-arrow-down-left","href":"/plivo/receive-calls"}]},{"group":"Exotel","icon":"phone","root":{"title":"Exotel integration with Bolna voice AI","sidebarTitle":"Using Exotel","icon":"phone","href":"/exotel"},"pages":[{"title":"Connect your Exotel account to Bolna","sidebarTitle":"Connect account","icon":"plug","href":"/exotel/connect-provider"},{"title":"Setup Exotel with Bolna for outbound calling","sidebarTitle":"Outbound app setup","icon":"gear","href":"/exotel/setup-app-for-outbound-calls"},{"title":"Setup Exotel with Bolna for inbound calling","sidebarTitle":"Inbound app setup","icon":"gears","href":"/exotel/setup-app-for-inbound-calls"},{"title":"Make outbound calls with Exotel and Bolna","sidebarTitle":"Outbound calls","icon":"phone-arrow-up-right","href":"/exotel/outbound-calls"}]},{"group":"Vobiz","icon":"phone","root":{"title":"Vobiz Integration: Make AI Outbound Calls with Vobiz","sidebarTitle":"Using Vobiz","icon":"phone","href":"/vobiz"},"pages":[{"title":"Link your Vobiz account to Bolna for voice AI","sidebarTitle":"Connect account","icon":"plug","href":"/vobiz/connect-provider"},{"title":"Initiate outbound calls via Vobiz with Bolna voice AI","sidebarTitle":"Outbound calls","icon":"phone-arrow-up-right","href":"/vobiz/outbound-calls"}]}]},{"group":"SIP trunks","icon":"network-wired","root":{"title":"SIP trunks: connect your own carrier to Bolna","sidebarTitle":"Overview","icon":"network-wired","iconType":"solid","href":"/sip-trunking/overview"},"expanded":false,"pages":[{"title":"Connect your carrier to Bolna with a SIP trunk","sidebarTitle":"Connect your carrier","icon":"plug","iconType":"solid","href":"/sip-trunking/connect-carrier"},{"group":"Carrier guides","icon":"building","root":{"title":"SIP trunk carrier guides","sidebarTitle":"Carrier guides","icon":"building","iconType":"solid","href":"/sip-trunking/carriers"},"expanded":false,"pages":[{"title":"Connect Acefone to Bolna with a SIP trunk","sidebarTitle":"Acefone","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/acefone-logo.png","iconType":"solid","href":"/sip-trunking/acefone"},{"title":"Connect Airtel to Bolna with a SIP trunk","sidebarTitle":"Airtel","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/airtel-logo.svg","iconType":"solid","href":"/sip-trunking/airtel"},{"title":"Connect Plivo to Bolna with a SIP trunk","sidebarTitle":"Plivo","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/plivo-logo.svg","iconType":"solid","href":"/sip-trunking/plivo"},{"title":"Connect Telnyx to Bolna with a SIP trunk","sidebarTitle":"Telnyx","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/telnyx-logo.png","iconType":"solid","href":"/sip-trunking/telnyx"},{"title":"Connect Twilio to Bolna with a SIP trunk","sidebarTitle":"Twilio","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/twilio-logo.svg","iconType":"solid","href":"/sip-trunking/twilio"},{"title":"Connect Vobiz to Bolna with a SIP trunk","sidebarTitle":"Vobiz","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/vobiz-logo.svg","iconType":"solid","href":"/sip-trunking/vobiz"},{"title":"Connect VoiceLink to Bolna with a SIP trunk","sidebarTitle":"VoiceLink","icon":"https://mintlify.s3.us-west-1.amazonaws.com/bolna-54a2d4fe/images/icons/voicelink-logo.png","iconType":"solid","href":"/sip-trunking/voicelink"}]},{"title":"Receive inbound calls on a SIP trunk","sidebarTitle":"Inbound calls","icon":"phone-arrow-down-left","iconType":"solid","href":"/sip-trunking/inbound-calls"},{"title":"Make outbound calls through a SIP trunk","sidebarTitle":"Outbound calls","icon":"phone-arrow-up-right","iconType":"solid","href":"/sip-trunking/outbound-calls"},{"title":"Transfer SIP trunk calls to a person","sidebarTitle":"Call transfer","icon":"phone-arrow-right","iconType":"solid","href":"/sip-trunking/call-transfer"},{"title":"SIP headers on SIP trunk calls","sidebarTitle":"SIP headers","icon":"tag","iconType":"solid","href":"/sip-trunking/sip-headers"},{"title":"Troubleshoot SIP trunk calls","sidebarTitle":"Troubleshooting","icon":"stethoscope","iconType":"solid","href":"/sip-trunking/troubleshooting"},{"group":"Legacy SIP trunks (deprecated)","icon":"box-archive","root":{"title":"Bring your own SIP trunk to Bolna voice AI","sidebarTitle":"How SIP trunking works","icon":"utility-pole","iconType":"solid","href":"/sip-trunking/introduction"},"expanded":false,"pages":[{"title":"SIP trunking for voice AI on Bolna","sidebarTitle":"SIP trunking explained","icon":"tower-broadcast","iconType":"solid","href":"/sip-trunking/tutorials/introduction"},{"group":"Create a trunk","icon":"plus","expanded":false,"pages":[{"title":"Create a SIP trunk on Twilio for Bolna","sidebarTitle":"Twilio trunk","icon":"server","iconType":"solid","href":"/sip-trunking/tutorials/twilio-setup"},{"title":"Create a SIP trunk on Plivo for Bolna","sidebarTitle":"Plivo trunk","icon":"server","iconType":"solid","href":"/sip-trunking/tutorials/plivo-setup"}]},{"group":"Register on Bolna","icon":"link","root":{"title":"Set up your SIP trunk on Bolna","sidebarTitle":"Set up your trunk","icon":"screwdriver-wrench","iconType":"solid","href":"/sip-trunking/byot-setup"},"expanded":false,"pages":[{"title":"SIP trunk API examples and field reference","sidebarTitle":"API examples \u0026 fields","icon":"code","iconType":"solid","href":"/sip-trunking/api-examples"}]},{"title":"Receive inbound calls via your SIP trunk","sidebarTitle":"Inbound via SIP","icon":"phone-arrow-down-left","iconType":"solid","href":"/sip-trunking/byot-inbound-calls"},{"title":"Custom SIP headers on inbound BYOT calls","sidebarTitle":"Custom SIP headers","icon":"tag","iconType":"solid","href":"/sip-trunking/byot-inbound-headers"},{"title":"Make outbound calls via your SIP trunk","sidebarTitle":"Outbound via SIP","icon":"phone-arrow-up-right","iconType":"solid","href":"/sip-trunking/byot-outbound-calls"}]}]}]},{"group":"Monitor","icon":"chart-line","pages":[{"title":"Monitor your voice agent","sidebarTitle":"Overview","icon":"chart-line","href":"/agents/monitor"},{"group":"Call history \u0026 analytics","icon":"chart-column","root":{"title":"Agent conversations, metrics \u0026 logs","sidebarTitle":"Call history","icon":"clock-rotate-left","iconType":"solid","href":"/agent-setup/call-history"},"expanded":false,"pages":[{"title":"How to read the call analytics dashboard","sidebarTitle":"Call analytics","icon":"chart-pie","iconType":"solid","href":"/agent-setup/call-analytics"}]},{"group":"Latency","icon":"gauge-high","root":{"title":"Latency in real-time voice AI","sidebarTitle":"Responses feel slow","icon":"gauge-high","iconType":"solid","href":"/concepts/latency"},"expanded":false,"pages":[{"title":"Understanding call latency metrics in Bolna voice AI","sidebarTitle":"Latency metrics","icon":"chart-bar","iconType":"solid","href":"/concepts/call-latencies"}]},{"group":"Webhooks \u0026 call status","icon":"webhook","root":{"title":"Receive Bolna voice AI call updates","sidebarTitle":"Results via webhooks","icon":"webhook","iconType":"solid","href":"/post-call/polling-call-status-webhooks"},"expanded":false,"pages":[{"title":"Execution payload reference","sidebarTitle":"Execution payload","icon":"brackets-curly","href":"/post-call/execution-payload"},{"title":"Check Bolna voice AI webhook delivery health","sidebarTitle":"Webhook delivery health","icon":"heart-pulse","href":"/post-call/webhook-delivery-health"},{"title":"Fetch agent executions using APIs","sidebarTitle":"Executions API","icon":"code","href":"/fetch-agent-executions"},{"title":"List of call statuses in Bolna voice AI","sidebarTitle":"Call statuses","icon":"ballot-check","iconType":"solid","href":"/post-call/list-phone-call-status"},{"title":"Termination reasons","sidebarTitle":"Termination reasons","icon":"flag-checkered","iconType":"solid","href":"/post-call/termination-reasons"},{"title":"List of call hangup statuses and codes in Bolna voice AI","sidebarTitle":"Hangup codes","icon":"phone-xmark","iconType":"solid","href":"/post-call/list-phone-call-hangup-status"}]},{"group":"Extractions","icon":"filter","root":{"title":"Using extractions in Bolna dashboard","sidebarTitle":"Extract call data","icon":"list-check","iconType":"solid","href":"/prompting/using-extractions"},"expanded":false,"pages":[{"title":"Testing extractions","sidebarTitle":"Test extractions","icon":"flask","iconType":"solid","href":"/prompting/testing-extractions"},{"title":"Extraction output format and results","sidebarTitle":"Output format \u0026 results","icon":"brackets-curly","iconType":"solid","href":"/prompting/extraction-output"}]}]},{"group":"Go live","icon":"flag-checkered","pages":[{"group":"Launch checklist","icon":"list-check","root":{"title":"Production readiness checklist for voice AI agents","sidebarTitle":"Readiness checklist","icon":"clipboard-check","iconType":"solid","href":"/production/readiness-checklist"},"expanded":false,"pages":[{"title":"Test a voice AI agent before calling real customers","sidebarTitle":"Test before launch","icon":"flask","iconType":"solid","href":"/production/test-before-calling-customers"},{"title":"Control cost per call on Bolna voice AI","sidebarTitle":"Control cost per call","icon":"scissors","iconType":"solid","href":"/production/control-cost-per-call"},{"title":"Handle failures and retries at scale","sidebarTitle":"Failures at scale","icon":"arrows-rotate","iconType":"solid","href":"/production/failures-and-retries-at-scale"}]},{"group":"Troubleshooting","icon":"wrench","root":{"title":"Troubleshoot Bolna voice AI calls","sidebarTitle":"Overview","icon":"screwdriver-wrench","iconType":"solid","href":"/troubleshooting/overview"},"expanded":false,"pages":[{"title":"The agent interrupts or talks over the caller","sidebarTitle":"Agent interrupts users","icon":"hand","iconType":"solid","href":"/troubleshooting/agent-interrupts-users"},{"title":"Agent mishears names, numbers or Indian language words","sidebarTitle":"Agent mishears words","icon":"ear-deaf","iconType":"solid","href":"/troubleshooting/agent-mishears-words"},{"title":"Audio is choppy, robotic, or only one side can hear","sidebarTitle":"Choppy or one-way audio","icon":"volume-xmark","iconType":"solid","href":"/troubleshooting/choppy-or-one-way-audio"},{"title":"Calls fail to connect or drop early","sidebarTitle":"Calls fail or drop","icon":"phone-slash","iconType":"solid","href":"/troubleshooting/calls-fail-or-drop-early"},{"title":"The call transfer did not work","sidebarTitle":"Transfer failed","icon":"phone-arrow-right","iconType":"solid","href":"/troubleshooting/call-transfer-failed"},{"title":"My webhook never arrived","sidebarTitle":"Webhook not received","icon":"webhook","iconType":"solid","href":"/troubleshooting/webhook-not-received"}]}]}]},{"tab":"Integrations","icon":"plug","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"API Reference","icon":"terminal","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Developers","icon":"toolbox","pages":[{"title":"Developers","href":"/developer-resources/overview"}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog/november-2026"}]}]},"basePath":"","title":"A/B test voice agent prompts and versions - Bolna Docs","buildId":"dpl_Aw98ji4XvBsgtZwL1VrkUF9ehFqz","deploymentId":"dpl_Aw98ji4XvBsgtZwL1VrkUF9ehFqz","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-0domioUa.js","DynamicMarkdown-BcGRTrw6.js","zoom-image-lightbox-DsiWwPWR.js","lightbox-handle-r17bVUz3.js"]}