Skip to main content

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