Skip to main content
Navana is now a text-to-speech provider, built for Indian languages.
  • Two models: navana-tts, and navana-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 Female plus 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
Navana

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_message on a language in multilingual_config.languages
  • The call uses the language passed with agent_data.language or agent_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
Welcome message per language · Multilingual config reference

Termination reason on every execution

Every execution now carries termination_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_reason in Get execution, the execution list endpoints and the execution webhook payload
  • transfer_call_data.termination_reason for the transfer leg, in the same vocabulary
  • CSV reports add the termination_reason and transfer_termination_reason columns
  • null while a call is in progress, and for executions created before it was introduced on 26 October 2026
  • status and error_message are unchanged: status stays the call’s lifecycle state, and termination_reason is the field to read for what happened
  • telephony_data.hangup_reason and hangup_by keep their values, with two fixes: on inbound Vobiz calls hangup_by reads Caller when the caller hung up, and an auto-retry now starts with them cleared, so they always describe the current attempt
  • Each retry_history entry records how its attempt ended: termination_reason, hangup_reason, hangup_by and hangup_provider_code
Termination reasons · Hangup codes

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 number

Webhook 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
Webhook delivery health · Webhook not received

Azure OpenAI models for extractions

Extraction categories can now run on Azure OpenAI. Pick an azure/ 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-nano and azure/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_by to "user". Your resource needs a deployment named after the model, for example gpt-5.4-mini
  • Calls stay on the key you chose: an Azure agent with managed_by set to "bolna" now runs on Bolna’s Azure even when your Azure account is connected
Azure OpenAI models · Azure OpenAI

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 example HDFC 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-3 and 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_rules on the synthesizer, and call GET /v2/agent/{agent_id}/pronunciation-dictionary-status to 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
Pronunciation · Get pronunciation status

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) and logs (transcriber, LLM, synthesizer and function-call logs, plus webhook deliveries)
  • Only what you need: pass ?include=execution,logs to 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 null with the reason under unavailable
  • MCP server: the new get_execution_debug tool calls it, so your assistant can diagnose a call with one tool call
Get debug bundle · MCP tool list

Kalpa kalpa-tts-1

Kalpa’s kalpa-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.1 need no change: Kalpa serves that name with kalpa-tts-1
  • Over the API: set model to kalpa-tts-1
Kalpa Labs

Custom carrier headers on SIP trunks

Agents on SIP trunks can read your carrier’s custom X- 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 trunks

SIP 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 the trunk 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-Identity and Diversion headers available to the agent as variables
  • Over the API: /trunk/trunks creates and manages trunks with their gateways, carrier IPs and numbers, and PATCH /trunk/numbers/{number_id} assigns an agent to a number
  • MCP server: 19 new tools, from create_trunk and get_trunk_connection_details to start_trunk_test_call
Legacy SIP trunks are deprecated. They keep working and no sunset date is set; the migration guide lists what changes at your carrier.SIP trunks · Connect your carrier · SIP trunks API · Migrate to SIP trunks · MCP tool list

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
Static nodes

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_customer or simran_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 model to bulbul:v4-flash with a v4 Flash voice_id. v3 voice ids do not work on v4 Flash
Sarvam

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, GET and DELETE /user/tts/custom
Bring your own TTS · Add a custom TTS

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/create takes your business details, CIN certificate and GST certificate (PDFs up to 10 MB) as multipart/form-data
  • Track: GET /compliance/list and GET /compliance/{compliance_id} return each application’s status (submitted, accepted or rejected) and its rejection_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 id as compliance_application_id to POST /phone-numbers/buy
Compliance APIs · India DLT compliance

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
The Bolna MCP and Skills pages also have shorter URLs now, such as bolna.ai/docs/mcp-server and bolna.ai/docs/skills. Old links redirect.Claude connector · MCP server · MCP quickstart

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_search in the agent’s tools_config
Web search · Tools Tab

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 description that the routing model sees on that key and, for text values, allowed_values that 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_data on 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
Inline data extraction · Get execution

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_config on the transcriber sets mode, min_turn_silence, max_turn_silence, interruption_delay, vad_threshold and 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 context of up to 1,750 characters now works in Hindi and other non-Latin scripts too; long non-Latin contexts used to fail to connect
AssemblyAI transcriber · Languages Tab

Keyword biasing for Sarvam speech-to-text

Sarvam’s saaras: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 keywords on 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:v3 and older Sarvam models have no keyterm support, so the box stays disabled there; keywords already saved on the agent apply once you move it to saaras:v4
Sarvam transcriber · Keywords and context