Navana text-to-speech
Navana is now a text-to-speech provider, built for Indian languages.- Two models:
navana-tts, andnavana-tts-fast, a distilled version that trades a little quality for speed - Ten languages: Hindi, Bengali, Gujarati, Kannada, Malayalam, Marathi, Odia, Tamil, Telugu and English
Default Femaleplus 55 named voices, and every voice speaks all ten languages- Pick Navana in the agent’s voice settings, or set
provider: "navana"through the API
Welcome message per language
Multilingual agents can now greet in each language. Give a language its own welcome message, and every call that starts in that language opens with it, in that language’s voice.- Dashboard: with two or more languages, each language gets an optional box under Agent Welcome Message in the Agent Tab. In the graph agent editor it’s Languages and Voice → Welcome message
- API: set
welcome_messageon a language inmultilingual_config.languages - The call uses the language passed with
agent_data.languageoragent_language, or the default language when none is passed - A language without its own message uses the agent’s welcome message, so existing agents are unchanged
- Variables work in every language’s message
Termination reason on every execution
Every execution now carriestermination_reason, one value that says what happened to the call attempt: answered and how it ended, not answered and why, or never dialed and why. It covers telephony calls, web calls and web chat, with the same 33 values for every telephony provider.- Top-level
termination_reasonin Get execution, the execution list endpoints and the execution webhook payload transfer_call_data.termination_reasonfor the transfer leg, in the same vocabulary- CSV reports add the
termination_reasonandtransfer_termination_reasoncolumns nullwhile a call is in progress, and for executions created before it was introduced on 26 October 2026statusanderror_messageare unchanged:statusstays the call’s lifecycle state, andtermination_reasonis the field to read for what happenedtelephony_data.hangup_reasonandhangup_bykeep their values, with two fixes: on inbound Vobiz callshangup_byreadsCallerwhen the caller hung up, and an auto-retry now starts with them cleared, so they always describe the current attempt- Each
retry_historyentry records how its attempt ended:termination_reason,hangup_reason,hangup_byandhangup_provider_code
Wait for a new number to activate
Providers sometimes take up to 3 minutes to activate a number after you buy it. During that time,POST /call from the number returns 429 with retry_after_seconds instead of placing a call that fails. Send the request again after that many seconds, or schedule the call for after the number activates.Calling from a newly bought number · Buy a phone numberWebhook delivery health
See whether your webhooks are reaching your server. Bolna now shows how many deliveries got through and how many failed over the last 14 days.- Across all agents: open Analytics under Monitor and switch the view to Webhook delivery. Pick an agent to narrow it down
- For one agent: click Delivery health on the agent’s Webhook Configuration card
- Day by day: a daily chart marks failures in red. Hover a day for its counts
- Download failures: get up to 10,000 recent failed deliveries as a CSV, with the call, status code, error and URL for each
Azure OpenAI models for extractions
Extraction categories can now run on Azure OpenAI. Pick anazure/ model for a category, and every extraction in it runs on Azure.- Models:
azure/gpt-4.1-mini,azure/gpt-4.1-nano,azure/gpt-4o-mini,azure/gpt-5-mini,azure/gpt-5.4-mini,azure/gpt-5.4-nanoandazure/gpt-5.6-luna, alongside the OpenAI and Gemini models - On Bolna’s Azure by default: nothing to set up
- On your own Azure resource: connect your Azure account and set the category’s
managed_byto"user". Your resource needs a deployment named after the model, for examplegpt-5.4-mini - Calls stay on the key you chose: an Azure agent with
managed_byset to"bolna"now runs on Bolna’s Azure even when your Azure account is connected
Control how your agent pronounces words
Give a voice a word list and the agent says brand names, acronyms, codes and place names the way you want, for exampleHDFC as “H D F C bank” or Pune as “Poona”. The list applies to everything the agent says, including the welcome message. Add words under Pronunciation on the agent’s Languages tab.- Voices: ElevenLabs, and Cartesia
sonic-3and newer - Per language: on multilingual agents each language has its own list, so one word can sound different in English and Hindi, and the agent switches lists when it switches language
- Bulk import: import a CSV or JSON file, see what’s new or changed in a preview, then save
- Limits: up to 100 words per agent across all languages. A word can be up to 50 characters, and how it sounds up to 100
- Over the API: set
pronunciation_ruleson the synthesizer, and callGET /v2/agent/{agent_id}/pronunciation-dictionary-statusto know when the list is applied to calls - Your own provider key: the list is created in your ElevenLabs or Cartesia account, and over the API you can also attach dictionaries you made there
Debug a call in one request
GET /executions/{execution_id}/debug returns what the dashboard’s Debugging view shows for a call in a single response, so you no longer stitch together the execution, its per-turn latency and its raw logs yourself.- Three sections:
execution(status, errors, cost, telephony and latency data, extractions, tool calls and transfers),progression(latency for each turn and the structured transcript) andlogs(transcriber, LLM, synthesizer and function-call logs, plus webhook deliveries) - Only what you need: pass
?include=execution,logsto fetch some of the sections - Sized for AI assistants: empty fields are dropped, and each LLM request after the first carries only the text it adds to the one before
- No all-or-nothing failures: a section that has no data for the call, or fails to load, comes back
nullwith the reason underunavailable - MCP server: the new
get_execution_debugtool calls it, so your assistant can diagnose a call with one tool call
Kalpa kalpa-tts-1
Kalpa’skalpa-tts-1 replaces kalpa-tts-multilingual-beta-v0.1 as the default Kalpa model. It speaks English, Hindi and code-switched Hinglish from one model, with every voice the beta model had. The default voice is now Arjun.- Existing agents on
kalpa-tts-multilingual-beta-v0.1need no change: Kalpa serves that name withkalpa-tts-1 - Over the API: set
modeltokalpa-tts-1
Custom carrier headers on SIP trunks
Agents on SIP trunks can read your carrier’s customX- headers, such as X-CALLERNO or X-UCID, as prompt variables, along with P-Asserted-Identity, Diversion and Call-ID. Map a header to a variable in the agent’s SIP Header Variables. Up to 20 X- headers per call are passed, each with a value of at most 256 characters, and header names match regardless of case.SIP headers · Migrate to SIP trunksSIP trunks: bring your own carrier
Connect your own SIP carrier to Bolna and run voice agents on the numbers you already have. Create a SIP trunk, give your carrier Bolna’s address and IPs, and add your numbers. Inbound calls to a number go to the agent you assign to it, or to the trunk’s default inbound agent, and an agent on thetrunk telephony provider places outbound calls through your carrier.- Carriers: Plivo, Telnyx, Twilio, Exotel, Vobiz, Vonage, or any standards-based SIP carrier. The dashboard’s carrier preset fills in what it can and shows a setup checklist
- Inbound: your carrier sends calls to
trunk.bolna.ai, and only the carrier IPs you add to the trunk are accepted - Outbound: calls leave through your carrier’s gateways, with digest credentials if your carrier issues them
- Echo tests: test calls in both directions play your voice back, so you can confirm audio before an agent is involved
- Channels: each trunk has a channel count shared by inbound calls, outbound calls and transfers, and queued outbound calls wait for a free channel
- On the call: keypad input (DTMF), call transfer through the same trunk, and the inbound
P-Asserted-IdentityandDiversionheaders available to the agent as variables - Over the API:
/trunk/trunkscreates and manages trunks with their gateways, carrier IPs and numbers, andPATCH /trunk/numbers/{number_id}assigns an agent to a number - MCP server: 19 new tools, from
create_trunkandget_trunk_connection_detailstostart_trunk_test_call
Static nodes can end the call
A static node in a graph agent can now hang up once its message has played, so a fixed goodbye no longer leaves the caller in silence until the timeout. Turn on End call after this message on a static node with no transitions.- Over the API: set
"function_call": "end_call"on a static node with no edges - Nodes with transitions keep routing: the setting only applies to a static node with nowhere else to go
- Interruptible goodbyes: with Allow interruption on for the final call message, a caller who talks over the goodbye keeps the call going
Sarvam Bulbul v4 Flash
Sarvam’s newest text-to-speech model,bulbul:v4-flash, is now available alongside bulbul:v3. Pick Bulbul v4 Flash under Sarvam on the agent’s Languages tab.- 222 voices: each built for one language and use case, such as
aparna_hi_customerorsimran_en_sales, including 13 Hindi-English code-mixed voices - 9 languages: English, Hindi, Bengali, Gujarati, Kannada, Marathi, Punjabi, Tamil and Telugu. Malayalam and Odia stay on
bulbul:v3 - Faster first audio than
bulbul:v3 - Over the API: set
modeltobulbul:v4-flashwith a v4 Flashvoice_id. v3 voice ids do not work on v4 Flash
Bring your own TTS
Voice agents can now speak through your own text-to-speech server, as long as it speaks the OpenAI speech API. Add a voice under Settings → Integrations → TTS → Custom TTS with your endpoint, model and key, then pick it on the agent’s Languages tab.- Any OpenAI-compatible server: self-hosted open-weight models, vLLM-Omni or a hosted gateway, called at
POST {base_url}/audio/speech - Your key, your bill: the key is stored encrypted, and Bolna does not charge for speech from a custom TTS
- Over the API:
POST,GETandDELETE /user/tts/custom
Manage compliance applications over the API
Compliance applications, which you need before buying Indian phone numbers, can now be managed with your API key, not just from the dashboard. Submit an application, track its review and delete it from your own systems.- Submit:
POST /compliance/createtakes your business details, CIN certificate and GST certificate (PDFs up to 10 MB) asmultipart/form-data - Track:
GET /compliance/listandGET /compliance/{compliance_id}return each application’sstatus(submitted,acceptedorrejected) and itsrejection_reason - Delete:
DELETE /compliance/{compliance_id}removes an application and its documents so you can resubmit with corrected details - Buy numbers: pass an accepted application’s
idascompliance_application_idtoPOST /phone-numbers/buy
Bolna is now a Claude connector
Bolna is listed in Claude’s connector directory, so you can manage your voice agents from a Claude chat without an API key or a config file. Open the Bolna connector, click Connect, and sign in with your Bolna account.- Where it works: Claude on the web, desktop and mobile
- What it can do: create, inspect, update and delete agents, read call executions and batches, and check your account
- What it can’t: place calls or manage phone numbers, knowledge bases, dispositions, SIP trunks, sub-accounts or workflows. For those, connect the full MCP server at
https://mcp.bolna.ai/api/mcp
Web search for voice agents
Agents can now look up current information on the web during a call, so callers get answers about news, prices, scores and anything else that changes after a model is trained. Add the new Web Search tool from the Tools tab, and the agent searches only when a question needs it.- Providers: choose OpenAI, Exa, Firecrawl or Parallel as the search provider
- API keys: OpenAI needs no key, since the agent uses its own OpenAI key if it runs on one, otherwise Bolna’s. Exa, Firecrawl and Parallel use your own key from that provider
- Settings: set a pre-tool message for the agent to say while it searches, and how many results it reads before answering
- Over the API: configure it with
web_searchin the agent’stools_config
Define what a graph agent extracts, and get the values after the call
Graph agent edges that extract values now take a definition for each value, and the values a call collected can be returned on the execution and webhook.- Per-value definitions: an extract parameter can carry a
descriptionthat the routing model sees on that key and, for text values,allowed_valuesthat the answer must come from, so expression edges can match one exact value - In the dashboard: each parameter in the edge inspector’s Extract parameters section has What to extract and Allowed values fields
- Values after the call:
node_extracted_dataon the execution and webhook holds the latest value per key the call collected - Reserved names (
reasoning,confidence,recipient_data,detected_language, and names starting with_) are now rejected when an agent is saved
AssemblyAI session settings and agent context
AssemblyAI agents can now tune how AssemblyAI ends the caller’s turn and handles noise, and AssemblyAI now hears what your agent just said before the caller answers it.- Agent context: on the Universal-3 models, Bolna gives AssemblyAI the agent’s last spoken reply as context for the caller’s next turn, which helps on short answers, spelled-out names and numbers. It is automatic, and after a barge-in it uses only the part of the reply the caller heard
- Session settings: a new
assemblyai_configon the transcriber setsmode,min_turn_silence,max_turn_silence,interruption_delay,vad_thresholdand voice focus. Each is optional and keeps AssemblyAI’s default when unset - In the dashboard: Mode, VAD threshold and Longest pause in a turn are under Advanced settings in the Transcription section of the Languages tab, next to the Deepgram Flux and OpenAI settings, which moved there too
- Long contexts in any script: a
contextof up to 1,750 characters now works in Hindi and other non-Latin scripts too; long non-Latin contexts used to fail to connect
Keyword biasing for Sarvam speech-to-text
Sarvam’ssaaras:v4 transcriber now reads your agent’s keywords, so the brand names, places and product terms your Indian-language callers say are recognised instead of the nearest common word. Until now Sarvam took only context; on saaras:v4 you can set both.- Add terms in the Keywords box in your agent’s Languages tab, or pass
keywordson the transcriber over the API - Up to 50 terms of up to 64 characters each, and a list over either limit is rejected when you save the agent
saaras:v3and older Sarvam models have no keyterm support, so the box stays disabled there; keywords already saved on the agent apply once you move it tosaaras:v4

