# Configure Multilingual Agent Prompts and Hangup Settings Source: https://www.bolna.ai/docs/agent-setup/agent-tab Set up your Bolna Voice AI agent's welcome message, write per-language prompts with dynamic variables, configure language switching, and define intelligent call hangup conditions. The Agent Tab controls your agent's welcome message, prompts, and conversation behavior. Add multiple languages, set a primary, and write a dedicated prompt for each. Agent Tab showing welcome message, language tabs with English as primary alongside Dutch and Hindi, prompt editor with token count, language switching instructions, advanced settings, and prompt variables for testing *** ## Agent Welcome Message The first thing callers hear when they connect. Agent Welcome Message input with sample greeting and hint showing variable_name syntax in curly braces Brief greetings work best. Long announcements feel robotic. Personalize with `{variable_name}`, e.g. `{customer_name}`. *** ## Agent Prompt Each language gets its own prompt. Select a language tab and write the prompt for that language. The agent activates the matching prompt when speaking in that language during a call. Agent Prompt with English marked as Primary, Hindi and Dutch language tabs, prompt editor showing Personality and Identity sections, token counter at 14111, and hint text for variable and module syntax ### Managing Languages Languages are **synced** between the Agent Tab and [Audio Tab](/docs/agent-setup/audio-tab). Adding or removing a language in either tab updates both. Each language can also have its own [STT and TTS providers](/docs/agent-setup/audio-tab) configured in the Audio Tab. Click **+ Add Language** to create a new language tab. Click the **crown icon** next to any language to make it primary. The primary language is what the agent starts every conversation in, marked with **(Primary)** in the tab. Select each language tab and write its prompt. Click the **x** on a tab to remove it from both tabs. Tooltip showing Make Hindi primary when clicking the crown icon next to Hindi ### Prompt Structure | Section | Purpose | Example | | ---------------- | --------------- | ------------------------------------------- | | **Personality** | Tone and feel | "warm, perceptive, and results-driven" | | **Context** | Role background | "You are calling on behalf of Acme Corp..." | | **Instructions** | Tasks and flow | "Ask for their order number first..." | | **Guardrails** | Restrictions | "Never discuss competitor products..." | The editor shows a **token count** in the bottom-right to help you stay within LLM limits. ### Variable Syntax | Syntax | Purpose | How to use | | ----------------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | `{variable_name}` | Insert or define variables | Type `{` to open the variable picker. Select an existing variable or type a new name to create one. | | `@` | Insert prompt modules, custom functions, or variables | Type `@` to browse and select existing modules, functions, or variables. You cannot create new items with `@`. | Select existing variables or **create new ones** by typing a name. Values are passed via API or CSV at call time. Select existing [prompt modules](/docs/prompting-guide#prompt-modules), [custom functions](/docs/tool-calling/custom-function-calls), or variables. Cannot create new items. ### Browse Modules Click the **Browse Modules** button in the top-right of the prompt section to open the full modules library. Browse by category (Collection, Optional, Flow, Sector, Universal), preview what each module does, and insert it directly into your prompt. See the [Prompting Guide](/docs/prompting-guide#prompt-modules) for the full list of available modules. *** ## Language Switching Instructions A **single shared field** that applies to all languages. Describes when the agent should switch languages mid-call. | What to include | Example | | ---------------------- | ----------------------------------------------------- | | **Trigger conditions** | "Switch to Hindi if the user speaks in Hindi" | | **Fallback behavior** | "Fall back to English if the language is unsupported" | | **Default rule** | "Respond in the language the user is currently using" | Write these once. They apply across all languages automatically. *** ## Per-Language Advanced Settings Each language tab has its own expandable **Advanced Settings** section. Language Switching Instructions field, Advanced Settings for English expanded with Agent Name placeholder AI Assistant and Handoff Message reading Let me connect you with agent_name who speaks language | Field | Description | | ------------------- | ------------------------------------------------------------------------------------------------------------------- | | **Agent Name** | Name the agent uses to identify itself in this language | | **Handoff Message** | Message spoken when switching **away from** this language. Supports variables like `{agent_name}` and `{language}`. | ### Prompt Variables for Testing When you use `{variable_name}` in your prompt, those variables **automatically appear** as input fields in the testing section. Fill in test values to preview how the prompt behaves before going live. Prompt variables for testing section showing Asia Kolkata UTC plus 05 30 timezone selector and auto-detected variable fields for referrer_name, referee_name, city, and user_number The **Timezone** selector (e.g., `Asia/Kolkata UTC+05:30`) is a separate field that sets the timezone context for test calls. Settings are independent. Hindi's Agent Name and Handoff Message do not affect English. Always set a Handoff Message per language. Without it, transitions feel abrupt. *** ## Hangup Using Prompt Let your agent decide when to end calls based on conversation context instead of silence detection or timeouts. Hangup using a prompt toggle enabled with conversation completion conditions and closing lines in English and Hindi Turn on **Hangup using a prompt**. Write conditions for when a conversation is complete. For multilingual agents, include closing lines in each language. ``` A conversation is considered complete if any of the following conditions are met: User is not interested: The assistant has said the following closing line: Conversation Closing (English): "That is sad to hear. But no worries if you would ever want to learn more give me a cool." Conversation Closing (Hindi): "ये सुनकर अफ़सोस हुआ। लेकिन कोई बात नहीं, अगर आप कभी और जानना चाहें तो मुझे call कर लें।" The user has responded after that with any of the following phrases: "goodbye", "bye", "thank you", "thanks", "ok", "okay", or similar. The last message in the transcript must be from the user. ``` Without this, calls end only on silence detection or timeouts. *** ## Next Steps Configure the language model and knowledge bases Set up voice, transcription, and languages Best practices for writing prompts Dynamic personalization with context # Set Up Webhooks and Post-Call Analytics Source: https://www.bolna.ai/docs/agent-setup/analytics-tab Configure webhooks, call summarization, and data extraction for Bolna Voice AI. Push data to your CRM from every call. ## What is the Analytics Tab? The Analytics Tab is where you configure webhooks for real-time data and post-call processing tasks. Automatically summarize conversations, extract structured data, and push execution data to your systems. Analytics Tab showing webhook configuration and post-call tasks *** ## Configuration Options ### Push Execution Data to Webhook **Don't miss real-time updates!** Configure a webhook to receive all execution data as calls happen — essential for CRM integrations and live dashboards. Enter your webhook URL to automatically receive all execution data for this agent. Click **[See all events](/docs/polling-call-status-webhooks)** to view the complete list of webhook event types you can receive. *** ### Post Call Tasks Choose tasks to execute after the agent conversation is complete. Post Call Tasks showing extraction configuration form Automatically generate a summary of every conversation. Great for quick review and logging. Toggle on to enable automatic conversation summarization. Create custom extraction templates organized by categories to automatically capture structured data from call transcripts. Extractions interface showing categories and extraction templates **Extractions** allow you to automatically capture structured data from call transcripts. Organize extractions into categories and define custom questions to extract specific information like lead quality, appointment details, customer sentiment, and more. ### Key Features **Categories** - Organize related extractions together (e.g., "Agent Handover", "Visit Details", "Lead Qualification") **Extraction Templates** - Define what data to capture with: * **Name** - Descriptive identifier (e.g., "Call Outcome", "Customer Sentiment") * **Extraction Prompt** - Instructions guiding the LLM on what to extract * **Answer Type** - Choose between Free Text (open-ended) or Pre-defined (categorical options) * **Model** - Select LLM for extraction processing (default: gpt-4.1-mini) **Testing** - Validate extractions against sample or real transcripts before production deployment Test Extractions modal showing sample transcripts and extraction results ### Common Extraction Categories Detect when calls need human intervention Extract budget, timeline, decision-maker info Capture appointment times, dates, confirmation status Analyze satisfaction levels and feedback Learn how to create and manage extraction templates, configure answer types, and test extractions in the [Using Extractions](/docs/using-extractions) guide. *** ## Use Cases Automatically update customer records after calls Extract qualification data from sales calls Capture required data points for regulations Analyze conversation outcomes and metrics *** ## Next Steps Configure inbound call settings Add function tools and APIs View call logs and transcripts Learn about webhook events # Configure Voice and Transcription Settings Source: https://www.bolna.ai/docs/agent-setup/audio-tab Set up languages, speech-to-text, and text-to-speech for your Bolna Voice AI agent. Pick providers, select voices, clone custom voices, and tune audio quality. The Audio Tab controls how your agent listens and speaks. Configure languages, choose transcription and voice providers, and tune audio quality. For multilingual agents, you can select **different STT and TTS providers per language**. Full Audio Tab view with Languages section showing English Primary, Hindi, and Dutch, Speech-to-Text with Deepgram nova-3 and Keywords, Text-to-Speech with ElevenLabs Eleven Turbo v2.5, Nila voice, and tuning sliders for Buffer Size, Speed rate, Similarity Boost, Stability, and Style Exaggeration *** ## Languages Set the languages your agent can understand and speak. Pick a primary language and add secondary languages for multilingual conversations. Bolna Audio Tab language configuration showing English marked as Primary, Dutch and Hindi as secondary languages, and an Add Language button on the right * **Primary Language** is marked with `(Primary)` and is the language your agent uses at the start of every conversation. The main prompt and multilingual settings are tied to this language. * **Secondary Languages** allow the agent to understand and respond when a caller switches languages mid-call. * Click **+ Add Language** to add more languages. * Remove any language by clicking the **x** next to it. ### Changing the Primary Language Click the **crown icon** next to any secondary language to make it primary. A tooltip will confirm the action, for example "Make Hindi primary". This sets the selected language as the default for the main prompt and multilingual settings. Tooltip showing Make Hindi primary option when clicking the crown icon next to Hindi in the Bolna language selector ### Supported Languages | Language | Code | | ---------- | ---- | | English | `en` | | Hindi | `hi` | | Bengali | `bn` | | Assamese | `as` | | French | `fr` | | Gujarati | `gu` | | Indonesian | `id` | | Kannada | `kn` | | Malay | `ms` | | Malayalam | `ml` | | Marathi | `mr` | | Odia | `od` | | Punjabi | `pa` | | Spanish | `es` | | Tamil | `ta` | | Telugu | `te` | | Urdu | `ur` | | Dutch | `nl` | For agents that handle multiple languages in a single call, see the [Multilingual Support](/docs/customizations/multilingual-languages-support) guide. *** ## Speech-to-Text Controls how your agent converts the caller's spoken words into text before the LLM processes them. For multilingual agents, each language can have its own STT provider and model. Select a language tab to configure its transcription settings independently. Different languages may perform better with different providers. For example, use **Sarvam** for Hindi and **Deepgram** for English. Bolna Speech-to-Text settings showing Provider dropdown set to Azure, Model dropdown set to Azure, and Keywords input field with Bruce:100 as an example keyword boost entry ### Provider and Model Choose a transcription provider from the **Provider** dropdown, then pick the specific model from the **Model** dropdown. | Provider | What it offers | | -------------- | -------------------------------------------------------------- | | **AssemblyAI** | Real-time transcription with strong punctuation and formatting | | **Azure** | Microsoft Azure Speech Services | | **Deepgram** | High-accuracy, low-latency transcription with keyword boosting | | **ElevenLabs** | Transcription powered by ElevenLabs | | **Gladia** | Multilingual transcription service | | **Google** | Google Cloud Speech-to-Text | | **OpenAI** | OpenAI Whisper-based transcription | | **Sarvam** | Optimized for Indian languages like Hindi, Tamil, and Telugu | | **Smallest** | Lightweight, fast transcription provider | ### Keywords Boost recognition accuracy for specific words the transcriber might miss, such as brand names, product names, or technical terms. Enter keywords in the format `word:boost_value` (e.g., `Bruce:100`). Keyword boosting is **only available with Deepgram**. The Keywords field has no effect when using other providers. *** ## Text-to-Speech Controls how your agent sounds when speaking to the caller. For multilingual agents, each language can have its own TTS provider, model, and voice. Select a language tab to configure voice settings independently. Bolna Text-to-Speech settings showing Sarvam provider, Bulbul v2 model, Anjura voice selected, with sliders for Buffer Size at 220, Speed rate at 1, Similarity Boost at 0.65, Stability at 0.7, and Style Exaggeration at 0 ### Provider, Model, and Voice Choose from **AzureTTS**, **Cartesia**, **ElevenLabs**, or **Sarvam**. Select the model that fits your latency and quality needs (e.g., ElevenLabs `eleven_turbo_v2_5` for low latency). Click the **Voice** dropdown to browse all voices for the selected provider and model. ### Browsing Voices Click the Voice dropdown to see a searchable list of all available voices. Filter by gender using the **All**, **Male**, **Female**, and **Neutral** tabs. Each voice shows a **play button** so you can preview it before selecting. Bolna voice selector dropdown with search bar, gender filter tabs for All Male Female and Neutral, and voices including Chef DJ, Viraj, Ben, Roger, Matt, and Angelica with play buttons ### Preview Welcome Message Click **Preview welcome message** to hear the selected voice speak your agent's welcome prompt (configured in the [Agent Tab](/docs/agent-setup/agent-tab)). This lets you test how the voice sounds before going live. ### Voice Tuning Parameters Fine-tune your agent's voice using the sliders below the voice selector. Available parameters may vary by provider. | Parameter | What it controls | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Buffer Size** | Audio buffered before playback begins. Higher values produce smoother audio but increase delay. Values between 150 and 250 work well for real-time conversations. | | **Speed Rate** | Speaking speed. `1` is natural pace, above `1` is faster, below `1` is slower. | | **Similarity Boost** | How closely the output matches the original voice sample. Higher values are more faithful but may reduce naturalness. | | **Stability** | Voice consistency across sentences. Higher values keep tone steady, lower values add expressive variation. | | **Style Exaggeration** | Emphasis on stylistic characteristics. `0` is neutral, higher values add more personality. | High **Buffer Size** improves quality but adds latency. If callers notice a delay before the agent speaks, lower this value. *** ## Adding and Cloning Voices Click the **Add Voice +** button in the Text-to-Speech section to add a custom voice by ID or clone one from an audio sample. Custom voice uploads are **only available for ElevenLabs and Cartesia**. ### Add a Voice by ID Use this when you already have a voice ID from your provider's voice library. Bolna Add Voice modal with Add by ID tab active, ElevenLabs selected as provider, Voice ID input field with placeholder pNInz6obpgDQGcFmaJgB, and a blue Add voice button Make sure the **Add by ID** tab is selected in the dialog. Select **ElevenLabs** or **Cartesia**. Paste the voice ID from your provider. For ElevenLabs, find IDs in the [ElevenLabs voice library](https://elevenlabs.io/voice-library). The voice will appear in the Voice dropdown for all your agents. ### Clone a Voice Create a new voice by uploading an audio recording. Useful for maintaining a consistent brand voice or using a specific person's voice (with their permission). Bolna Clone Voice modal with Cartesia selected as provider, Voice name placeholder Sales Assistant Voice, Description placeholder Warm male Indian accent, Sample language Hindi, and drag-and-drop upload area for audio files up to 10 MB Switch to the **Clone Voice** tab in the dialog. Select **ElevenLabs** or **Cartesia**. Add a **Voice name** (e.g., "Sales Assistant Voice") and **Description** (e.g., "Warm male Indian accent"). Choose the language of your audio sample. Drag and drop your audio file or click **click to browse**. Audio files only, maximum 10 MB. The platform processes your sample and adds the new voice to the Voice dropdown. ### Supported Languages for Voice Cloning Both ElevenLabs and Cartesia support the same set of languages for cloning: | Language | Code | Language | Code | | ------------------- | ---- | ---------- | ---- | | English | `en` | Hindi | `hi` | | Bengali | `bn` | Assamese | `as` | | Dutch | `nl` | French | `fr` | | Gujarati | `gu` | Indonesian | `id` | | Kannada | `kn` | Malay | `ms` | | Malayalam | `ml` | Marathi | `mr` | | Odia | `od` | Punjabi | `pa` | | Spanish | `es` | Tamil | `ta` | | Telugu | `te` | Urdu | `ur` | | Indian Multilingual | - | | | For best results, use a clean recording with no background noise, a single speaker, and at least 30 seconds of continuous speech. *** ## Next Steps Configure interruption handling, endpointing, and latency Set up agents that speak multiple languages in a single call Create a custom voice from an audio sample Explore Deepgram transcription models and keyword boosting # Configure Telephony and Call Settings Source: https://www.bolna.ai/docs/agent-setup/call-tab Set up telephony providers, noise cancellation, voicemail detection, and call management for Bolna Voice AI. Configure timeouts and call restrictions. ## What is the Call Tab? The Call Tab is where you configure how your agent handles phone calls. Set up your telephony provider, enable call features like noise cancellation and voicemail detection, and manage call timing and hangup behavior. Call Tab showing telephony provider, call features, timing restrictions, and call management *** ## Configuration Options ### Telephony Provider & Call Features Configure your telephony provider and toggle powerful call capabilities. Telephony Provider dropdown, Noise Cancellation, Voicemail Detection, Keypad Input DTMF, and Auto Reschedule toggles Filter background noise for clearer calls (adjustable intensity) Detect voicemail systems to avoid awkward messages Accept touch-tone input for IVR-style menus Automatically retry failed calls later Connect your own telephony provider in [Providers](/docs/getting-started/providers) for more control and cost savings. *** ### Ambient Noise Add background ambient noise to your calls for a more natural, human-like experience. Ambient noise is available for **Plivo** and **Vobiz** telephony providers. Ambient Noise dropdown with coffee-shop, office-ambience, and call-center options Bolna supports both **preset** and **custom** ambient noise tracks. Select a preset or upload your own custom track to use as background noise during calls. #### Preset Tracks Three preset tracks are available to all users out of the box: | Track | Description | | ------------------- | ---------------------------------------------- | | **Coffee Shop** | Background sounds of a coffee shop environment | | **Office Ambience** | Subtle office background noise | | **Call Center** | Call center ambient sounds | Set ambient noise to **None** to disable it (default). #### Custom Tracks You can upload your own custom ambient noise tracks for a personalized experience: * **Supported formats**: `wav`, `mp3` * **Maximum file size**: 10 MB * You can upload, list, and delete your custom tracks from the dashboard or via the API * Custom tracks are private to your account, while presets are available to everyone Ambient noise is only supported with **Plivo** and **Vobiz** telephony providers. *** ### Final Call Message Configure the last message your agent says before disconnecting. Final Call Message section with language selector and message input field Choose the language for your final message (supports multi-language). Enter a warm, professional closing (e.g., "Thank you for your time. Goodbye!") Click **+ Add** to include final messages in other languages. A warm, professional final message leaves a positive lasting impression on callers. *** ### Call Management Configure how and when calls should end. Call Management section with Hangup on User Silence and Total Call Timeout sliders | Setting | Description | Recommended | | -------------------------- | -------------------------------------- | ------------------------------------------ | | **Hangup on User Silence** | Auto-hangup after X seconds of silence | 6-10 seconds | | **Total Call Timeout** | Maximum call duration in seconds | 300s (5 min) for support, higher for sales | **Set reasonable timeouts** to manage costs and prevent stuck calls. Very long calls can indicate issues or abandoned calls. *** ### Outbound Call Timing Restrictions **Compliance matters!** Many regions have laws restricting when you can make outbound calls. Enable timing restrictions to stay compliant with local regulations. Toggle on to restrict outbound calls to specific time windows and avoid calling during prohibited hours. *** ## Next Steps Add function tools and APIs Configure latency and interruptions Connect Twilio, Plivo, or Exotel Set up inbound call routing # Configure Voice AI Latency and Interruptions Source: https://www.bolna.ai/docs/agent-setup/engine-tab Fine-tune your Bolna Voice AI agent's performance. Configure transcription accuracy, interruption thresholds, response latency, and user detection. ## What is the Engine Tab? The Engine Tab controls the core performance settings of your voice AI agent. Fine-tune transcription accuracy, interruption behavior, response timing, and user presence detection for optimal conversation quality. Engine Tab showing Transcription & Interruptions, Response Latency, and User Online Detection settings *** ## Configuration Options ### Transcription & Interruptions Control how speech is captured and processed during conversations. Transcription settings showing Generate precise transcript toggle and Number of words to wait slider for interruption handling Enable for higher accuracy transcription. Essential for compliance and call analytics. Number of words to wait before considering user input as an interruption. **Stopwords like "Stop", "Wait", "Hold On"** will always pause the agent immediately, regardless of the interruption threshold. *** ### Response Latency Configure how quickly your agent responds to user input. Response latency settings showing Custom response rate with Endpointing and Linear delay sliders in milliseconds | Setting | Description | Impact | | --------------------- | ------------------------------------ | ----------------------------------- | | **Response Rate** | Choose preset or Custom | Balanced, Fast, or Custom timing | | **Endpointing (ms)** | Wait time before generating response | Lower = faster but may cut off user | | **Linear Delay (ms)** | Accounts for mid-sentence pauses | Prevents premature responses | **Lower latency isn't always better!** Setting values too low may cause the agent to interrupt users mid-sentence. Start with defaults and adjust based on testing. For **natural conversations**, use Endpointing around 200-300ms and Linear Delay around 400-500ms. *** ### User Online Detection Detect when users go silent and automatically re-engage them. User Online Detection toggle with customizable message and invoke timer in seconds Toggle **User Online Detection** to check if the user is still on the call. Customize the prompt (e.g., "Hey, are you still there?") with multi-language support. Set **Invoke message after (seconds)** to control when the check triggers. Set the timer between **8-15 seconds** to give users enough time to respond without seeming impatient. *** ## Best Practices Use default settings initially and adjust based on real call feedback Make test calls to experience the timing and interruption handling Customer support may need longer pauses; sales may prefer faster responses Review call recordings to identify timing issues *** ## Next Steps Configure telephony and call features Set up voice and transcription providers Configure language model settings Review call logs and recordings # Set Up Inbound Calls & Caller Matching Source: https://www.bolna.ai/docs/agent-setup/inbound-tab Configure inbound call settings for Bolna Voice AI. Match callers using CSV, Google Sheets, or API. Set up spam prevention and preload customer data. ## What is the Inbound Tab? The Inbound Tab is where you configure settings for receiving incoming calls. Match callers to your database, preload user data before the call starts, and set up spam prevention to protect your agents from abuse. Inbound Tab showing database matching, call restrictions, and spam prevention settings *** ## Database for Inbound Phone Numbers Match incoming calls to users and preload their data before the call starts. Choose from three data source options: Connect your own API to fetch user data dynamically when a call comes in. Inbound settings with internal API option showing API Endpoint URL and Auth Token fields Choose **"Use your internal APIs"** from the dropdown. Provide your API endpoint that will receive the caller data request. Enter your Bearer token for secure authentication. ### Query Parameters Bolna automatically passes these parameters to your API: | Parameter | Description | | ---------------- | ------------------------------- | | `contact_number` | The caller's phone number | | `agent_id` | Your agent's identifier | | `execution_id` | Unique identifier for this call | **Your API must return a JSON response** with user details. Bolna will inject this data directly into your agent's prompt for personalized conversations. ### Example API Request ```bash theme={"system"} curl -X GET "https://your-api.com/user-data?contact_number=+919876543210&agent_id=abc123&execution_id=xyz789" \ -H "Authorization: Bearer YOUR_AUTH_TOKEN" \ -H "Content-Type: application/json" ``` ### Example API Response ```json theme={"system"} { "user_name": "John Doe", "account_status": "premium", "last_purchase": "2026-01-15" } ``` Authentication uses Bearer token and is stored securely by Bolna. Upload a CSV file containing your user database. Inbound settings with CSV option showing Upload CSV File button Choose **"Use a CSV"** from the dropdown. Click **Upload CSV File** and select your file. The CSV file **must include a `contact_number` column** containing phone numbers. These numbers will be matched against the caller's phone number. ### CSV Format Example ```csv theme={"system"} contact_number,user_name,account_type +919876543210,John Doe,premium +918765432109,Jane Smith,basic ``` Connect a public Google Sheet as your user database. Inbound settings with Google Sheet option showing URL and Sheet Name fields Choose **"Use a public Google Sheet"** from the dropdown. Paste the URL of your public Google Sheet. Specify the exact name of the sheet tab to use. The sheet **must be public** and should include a `contact_number` column containing phone numbers. *** ## Call Restrictions Toggle on **"Allow Calls Only from Database"** to restrict incoming calls to only phone numbers found in your chosen database. Unknown callers will be rejected. *** ## Spam Prevention Settings Protect your agent from spam and abuse. | Setting | Description | | ---------------------------------- | ------------------------------------------------------------ | | **Maximum Calls per Phone Number** | Limit calls from a single number. Set to `-1` for unlimited. | | **Always-Allow List** | Phone numbers that bypass all call limits. | Add your support team and VIP customers to the Always-Allow List to ensure they're never blocked. *** ## Use Cases Only allow calls from registered customers Preload customer data for personalized service Limit repeated calls from the same number Fetch real-time customer data via API *** ## Next Steps Configure prompts and welcome message Set up telephony and call management Complete inbound setup guide Purchase and manage phone numbers # Choose and Configure LLM Models for Voice AI Source: https://www.bolna.ai/docs/agent-setup/llm-tab Select and configure the language model for your Bolna Voice AI agent. Choose from OpenAI, Azure, Anthropic, and connect knowledge bases. ## What is the LLM Tab? The LLM Tab is where you select and configure the intelligence behind your voice AI agent. Choose your language model provider, adjust response parameters, and connect knowledge bases for enhanced conversations. LLM Tab showing model selection, parameters, and knowledge base options *** ## Configuration Options ### Choose LLM Model Select your AI provider and model for conversation intelligence. Choose LLM model with Azure provider and gpt-4.1-mini cluster selected Choose from Azure, OpenAI, Anthropic, Groq, and more Pick the specific model (e.g., `gpt-4.1-mini cluster`) Connect your own provider keys in [Providers](/docs/getting-started/providers) to reduce costs and access more models. *** ### Model Parameters Fine-tune how your agent generates responses. Model Parameters section showing Tokens and Temperature sliders with Knowledge Base dropdown | Parameter | Description | Recommended | | -------------------- | ------------------------------ | ------------------------------ | | **Tokens Generated** | Max tokens per LLM output | 300-500 for concise responses | | **Temperature** | Controls creativity/randomness | 0.3-0.5 for balanced responses | **Keep temperature low** (0.3-0.5) if you want consistent, controlled responses. Higher temperature increases creativity but may cause deviation from your prompt instructions. *** ### Add Knowledge Base Connect your knowledge bases to give your agent accurate, contextual information. Knowledge base dropdown showing connected URLs and PDFs with Add new knowledgebase option Open the **"Select knowledge bases"** multi-select dropdown. Check one or more knowledge bases (PDFs, URLs) to connect. Click **"Add new knowledgebase"** to create and upload new content. Knowledge bases enable your agent to answer questions with accurate, up-to-date information from your documents and URLs. Connect multiple knowledge bases for comprehensive coverage. Create knowledge bases in the [Knowledge Base](/docs/getting-started/knowledge-base) section by uploading PDFs or adding URLs. *** ## Next Steps Create and manage knowledge bases Configure prompts and welcome message Set up voice, transcription, and languages Connect your own LLM provider # Configure Voice AI Agents in Bolna Source: https://www.bolna.ai/docs/agent-setup/overview Complete guide to configuring Bolna Voice AI agents. Customize prompts, test conversations, and deploy agents for inbound and outbound calls. ## What is Agent Setup? Agent Setup is where you configure and fine-tune your Voice AI agents. Access it from the [Bolna Platform](https://platform.bolna.ai/) after creating or selecting an agent. Bolna Platform Agent Setup interface showing Your Agents sidebar, configuration tabs, prompts, and testing options *** ## Your Agents Sidebar The left sidebar shows all your agents and provides quick access to create or import agents. Agent Setup sidebar showing Import and New Agent buttons with searchable agent list | Action | Description | | --------------- | ------------------------------------------------------------------------------ | | **+ New Agent** | Create a new agent using Auto Build, Pre-built templates, or from scratch | | **Import** | Import an existing agent configuration using an [agent ID](/docs/copy-import-agent) | | **Search** | Quickly find agents by name | | **Agent List** | Click any agent to open its configuration | New agents are created in **draft** status until you save them. *** ## Agent Header The header bar displays key information and quick actions for your selected agent. Agent header showing name, Agent ID, Share button, cost per minute, routing region, and provider status indicators | Element | Description | | ------------------- | -------------------------------------------------------- | | **Agent Name** | Your agent's display name | | **Agent ID** | Copy for API integrations | | **Share** | Generate a shareable link for team collaboration | | **Cost per min** | Estimated cost breakdown per minute | | **Routing** | Active routing region (e.g., India routing) | | **Provider Status** | Status indicators for Transcriber, LLM, Voice, Telephony | Receive a test call on your phone number Configure this agent for inbound calls *** ## Configuration Tabs Configure every aspect of your agent using the **8 specialized tabs**. Eight configuration tabs: Agent, LLM, Audio, Engine, Call, Tools, Analytics, Inbound Prompts & welcome message Model & knowledge base Voice & transcription Latency & interruptions Telephony & voicemail Functions & APIs Webhooks & extraction Caller matching *** ## Testing & Saving Test your agent before deploying and save your changes. Action panel showing See all call logs, Save agent button, Chat with agent, and Test via browser options ### Testing Options | Method | Description | Best For | | ----------------------- | ------------------------------------- | ------------------------------------ | | **Chat with agent** | Text-based conversation testing | Quick prompt iteration and debugging | | **Get call from agent** | Receive a test call on your phone | Real-world voice experience | | **Test via browser** | Make calls directly from your browser | Testing without using phone minutes | **Pro tip:** Use "Chat with agent" for quick iterations, then validate with a real phone call before deploying! ### Save & Manage | Action | Description | | --------------------- | ---------------------------------------------------------------- | | **Save agent** | Save your configuration — changes only take effect after saving! | | **See all call logs** | View [call history](/docs/call-history), recordings, and transcripts | | **Delete** | Remove the agent (use with caution) | **Remember to save!** Your changes won't apply until you click **Save agent**. *** ## Quick Links Step-by-step guide to creating your first agent Import existing agent configurations Purchase phone numbers for inbound calls View call logs, recordings, and transcripts *** ## Next Steps Configure prompts and welcome message Choose your language model and knowledge base Set up voice and transcription Upload documents for context-aware responses # Connect Function Tools and API Integrations Source: https://www.bolna.ai/docs/agent-setup/tools-tab Add built-in function tools and custom API integrations to your Bolna Voice AI agent. Enable calendar booking, call transfers, and connect any external API endpoint. The Tools Tab is where you connect external tools and APIs that your agent's LLM can call during live conversations. This lets your agent take real-time actions like booking appointments, transferring calls, or fetching data from your own backend. Bolna Tools Tab with Function Tools for LLM Models header, Add Tool section showing Calendar Availability, Book Appointment, and Transfer Call cards with Add buttons, and Add a Custom Tool section with Write manually and Generate from cURL options *** ## Built-in Tools Bolna provides ready-to-use tools for common voice agent workflows. Click **+ Add** next to any tool to enable it for your agent. Check open meeting slots from Cal.com in real-time during a call Create calendar bookings directly via Cal.com during the conversation Route the call to a human agent or another phone number Connect any external API endpoint with a custom function schema *** ## Custom Functions For integrations beyond the built-in tools, use **Custom Functions** to connect any API endpoint. You can create a custom function in two ways: Bolna Add a Custom Tool section with Custom Function card showing Write manually button and Generate from cURL button side by side ### Write Manually Click **Write manually** to open a JSON editor where you define the function schema from scratch. This gives you full control over the function name, description, parameters, and API configuration. Bolna custom function configuration modal with a dark code editor showing JSON schema with name test, description, pre_call_message, parameters with startTime and endTime properties, key set to custom_task, and value object with method GET, url, api_token, and headers fields The fields `name`, `description`, `key`, and `method` are mandatory. The `key` must always be set to `"custom_task"`. Do not change this value. ### Generate from cURL Click **Generate from cURL** to paste an existing cURL command. Bolna will parse the request and auto-generate a function schema that you can review and edit before adding it to your agent. Bolna Generate function from cURL modal with a text area containing a sample curl GET request to api.bolna.ai with Authorization Bearer header, Cancel button in red and Generate function button in blue After clicking **Generate function**, Bolna parses the cURL and produces a ready-to-edit function configuration: Bolna generated custom function configuration showing name get_agent, description Called when user asks to get agent details by agent ID, pre_call_message One moment while I fetch the details, parameters object, key custom_task, value with method GET, url https://api.bolna.ai/v2/agent/agent_id, api_token, and headers The cURL import is a starting point. Always review the generated function name, description, and parameters before submitting. See the [Custom Functions guide](/docs/tool-calling/custom-function-calls#generate-from-curl) for a detailed walkthrough. *** ## Managing Added Tools Once you add a tool, it appears as a configurable card in the Tools Tab. | Action | How to do it | | ------------- | ------------------------------------------------------------- | | **Configure** | Click the tool card to edit its parameters and API connection | | **Delete** | Click the delete icon on the tool card to remove it | *** ## Next Steps Full schema reference, examples, and best practices Set up call routing to human agents Configure webhooks and post-call analytics Pass dynamic data into your function tools # Agents Library Source: https://www.bolna.ai/docs/agents-library Browse and import pre-built Voice AI agent templates. Deploy production-ready agents for support, sales, scheduling, and more in minutes. ## What is the Agents Library? The Bolna Agents Library provides **ready-to-use Voice AI agent templates** that you can import and customize for your specific use case. Each template comes pre-configured with optimized prompts, workflows, and settings, allowing you to deploy production-ready agents in minutes. Browse agents by industry below and click **Import this agent** to add it to your account. Adjust the prompts, [context variables](/docs/using-context), and settings in the [Agent Setup](/docs/agent-setup/agent-tab) to match your needs. Test using the Playground chat or by [making test calls](/docs/making-outgoing-calls). Go live for [inbound](/docs/receiving-incoming-calls) or [outbound](/docs/making-outgoing-calls) calling. Every agent below works in **English + Hindi** and can be imported with one click. *** ## Pre-built Agent Templates Provides 24/7 inbound call answering for FAQs, order tracking, and customer triage. **Industry:** E-Commerce **Languages:** English + Hindi **Call to test:** [+918035317400](tel:+918035317400) Import this agent → Calls customers with abandoned carts to recover lost sales through personalized outreach. **Industry:** E-Commerce **Languages:** English + Hindi **Call to test:** [+918035317449](tel:+918035317449) Import this agent → Handles last-mile logistics tasks like cash-on-delivery confirmation and delivery scheduling. **Industry:** E-Commerce **Languages:** English + Hindi **Call to test:** [+918035317450](tel:+918035317450) Import this agent → Keeps users engaged with feature upgrades, product launches, and important updates. **Industry:** BFSI\ **Languages:** English + Hindi **Call to test:** [+918035317403](tel:+918035317403) Import this agent → Automates reminders for EMIs, collections, form-filling deadlines, and payment follow-ups. **Industry:** BFSI\ **Languages:** English + Hindi **Call to test:** [+918035317402](tel:+918035317402) Import this agent → Helps fintech companies sell credit cards through intelligent Hindi conversations. **Industry:** BFSI\ **Languages:** English Import this agent → Helps fintech companies sell loans through intelligent Hindi conversations and financial expertise. **Industry:** BFSI\ **Languages:** English Import this agent → Answers every call to handle clinic, hotel, and office scheduling automatically. **Industry:** Hospitality **Languages:** English + Hindi **Call to test:** [+918035317405](tel:+918035317405) Import this agent → Conducts automated NPS, feedback, and product surveys with detailed personalized questioning. **Industry:** Hospitality **Languages:** English + Hindi **Call to test:** [+918035317408](tel:+918035317408) Import this agent → Schedules salon appointments and collects client information for beauty businesses. **Industry:** Hospitality **Languages:** English Import this agent → Screens, interviews, and onboards candidates at scale with intelligent voice conversations. **Industry:** Recruitment **Languages:** English + Hindi **Call to test:** [+918035317441](tel:+918035317441) Import this agent → Calls every lead to ask qualifying questions, answer FAQs, and warmly introduce the business. **Industry:** Ed Tech **Languages:** English + Hindi **Call to test:** [+918035317443](tel:+918035317443) Import this agent → Conducts personalized guidance calls to warmly onboard users into health tech platforms. **Industry:** Health Tech **Languages:** English + Hindi **Call to test:** [+918035317448](tel:+918035317448) Import this agent → Qualifies property leads (owner or broker) and collects detailed property information. **Industry:** Real Estate **Languages:** English Import this agent → Helps users plan weekends and vacations with personalized travel and leisure recommendations. **Industry:** Real Estate **Languages:** English Import this agent → *** ## Quick Reference | Agent | Industry | Languages | Import | | ------------------- | ----------- | --------------- | ------------------------------------------------------------------- | | Customer Support | E-Commerce | English + Hindi | [Import →](https://bolna.ai/a/4f0d937f-3d07-479b-9352-9f3271285d8a) | | Cart Abandonment | E-Commerce | English + Hindi | [Import →](https://bolna.ai/a/57ad261e-2bbc-4fb4-aefd-74b92ed1bed5) | | COD Confirmation | E-Commerce | English + Hindi | [Import →](https://bolna.ai/a/42a04bee-a4e9-442c-bf85-c6e6064ad976) | | Recruitment Agent | Recruitment | English + Hindi | [Import →](https://bolna.ai/a/9a2faf53-00b8-4213-8f8c-cad6011d9f9b) | | Lead Qualification | Ed Tech | English + Hindi | [Import →](https://bolna.ai/a/a8ff62ed-a86e-4881-80cd-5593d1391afb) | | Onboarding Agent | Health Tech | English + Hindi | [Import →](https://bolna.ai/a/3f5b1997-17cc-4a14-9e02-a90ba0dfeb5c) | | Announcements Agent | BFSI | English + Hindi | [Import →](https://bolna.ai/a/09344ad0-0991-440b-89ff-51ba4fe7d7b1) | | Reminders Agent | BFSI | English + Hindi | [Import →](https://bolna.ai/a/88bb2f3c-cfc0-4f3d-b0a2-6ac962ba9737) | | Front Desk Agent | Hospitality | English + Hindi | [Import →](https://bolna.ai/a/98183718-4bb6-457f-8e0f-9c0fa322bbba) | | Surveys Agent | Hospitality | English + Hindi | [Import →](https://bolna.ai/a/e3f31313-c28c-452e-9026-70edd7042691) | | Salon Booking Agent | Hospitality | English | [Import →](https://bolna.ai/a/547e8f2d-d231-4fc6-a9f1-b90801d672b8) | | Property Tech Agent | Real Estate | English | [Import →](https://bolna.ai/a/d3dbc421-b964-4c12-8afa-e087e440cb3e) | | Weekend Planner | Real Estate | English | [Import →](https://bolna.ai/a/00b05a0f-d451-4afe-b55f-7e2a3fa4896d) | | Sales - Credit Card | BFSI | English | [Import →](https://bolna.ai/a/68762ade-7e39-4b06-96e6-0d98863fbd0b) | | Sales - Loans | BFSI | English | [Import →](https://bolna.ai/a/29780b7b-876e-40a6-96bd-069b8409dedb) | *** ## Next Steps Build a custom agent from scratch Import or duplicate existing agents Configure prompts, voice, and tools # Create Voice AI Agent API (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/create POST /agent Learn how to create new agents with Bolna APIs, enabling customized tasks, prompts, and configurations for Bolna voice AI agents. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). # Retrieve Voice AI Agent Details API (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/get GET /agent/{agent_id} Retrieve detailed Voice AI agent information, including configuration, status, and tasks, using Bolna APIs. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). # List all Voice AI Agents API (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/get_all GET /agent/all List all Voice AI agents under your account, along with their names, statuses, and creation dates, using Bolna APIs. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). # Get All Voice AI Agent Executions API Source: https://www.bolna.ai/docs/api-reference/agent/get_all_agent_executions GET /agent/{agent_id}/executions Access all execution records for a specific agent, providing insights into performance and past interactions with Bolna APIs. # Bolna Voice AI Agent APIs Overview (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/overview Explore Bolna Voice AI Agent APIs overview, featuring endpoints for creating, managing, and executing autonomous voice agents. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). ## Endpoints ``` POST /agent GET /agent PUT /agent/:agent_id PATCH /agent/:agent_id GET /agent/all ``` ## Agent Object Attributes ### `agent_config` * `agent_name` *string* **(required)**
Name of the agent * `agent_welcome_message` *string* **(required)**
Initial agent welcome message. you can pass dynamic values here using variables encloed within `{}` * `webhook_url` *string* **(required)**
Get real-time details of the call progress and call data on a webhook. All supported events are listed in [Poll call data using webhooks](/docs/polling-call-status-webhooks) * `tasks` *array* **(required)**
Definitions and configuration for the agentic tasks ### `agent_prompts`
Prompts to be provided to the agent. # Patch Update to Voice AI Agent API (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/patch_update PATCH /agent/{agent_id} Learn how to partially update properties. Update Bolna Voice AI agent name, welcome message, webhook URL, voice settings, and prompts, using this endpoint. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). # Update Voice AI Agent API (deprecated) Source: https://www.bolna.ai/docs/api-reference/agent/update PUT /agent/{agent_id} Update agent configurations, tasks, and prompts to refine behavior and capabilities using Bolna Voice AI agent APIs. These APIs have now been deprecated. Please use the latest [**v2 APIs**](/docs/api-reference/agent/v2/overview). # Create Voice AI Agent API Source: https://www.bolna.ai/docs/api-reference/agent/v2/create POST /v2/agent Learn how to create new agents with Bolna APIs, enabling customized tasks, prompts, and configurations for Bolna voice AI agents. # Delete Voice AI Agent API Source: https://www.bolna.ai/docs/api-reference/agent/v2/delete DELETE /v2/agent/{agent_id} Use Bolna APIs to delete agents and their related data, ensuring proper cleanup of batches, executions, and configurations. This deletes **ALL** agent data including all batches, all executions, etc. # Retrieve Voice AI Agent Details API Source: https://www.bolna.ai/docs/api-reference/agent/v2/get GET /v2/agent/{agent_id} Retrieve detailed Voice AI agent information, including configuration, status, and tasks, using Bolna APIs. # Retrieve Voice AI Agent Execution API Source: https://www.bolna.ai/docs/api-reference/agent/v2/get_agent_execution GET /agent/{agent_id}/execution/{execution_id} Fetch specific execution details of a Voice AI agent, including conversation times, statuses, and metrics, via Bolna APIs. # List all Voice AI Agents API Source: https://www.bolna.ai/docs/api-reference/agent/v2/get_all GET /v2/agent/all List all Voice AI agents under your account, along with their names, statuses, and creation dates, using Bolna APIs. # Get All Voice AI Agent Executions API Source: https://www.bolna.ai/docs/api-reference/agent/v2/get_all_agent_executions GET /v2/agent/{agent_id}/executions Access all execution records for a specific agent, providing insights into performance and past interactions with Bolna APIs. ## Pagination This API supports pagination using the `page_number` and `page_size` query parameters. You can utilize `has_more` in the API response to determine if you should fetch the next page. You can learn more about it from the [pagination documentation](/docs/api-reference/pagination). # Bolna Voice AI Agent APIs Overview Source: https://www.bolna.ai/docs/api-reference/agent/v2/overview Explore Bolna Voice AI Agent APIs overview, featuring endpoints for creating, managing, and executing autonomous voice agents. ## Endpoints ``` POST /v2/agent GET /v2/agent PUT /v2/agent/:agent_id GET /v2/agent/all ``` ## Agent Object Attributes ### `agent_config` * `agent_name` *string* **(required)**
Name of the agent * `agent_welcome_message` *string* **(required)**
Initial agent welcome message. you can pass dynamic values here using variables encloed within `{}` * `webhook_url` *string* **(required)**
Get real-time details of the call progress and call data on a webhook. All supported events are listed in [Poll call data using webhooks](/docs/polling-call-status-webhooks) * `tasks` *array* **(required)**
Definitions and configuration for the agentic tasks ### `agent_prompts`
Prompts to be provided to the agent. # Patch Update to Voice AI Agent API Source: https://www.bolna.ai/docs/api-reference/agent/v2/patch_update PATCH /v2/agent/{agent_id} Learn how to partially update properties. Update Bolna Voice AI agent name, welcome message, webhook URL, voice settings, and prompts, using this endpoint. Currently, only the following agent attributes can be updated for the `PATCH` update. * `agent_name` * `agent_welcome_message` * `webhook_url` * `synthesizer` * `agent_prompts` * `ingest_source_config` * `telephony_provider` If you are patching with `telephony_provider` set to `sip-trunk`, the next step is to [set the inbound agent](/docs/api-reference/inbound/agent) to map your SIP trunk phone number to an agent for receiving inbound calls. # Stop Agent Queued Calls API Source: https://www.bolna.ai/docs/api-reference/agent/v2/stop POST /v2/agent/{agent_id}/stop Use Bolna APIs to stop all queued calls for a specific agent, preventing any pending calls from being executed. This stops **ALL** the queued calls for a given agent. This endpoint stops all queued calls for the specified agent. Any calls that are currently in the queue waiting to be executed will be cancelled and will not be processed. # Update Voice AI Agent API Source: https://www.bolna.ai/docs/api-reference/agent/v2/update PUT /v2/agent/{agent_id} Update agent configurations, tasks, and prompts to refine behavior and capabilities using Bolna Voice AI agent APIs. # Create Batch API Source: https://www.bolna.ai/docs/api-reference/batches/create POST /batches Discover how to create a batch for Bolna Voice AI agent by uploading a CSV file containing user contact numbers and prompt variable details for users. # Delete Batch API Source: https://www.bolna.ai/docs/api-reference/batches/delete DELETE /batches/{batch_id} Understand how to delete a specific batch using its ID, effectively removing it from your scheduled or active batches. # List Batch Executions API Source: https://www.bolna.ai/docs/api-reference/batches/executions GET /batches/{batch_id}/executions Learn how to retrieve all executions from a batch, providing detailed information on each call's outcome and metrics. # Get Batch API Source: https://www.bolna.ai/docs/api-reference/batches/get_batch GET /batches/{batch_id} Find out how to retrieve details of a specific batch, including its creation time, status, call status and scheduled execution time. # List All Batches API Source: https://www.bolna.ai/docs/api-reference/batches/get_batches GET /batches/{agent_id}/all Explore how to list all batches associated with a particular Bolna Voice AI agent, providing an overview of their statuses, schedules and other relevant details # Batch APIs Overview Source: https://www.bolna.ai/docs/api-reference/batches/overview Understand how to create and schedule multiple Bolna Voice AI calls together using Bolna Batch APIs for efficient call management. ## Endpoints ``` POST /batches POST /batches/schedule POST /batches/:batch_id/stop GET /batches/:batch_id GET /batches/:batch_id/executions GET /batches/:agent_id DELETE /batches/:batch_id ``` # Schedule Batch API Source: https://www.bolna.ai/docs/api-reference/batches/schedule POST /batches/{batch_id}/schedule Learn how to schedule a batch for calling via Bolna Voice AI agent by specifying the batch ID and the desired execution time. # Stop Batch API Source: https://www.bolna.ai/docs/api-reference/batches/stop POST /batches/{batch_id}/stop Understand how to stop a running batch using its ID, allowing you to halt ongoing calls in the batch. # Make Voice AI Call API Source: https://www.bolna.ai/docs/api-reference/calls/make POST /call Learn how to initiate outbound phone calls using Bolna Voice AI agents. Start making phone calls using the agent ID and recipient's phone number. # Calling APIs overview Source: https://www.bolna.ai/docs/api-reference/calls/overview Explore Bolna Calling APIs to invoke outbound Voice AI phone calls from your agents. This overview provides the available endpoints and their functionalities. ## Endpoints ``` POST /call ``` # Stop a Previously Initiated Voice AI Call API Source: https://www.bolna.ai/docs/api-reference/calls/stop_call POST /call/{execution_id}/stop Learn how to stop a call when its status is `queued` or `scheduled` This API allows you to cancel pending calls before they are executed. # Bulk Create Dispositions API Source: https://www.bolna.ai/docs/api-reference/dispositions/bulk-create POST /dispositions/bulk Atomically create and link multiple dispositions to an agent in a single request. Use bulk create when setting up a new agent with a complete set of dispositions, or when importing a disposition configuration from another source. Either all dispositions are created and linked, or none are — partial results are not possible. # Create Disposition API Source: https://www.bolna.ai/docs/api-reference/dispositions/create POST /dispositions/ Create a new disposition and optionally link it to an agent in a single request. At least one of `is_subjective` or `is_objective` must be `true`. When `is_objective` is `true`, you must provide `objective_options`. See the [ObjectiveOption schema](/docs/api-reference/dispositions/overview#objectiveoption-schema) for the full structure including nested `sub_options`. # Delete Disposition API Source: https://www.bolna.ai/docs/api-reference/dispositions/delete DELETE /dispositions/{disposition_id} Delete a disposition from your account. Only the owner can delete a disposition. Deletion is permanent and cannot be undone. Historical call execution results that already contain this disposition's output are not affected — only future calls will stop evaluating it. ### Authorization * **Regular users** can only delete dispositions they own (`created_by` matches their user ID). * **Admins** can delete any disposition. # Get Disposition API Source: https://www.bolna.ai/docs/api-reference/dispositions/get GET /dispositions/{disposition_id} Retrieve a single disposition by ID, optionally scoped to a specific agent. # List Dispositions API Source: https://www.bolna.ai/docs/api-reference/dispositions/list GET /dispositions/ Retrieve all dispositions accessible to your account, optionally scoped to a specific agent. # Dispositions API Overview Source: https://www.bolna.ai/docs/api-reference/dispositions/overview Create and manage dispositions — the individual extraction units that power the Extractions feature in Bolna. ## What are Dispositions? **Extractions** is the Bolna feature that automatically captures structured data from call transcripts after every call. Each extraction is configured as one or more **dispositions** — individual questions posed to an LLM against the transcript — grouped under named **categories**. So the hierarchy is: ``` Agent └── Extractions (feature) └── Category (e.g. "Lead Quality") └── Disposition (e.g. "Call Outcome") ``` Each disposition asks a single question and returns a **Free Text** response (`subjective`), a **Pre-defined** value selected from options you configure (`objective`), or both. ## Key Features * **Organized by category**: Dispositions are grouped under categories, which appear as sections in the extraction results * **Two answer types**: Free Text (`is_subjective`) and Pre-defined (`is_objective`), configurable independently or together * **Typed free-text responses**: Constrain free-text answers to a specific format — `timestamp`, `numeric`, `boolean`, `email`, or a custom `regex` pattern — with automatic post-LLM validation * **Confidence & reasoning**: Every result includes a confidence score (0.0–1.0) and an explanation of why the LLM produced that answer * **Bulk creation**: Create and link multiple dispositions to an agent atomically in a single request * **Copy-on-write updates**: Editing a shared disposition via a scoped agent automatically creates a private copy, keeping other agents unaffected * **Model selection**: Choose the LLM model used for evaluation per disposition ## Endpoints ``` GET /dispositions/ List dispositions GET /dispositions/{disposition_id} Get a single disposition POST /dispositions/ Create a disposition POST /dispositions/bulk Bulk-create dispositions for an agent PUT /dispositions/{disposition_id} Update a disposition (copy-on-write aware) DELETE /dispositions/{disposition_id} Delete a disposition POST /v2/agent/{agent_id}/dispositions/test Test all dispositions for an agent against a transcript ``` ## Disposition Object ```json theme={"system"} { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "name": "Call Outcome", "question": "What was the outcome of the call?", "system_prompt": "You are analyzing a sales call transcript.", "category": "Lead Quality", "model": "gpt-4.1-mini", "is_subjective": true, "is_objective": true, "subjective_type": "text", "subjective_type_config": null, "objective_options": [ { "value": "interested", "condition": "Customer expressed genuine interest and agreed to a next step" }, { "value": "not_interested", "condition": "Customer declined all proposals" }, { "value": "follow_up", "condition": "Customer asked to be contacted again later" } ], "agent_ids": ["agt_abc123"], "created_by": "user_abc123", "created_at": "2026-03-01T10:00:00Z", "updated_at": "2026-03-15T14:30:00Z" } ``` ### Field Reference | Field | Type | Description | | ------------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------- | | `id` | UUID | Unique identifier | | `name` | string | Display name shown in extraction results | | `question` | string | The prompt sent to the LLM to evaluate the transcript | | `system_prompt` | string | System context for the LLM (optional) | | `category` | string | Category this disposition belongs to (default: `"General"`) | | `model` | string | LLM used for evaluation (default: `"gpt-4.1-mini"`) | | `is_subjective` | bool | Enable Free Text response | | `is_objective` | bool | Enable Pre-defined value selection | | `subjective_type` | string | Format constraint for free-text responses: `text` (default), `timestamp`, `numeric`, `boolean`, `email`, or `regex` | | `subjective_type_config` | object \| null | Configuration for `regex` subjective type. Must include `pattern` (required) and optionally `description` | | `objective_options` | array \| null | Required when `is_objective` is `true` | | `agent_ids` | array | Agent IDs this disposition is linked to | | `created_by` | string | ID of the user who created this disposition | | `created_at` | string | ISO 8601 timestamp when the disposition was created | | `updated_at` | string | ISO 8601 timestamp of the last update | ### ObjectiveOption Schema ```json theme={"system"} { "value": "interested", "condition": "Customer expressed genuine interest and agreed to a next step", "sub_options": [] } ``` `sub_options` is optional and supports the same recursive `ObjectiveOption` structure for hierarchical classifications. For a full walkthrough of the Extractions feature, answer types, output format, and best practices, see the [Using Extractions](/docs/using-extractions) guide. # Test Dispositions API Source: https://www.bolna.ai/docs/api-reference/dispositions/test POST /v2/agent/{agent_id}/dispositions/test Test all dispositions linked to an agent against a transcript to preview results before live calls. Runs **all dispositions linked to the specified agent** against a provided transcript and returns the grouped results. Useful for validating your disposition setup before going live. The response `extracted_data` is grouped by category and disposition name, in the same format as post-call execution data. # Update Disposition API Source: https://www.bolna.ai/docs/api-reference/dispositions/update PUT /dispositions/{disposition_id} Update a disposition. When scoped to an agent, shared dispositions are copied before editing to protect other agents. ## Scoped vs. Unscoped Mode ### Scoped mode (recommended) — `agent_id` provided The API checks whether the disposition is **exclusive** to the specified agent (i.e., not shared with other agents): * **Case 1: Disposition is exclusive to this agent → Edit in place.** Returns `200 OK`. * **Case 2: Disposition is shared → Copy-on-write.** A new private copy is created for this agent, and the agent is re-linked to the copy. The original disposition is unchanged. Returns `201 Created`. A `201` response means a **new disposition ID was created**. If you're storing the disposition ID (e.g., in your own database), update your reference to the new ID returned in the response. The original `disposition_id` now belongs to other agents; your agent uses the new copy. ### Unscoped mode — no `agent_id` * Admins can update any disposition in place. * Non-admin users can only update dispositions they own. # Get Batch Executions API Source: https://www.bolna.ai/docs/api-reference/executions/get_batch_executions GET /batches/{batch_id}/executions Retrieve all executions for specific batches using Bolna APIs. This endpoint provides detailed information on each call's outcome and metrics within the batch. # Retrieve Voice AI Execution API Source: https://www.bolna.ai/docs/api-reference/executions/get_execution GET /executions/{execution_id} Fetch details of a specific phone call execution by its ID using Bolna APIs. This includes information such as conversation time, status, and telephony data. # Retrieve Voice AI Execution Raw Logs API Source: https://www.bolna.ai/docs/api-reference/executions/get_execution_raw_logs GET /executions/{execution_id}/log Fetch raw logs of a specific phone call execution by its ID using Bolna APIs. This includes prompts, requests, responses, and optional LLM reasoning summaries when available. For each item in `data`, when **`component`** is **`llm`** and **`type`** is **`response`**, the assistant text is in **`data`**. If the model exposed traceable reasoning for that turn, **`reasoning_content`** is also set; otherwise the field is omitted. Use this to debug or display model thinking alongside the spoken reply. # Get All Voice AI Agent Executions API Source: https://www.bolna.ai/docs/api-reference/executions/get_executions GET /v2/agent/{agent_id}/executions Retrieve all executions performed by a specific agent using Bolna APIs. This endpoint provides a comprehensive history of the agent's calls and conversations. ## Pagination This API supports pagination using the `page_number` and `page_size` query parameters. You can utilize `has_more` in the API response to determine if you should fetch the next page. You can learn more about it from the [pagination documentation](/docs/api-reference/pagination). # Executions APIs overview Source: https://www.bolna.ai/docs/api-reference/executions/overview Access your Voice AI agents call and conversation history using Bolna Executions APIs. This page details the available endpoints for managing call executions. ## Endpoints ``` GET /executions/:execution_id GET /batch/:batch_id/executions GET /v2/agent/:agent_id/executions GET /executions/:execution_id/log ``` # Set Inbound Agent API Source: https://www.bolna.ai/docs/api-reference/inbound/agent POST /inbound/setup Configure Bolna Voice AI agent to handle inbound calls automatically by associating it with a specific phone number using Bolna APIs. # Inbound Bolna Voice AI Agent APIs Overview Source: https://www.bolna.ai/docs/api-reference/inbound/overview Discover how to set up Bolna Voice AI agents to answer inbound calls, enabling responsive communication channels. ## Endpoints ``` POST /inbound/setup POST /inbound/unlink ``` # Remove Inbound Agent API Source: https://www.bolna.ai/docs/api-reference/inbound/unlink POST /inbound/unlink Remove and unlink a Bolna Voice AI agent from a specific phone number to disable automated inbound voice call answering by AI agents. # Bolna API Documentation Source: https://www.bolna.ai/docs/api-reference/introduction Use and leverage Bolna Voice AI using APIs through HTTP requests from any language in your applications and workflows. ## What is the Bolna API? The Bolna API enables you to programmatically create, configure, and manage Voice AI agents from your own applications. Whether you are building complex workflows, automating customer support, or integrating voice capabilities into your existing products, our REST API provides everything you need. The API uses predictable, resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes and authentication. You must have an active Bolna account to generate and use API keys. If you don't have one, [sign up here](https://platform.bolna.ai). *** ## Authentication All Bolna API endpoints require authentication using an API key. You must include this key in the `Authorization` header of all your HTTP requests using the `Bearer` scheme. ### How to generate an API Key Log in to the [Bolna Dashboard](https://platform.bolna.ai). From the left sidebar navigation menu, select the **Developers** tab. Bolna dashboard navigation showing the Developers tab Click the **Create a new API Key** button to generate your unique authentication credentials. Developers page showing the Create a new API Key button Your newly generated API key will be displayed in a pop-up modal. **Copy this key and save it securely.** API Key generation modal showing the newly created secret key **For your security, the API key will only be shown once.** If you lose your API key, you will need to delete it and generate a new one. API keys generated for a **Subaccount** will start with `sa-`. *** # Create Knowledgebase API Source: https://www.bolna.ai/docs/api-reference/knowledgebase/create POST /knowledgebase Upload a PDF document or provide a URL to create a knowledgebase, enhancing your Bolna Voice AI agent's information base and response accuracy. # Delete Knowledgebase API Source: https://www.bolna.ai/docs/api-reference/knowledgebase/delete DELETE /knowledgebase/{rag_id} Remove and delete an existing knowledgebase from your Bolna account maintaining your Bolna Voice AI agents upto date. # Get Knowledgebase API Source: https://www.bolna.ai/docs/api-reference/knowledgebase/get_knowledgebase GET /knowledgebase/{rag_id} Retrieve details of a specific knowledgebase, including its ID, file name, creation time, and status, using Bolna APIs. # List All Knowledgebases API Source: https://www.bolna.ai/docs/api-reference/knowledgebase/get_knowledgebases GET /knowledgebase/all Retrieve all knowledgebases associated with your account, including their status and creation dates. # Knowledgebases Overview Source: https://www.bolna.ai/docs/api-reference/knowledgebase/overview Learn how to ingest PDFs and URLs as knowledgebases for your Bolna Voice AI agents. Agents can use multiple knowledgebases simultaneously. ## Endpoints ``` POST /knowledgebase GET /knowledgebase/:rag_id GET /knowledgebase/all DELETE /knowledgebase/:rag_id ``` # Pagination for Bolna APIs Source: https://www.bolna.ai/docs/api-reference/pagination Learn how to use pagination in Bolna Voice AI APIs using `page_number` and `page_size` to fetch results efficiently and build scalable workflows. The endpoints also support pagination using the `page_number` and `page_size` query parameters. This allows you to fetch large sets of results in smaller, manageable chunks. ## Query Parameters * `page_number` (integer, optional): The page of results to retrieve. Defaults to `1`. The first page starts at `1`. * `page_size` (integer, optional): The number of results per page. Defaults to `20`. You can request up to `50` results per page. ## How it works The API uses offset-based pagination under the hood. For example: | page\_number | page\_size | Returned records | | ------------ | ---------- | ---------------- | | 1 | 10 | Records 1–10 | | 2 | 10 | Records 11–20 | | 3 | 5 | Records 11–15 | ## Example Request ```curl example-request theme={"system"} GET /v2/agent/1234/executions?page_number=2&page_size=5 ``` ```json example-response theme={"system"} { "total": 38, "page": 2, "page_size": 5, "has_more": true, "data": [ { "id": "ex_101", "status": "success", "created_at": "..." }, { "id": "ex_102", "status": "failed", "created_at": "..." }, ... ] } ``` ## Tips * Use `has_more` to determine if you should fetch the next page. * Combine pagination with filters supported in the API to narrow results efficiently. # Buy Phone Numbers API Source: https://www.bolna.ai/docs/api-reference/phone-numbers/buy POST /phone-numbers/buy Buy virtual phone numbers with full purchase, pricing, and provider details to use with Bolna Voice agents for outbound and inbound calls. # Delete Phone Numbers API Source: https://www.bolna.ai/docs/api-reference/phone-numbers/delete DELETE /phone-numbers/{phone_number_id} Delete a purchased phone number to stop billing and remove it permanently from your active inventory. # List Phone Numbers API Source: https://www.bolna.ai/docs/api-reference/phone-numbers/get_all GET /phone-numbers/all Retrieve all phone numbers associated with your account, including details like creation date and telephony provider like Twilio, Plivo, etc. # Phone Numbers APIs Overview Source: https://www.bolna.ai/docs/api-reference/phone-numbers/overview Manage your phone numbers effectively using Bolna APIs, including buying, listing, deleting and associating numbers with Bolna Voice AI agents. ## Endpoints ``` POST /phone-numbers/all GET /phone-numbers/search POST /phone-numbers/buy DELETE /phone-numbers/delete ``` # Search Phone Numbers API Source: https://www.bolna.ai/docs/api-reference/phone-numbers/search GET /phone-numbers/search Search available phone numbers by region, locality, or pattern, with price to use them with Bolna Voice agents. # Add a New Provider API Source: https://www.bolna.ai/docs/api-reference/providers/add POST /providers Learn how to securely add a new provider to your Bolna account by specifying the provider's name and associated credentials. You can add your own providers securely in Bolna. Please [read this page](/docs/providers) for more information about all current supported providers. # List Providers API Source: https://www.bolna.ai/docs/api-reference/providers/get GET /providers Retrieve all providers associated with your Bolna account, including their IDs, names, and creation timestamps. # Providers APIs overview Source: https://www.bolna.ai/docs/api-reference/providers/overview Add and manage your own providers securely in Bolna, supporting various telephony and voice services. You can add your own providers securely in Bolna. Please [read this page](/docs/providers) for more information about all current supported providers. ## Endpoints ``` POST /providers GET /providers DELETE /providers/:provider_key_name ``` # Remove a Provider API Source: https://www.bolna.ai/docs/api-reference/providers/remove DELETE /providers/{provider_key_name} Delete a previously added provider from your Bolna account, ensuring your integrations remain current. # Rate Limiting for Bolna APIs Source: https://www.bolna.ai/docs/api-reference/rate-limiting Understand the API rate limits applied to Bolna API endpoints to ensure fair usage and platform stability. All Bolna API endpoints are subject to rate limiting to ensure fair usage and maintain platform stability. Rate limits are applied per **organization** (if the user belongs to one) or per **user** otherwise. ## Rate Limits ### Endpoint-Specific Limits The following endpoints have specific rate limits: | Endpoint | Rate Limit | | ------------------------------------------------------------------------- | ------------------- | | [/v2/agent//executions](/docs/api-reference/agent/v2/get_all_agent_executions) | 500 requests/minute | | [/v2/agent/](/docs/api-reference/agent/v2/get) | 500 requests/minute | | [/call](/docs/api-reference/calls/make) | 500 requests/minute | ### Default Limit All other API endpoints are subject to a default rate limit of **1000 requests per minute**. ## How Rate Limits Are Applied * If your account is part of an **organization**, the rate limit is shared across all users within that organization. * If your account is **not** part of an organization, the rate limit applies to your individual user account. ## Exceeding the Rate Limit If you exceed the rate limit for an endpoint, the API will return an **HTTP 429 (Too Many Requests)** response. When this happens: * Wait before retrying the request. * Implement exponential backoff in your application to gracefully handle rate limit responses. ## Best Practices * **Cache responses** where possible to reduce the number of API calls. * **Use webhooks** instead of polling for call status updates to minimize requests to execution endpoints. * **Spread requests** evenly over time rather than sending them in bursts. * **Monitor your usage** and implement client-side rate limiting to stay within the allowed limits. # Add Phone Number to Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/add_number POST /sip-trunks/trunks/{trunk_id}/numbers Add a DID phone number to your SIP trunk using the Bolna API. Assign numbers for inbound and outbound voice calling on your trunk. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
## Next steps After adding a phone number, [patch your agent's telephony provider to `sip-trunk`](/docs/api-reference/agent/v2/patch_update). # Create SIP Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/create POST /sip-trunks/trunks Create a new SIP trunk on Bolna and register it with your gateway details. Set up your trunk for inbound and outbound voice calling. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
## Next steps After creating your trunk, [add a phone number to it](/docs/api-reference/sip-trunks/add_number). # Delete SIP Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/delete DELETE /sip-trunks/trunks/{trunk_id} Permanently delete a SIP trunk and all associated resources including gateways, IP identifiers, and phone numbers. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# Get SIP Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/get GET /sip-trunks/trunks/{trunk_id} Get a single SIP trunk with full details including gateways, IP identifiers, and phone numbers. Look up any trunk by its ID. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# List SIP Trunks Source: https://www.bolna.ai/docs/api-reference/sip-trunks/get_all GET /sip-trunks/trunks List all SIP trunks configured in your Bolna account. Filter by active status and view trunk details including gateways and phone numbers. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# List Phone Numbers on Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/list_numbers GET /sip-trunks/trunks/{trunk_id}/numbers List all phone numbers associated with a SIP trunk. View assigned DID numbers and manage your trunk number inventory. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# SIP Trunk API Reference Source: https://www.bolna.ai/docs/api-reference/sip-trunks/overview API endpoints for managing SIP trunks, gateways, and phone numbers on Bolna. Create, update, list, and delete trunks programmatically. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
## Endpoints ### Trunks | Method | Endpoint | Description | | -------- | ------------------------------------------------------------------- | ---------------------- | | `POST` | [`/sip-trunks/trunks`](/docs/api-reference/sip-trunks/create) | Create a new SIP trunk | | `GET` | [`/sip-trunks/trunks`](/docs/api-reference/sip-trunks/get_all) | List all SIP trunks | | `GET` | [`/sip-trunks/trunks/{trunk_id}`](/docs/api-reference/sip-trunks/get) | Get a single SIP trunk | | `PATCH` | [`/sip-trunks/trunks/{trunk_id}`](/docs/api-reference/sip-trunks/update) | Update a SIP trunk | | `DELETE` | [`/sip-trunks/trunks/{trunk_id}`](/docs/api-reference/sip-trunks/delete) | Delete a SIP trunk | ### Phone Numbers | Method | Endpoint | Description | | -------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------- | | `POST` | [`/sip-trunks/trunks/{trunk_id}/numbers`](/docs/api-reference/sip-trunks/add_number) | Add a phone number to a trunk | | `GET` | [`/sip-trunks/trunks/{trunk_id}/numbers`](/docs/api-reference/sip-trunks/list_numbers) | List phone numbers on a trunk | | `DELETE` | [`/sip-trunks/trunks/{trunk_id}/numbers/{phone_number_id}`](/docs/api-reference/sip-trunks/remove_number) | Remove a phone number from a trunk | # Remove Phone Number from Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/remove_number DELETE /sip-trunks/trunks/{trunk_id}/numbers/{phone_number_id} Remove a phone number from a SIP trunk. If the number was mapped to an agent, the mapping is also removed. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# Update SIP Trunk Source: https://www.bolna.ai/docs/api-reference/sip-trunks/update PATCH /sip-trunks/trunks/{trunk_id} Partially update an existing SIP trunk on Bolna using a PATCH request. Only the fields you include in the request body will be changed. **SIP Trunking** is currently in Beta.

Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and access.
# Get All Sub-Accounts Usage API Source: https://www.bolna.ai/docs/api-reference/sub-accounts/all_usage GET /sub-accounts/all/usage Retrieve usage, consumption, and billing details for all sub-accounts under the authenticated organization. This is an `enterprise` feature. You can read more about our enterprise offering here [Bolna enterprise](/docs/enterprise/plan). ## Summary This endpoint returns aggregated usage data for **all sub-accounts** associated with the authenticated user's organization.\ It provides fine-grained insight into usage, consumption, and cost breakdowns for each sub-account. ## Endpoint ```yaml theme={"system"} GET /sub-accounts/all/usage ``` # Create a new Sub-Account API Source: https://www.bolna.ai/docs/api-reference/sub-accounts/create POST /sub-accounts/create Create a new sub-account using the Bolna API to define separate workspaces with custom configurations for enterprise-level management. This is an `enterprise` feature. You can read more about our enterprise offering here [Bolna enterprise](/docs/enterprise/plan). # Deleting a Sub-account Source: https://www.bolna.ai/docs/api-reference/sub-accounts/delete DELETE /sub-accounts/{sub_account_id} Use Bolna APIs to delete a sub-account and their related data, ensuring proper cleanup of agents, batches, executions, and configurations. This deletes **ALL** the data for that sub-account's batches, executions and agents. # List all Sub-Accounts API Source: https://www.bolna.ai/docs/api-reference/sub-accounts/get_all GET /sub-accounts/all Retrieve all sub-accounts linked to your main account enabling centralized visibility and management. This is an `enterprise` feature. You can read more about our enterprise offering here [Bolna enterprise](/docs/enterprise/plan). # Sub accounts APIs overview Source: https://www.bolna.ai/docs/api-reference/sub-accounts/overview Manage multiple customers or business units with Bolna Sub-Accounts API. Create, list, and track usage with clear data separation and control. This is an `enterprise` feature. You can read more about our enterprise offering here [Bolna enterprise](/docs/enterprise/plan). ## Endpoints ``` POST /sub-accounts/create GET /sub-accounts/all GET /sub-accounts/:sub_account_id/usage ``` # Patch Update a Sub-account Source: https://www.bolna.ai/docs/api-reference/sub-accounts/patch_update PATCH /sub-accounts/{sub_account_id} Use this Bolna API endpoint to partially modify and update sub-account properties, including its name, concurrency limits, and call capacity settings. Currently, only the following agent attributes can be updated for the `PATCH` update. * `allow_concurrent_calls` * `name` # Track Sub-Account Usage API Source: https://www.bolna.ai/docs/api-reference/sub-accounts/usage GET /sub-accounts/{sub_account_id}/usage Track usage for a specific sub-account giving you fine-grained insights into usage, consumption and billing. This is an `enterprise` feature. You can read more about our enterprise offering here [Bolna enterprise](/docs/enterprise/plan). # Add a New Custom LLM Model Source: https://www.bolna.ai/docs/api-reference/user/add_model POST /user/model/custom Learn how to integrate your custom Large Language Model (LLM) with Bolna Voice AI agents using Bolna APIs. This request specifies how to add your own Custom LLM Models and use it with Bolna Voice AI agents. Please read about it more from [using-custom-llm](/docs/customizations/using-custom-llm) # User information Source: https://www.bolna.ai/docs/api-reference/user/info GET /user/me Get details like name, email, current wallet balance, concurrency limits using this API # User APIs Overview Source: https://www.bolna.ai/docs/api-reference/user/overview Explore APIs related to user and account information for Bolna Voice AI agents, including endpoints for adding custom LLM models. ## Endpoints ``` GET /user/me POST /user/model/custom ``` # List Violations API Source: https://www.bolna.ai/docs/api-reference/violations/list GET /violations/list Retrieve a paginated list of violations, optionally filtered by status. Use this endpoint to monitor and manage call violations across your account. ## Pagination This API supports pagination using the `page_number` and `page_size` query parameters. You can utilize `has_more` in the API response to determine if you should fetch the next page. You can learn more about it from the [pagination documentation](/docs/api-reference/pagination). # Violations APIs Overview Source: https://www.bolna.ai/docs/api-reference/violations/overview Manage and track call violations using the Bolna Violations APIs. List violations with filtering and pagination, and submit violation evidence. ## Endpoints ``` GET /violations/list POST /violations/submit ``` # Submit Violation API Source: https://www.bolna.ai/docs/api-reference/violations/submit POST /violations/submit Submit a violation along with an evidence file (e.g., a screenshot or document). This endpoint updates the violation status and attaches the uploaded file. # List All Voices API Source: https://www.bolna.ai/docs/api-reference/voice/get_all GET /me/voices Retrieve a list of all available voices for your account, including details like provider, language, and accent. # Voice APIs Overview Source: https://www.bolna.ai/docs/api-reference/voice/overview APIs for accessing voices and generating test transcripts which can be utilized for Bolna Voice AI agents. ## Endpoints ``` GET /me/voices ``` # Auto-Retry for Failed Calls Source: https://www.bolna.ai/docs/auto-retry Automatically retry calls that fail due to no-answer, busy signals, or errors to improve contact rates. ## What is Auto-Retry? Auto-retry automatically reschedules calls that fail to connect. When a call ends with statuses like `no-answer` or `busy`, Bolna retries the call after a configurable delay, improving your overall contact rates without manual intervention. *** ## How to Enable Auto-Retry Add the `retry_config` object when making a call via the [Make Call API](/docs/api-reference/calls/make) or [Create Batch API](/docs/api-reference/batches/create). ```bash Single Call theme={"system"} curl -X POST 'https://api.bolna.ai/call' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/json' \ -d '{ "agent_id": "your-agent-id", "recipient_phone_number": "+1234567890", "retry_config": { "enabled": true, "max_retries": 3, "retry_on_statuses": ["no-answer", "busy", "failed"], "retry_intervals_minutes": [30, 60, 120] } }' ``` ```bash Batch Call theme={"system"} curl -X POST 'https://api.bolna.ai/batches' \ -H 'Authorization: Bearer ' \ -F 'agent_id=your-agent-id' \ -F 'file=@contacts.csv' \ -F 'retry_config={"enabled":true,"max_retries":2,"retry_intervals_minutes":[15,30]}' ``` *** ## Configuration Options | Parameter | Type | Default | Description | | ------------------------- | ------- | --------------------------------- | -------------------------------------------- | | `enabled` | boolean | `false` | Enable auto-retry | | `max_retries` | integer | `3` | Maximum retry attempts (1–3) | | `retry_on_statuses` | array | `["no-answer", "busy", "failed"]` | Statuses that trigger a retry | | `retry_on_voicemail` | boolean | `false` | Retry if voicemail is detected | | `retry_intervals_minutes` | array | `[30, 60, 120]` | Delay (in minutes) before each retry attempt | ### Supported Retry Statuses | Status | Description | | ----------- | ------------------------------ | | `no-answer` | Call rang but was not answered | | `busy` | Line was busy | | `failed` | Call failed to connect | | `error` | Technical error occurred | *** ## Monitoring Retries via Webhook When auto-retry is configured, your webhook receives retry information with each status update: ```json theme={"system"} { "id": "execution-id", "status": "scheduled", "retry_count": 1, "retry_config": { "enabled": true, "max_retries": 3 }, "retry_history": [ { "attempt": 1, "status": "no-answer", "at": "2026-01-26T10:00:00Z" } ], "scheduled_at": "2026-01-26T10:30:00Z" } ``` *** ## Best Practices Start with 30+ minute intervals to avoid annoying contacts with rapid retries Keep `retry_on_voicemail: false` (default) to avoid repeated voicemail deposits Track `retry_count` in webhooks to measure retry effectiveness over time Use 1–2 retries for time-sensitive calls, 3 for lead outreach campaigns *** ## Related Features Run campaigns with thousands of contacts Get real-time call status updates View execution history and outcomes # Automate and schedule calls using Batches Source: https://www.bolna.ai/docs/batch-calling Learn how to schedule and manage batch calls using Bolna's Voice AI agents. Upload CSV files, set call parameters, and monitor execution for efficient outreach. ## What is Batch Calling? Batch calling lets you automate outbound calls to hundreds or thousands of contacts by uploading a CSV file with phone numbers and custom data. Ideal for lead qualification, customer outreach, appointment reminders, and other high-volume calling campaigns. *** ## CSV File Format Your CSV file must follow these rules: All phone numbers must include the country prefix in [E.164](https://en.wikipedia.org/wiki/E.164) format (e.g., `+11231237890`). The phone number column must use `contact_number` as the header. Include any additional variables (name, address, etc.) as separate columns. These are passed to the agent as context. ```csv example_batch_file.csv theme={"system"} contact_number,first_name,last_name +11231237890,Bruce,Wayne +91012345678,Bruce,Lee +00021000000,Satoshi,Nakamoto +44999999007,James,Bond ``` In Excel, typing `+` at the beginning of a cell is interpreted as a formula. **Add an apostrophe (`'`) before the plus sign** to retain it. [Download an example CSV file](https://bolna-public.s3.amazonaws.com/Bolna+batch+calling+example+csv.csv) Only the **`contact_number`** column is validated for correctness. Other columns (custom variables like `first_name`, `address`, etc.) are passed through as-is without any validation. *** ## Using the Dashboard You can upload batches, schedule them, and configure auto-retry directly from the Bolna dashboard. Navigate to **your agent → Batches** tab. You'll see a list of all your past batches along with their status, execution details, and actions like Run Now, Stop, Download, and Delete. Click **Upload Batch** to get started. Agent Batches list Drag and drop your CSV file or click to browse. After uploading, you'll see how many rows were parsed and how many contacts have valid phone numbers. Upload Batch dialog In this dialog you can: * **Select a phone number** to make calls from (Bolna managed or your own) * **Choose to Run Now or Schedule** the batch for a future date and time * **Enable auto-retry** for failed calls * **Set a webhook URL** to receive real-time call status updates Select **Run Now** to start calls immediately, or click **Schedule** to pick a future date and time. Use the quick-select buttons to schedule 10 minutes, 30 minutes, or 1 hour from now. Schedule batch options Enable **Auto-retry failed calls** to automatically re-attempt calls that didn't connect. You can configure: * **Retry on**: Select which call outcomes trigger a retry (No Answer, Busy, Failed, Error, Voicemail) * **Maximum retry attempts**: Set up to 3 retry attempts per contact * **Retry intervals**: Define increasing delays between attempts (e.g., 30 min, 60 min, 120 min) Auto-retry configuration Click **Upload this batch** to confirm. Your batch will appear in the batches list with its scheduled time and status. ### Webhook Notifications You can provide a **Webhook URL** in the upload dialog to receive real-time updates as each call in the batch completes. Bolna sends a POST request to your webhook endpoint with the call's execution data, including the call status, transcript, extracted data, and cost breakdown. This is useful for syncing call results to your CRM, triggering follow-up workflows, or logging outcomes in real time without polling the API. If you don't set a webhook, you can still retrieve all results later using the [List Batch Executions API](/docs/api-reference/batches/executions). *** ## Using the Batch API Upload your CSV file using the [Create Batch API](/docs/api-reference/batches/create): ```bash request theme={"system"} curl --location 'https://api.bolna.ai/batches' \ --header 'Authorization: Bearer ' \ --form 'agent_id="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"' \ --form 'file=@"/my-first-batch.csv"' \ --form 'from_phone_numbers="+919876543210"' \ --form 'from_phone_numbers="+919876543211"' ``` ```json response theme={"system"} { "batch_id": "abcdefghijklmnopqrstuvwxyz012345", "state": "created" } ``` Use the `batch_id` to schedule via the [Schedule Batch API](/docs/api-reference/batches/schedule). The date and time must be in **ISO 8601** format with timezone: ```bash request theme={"system"} curl --location 'https://api.bolna.ai/batches/abcdefghijklmnopqrstuvwxyz012345/schedule' \ --header 'Authorization: Bearer ' \ --form 'scheduled_at="2024-03-20T04:05:00+00:00"' ``` ```json response theme={"system"} { "message": "success", "state": "scheduled at 2024-03-20T04:10:00+00:00" } ``` Monitor progress using the [Get Batch API](/docs/api-reference/batches/get_batch): ```bash request theme={"system"} curl --location 'https://api.bolna.ai/batches/abcdefghijklmnopqrstuvwxyz012345' \ --header 'Authorization: Bearer ' ``` ```json response theme={"system"} { "batch_id": "abcdefghijklmnopqrstuvwxyz012345", "humanized_created_at": "19 minutes ago", "created_at": "2024-03-13T14:12:50.596315", "updated_at": "2024-03-13T14:19:13.115411", "status": "scheduled", "scheduled_at": "2024-03-20T04:10:00+05:30" } ``` After the batch completes, fetch all execution results using the [List Batch Executions API](/docs/api-reference/batches/executions): ```bash request theme={"system"} curl --location 'https://api.bolna.ai/batches/abcdefghijklmnopqrstuvwxyz012345/executions' \ --header 'Authorization: Bearer ' ``` ```json response theme={"system"} [ { "id": 7432382142914, "conversation_duration": 123, "total_cost": 123, "transcript": "", "createdAt": "2024-01-23T01:14:37Z", "updatedAt": "2024-01-29T18:31:22Z", "usage_breakdown": { "synthesizerCharacters": 123, "synthesizerModel": "polly", "transcriberDuration": 123, "transcriberModel": "deepgram", "llmTokens": 123, "llmModel": { "gpt-3.5-turbo-16k": { "output": 28, "input": 1826 } } } } ] ``` *** ## Complete Example ```python batch_script.py theme={"system"} import asyncio import os from dotenv import load_dotenv import aiohttp # Load environment variables from .env file load_dotenv() # Load from .env host = "https://api.bolna.ai" api_key = os.getenv("api_key", None) agent_id = 'ee153a6c-19f8-3a61-989a-9146a31c7834' # Agent to create batch for file_path = '/path/of/csv/file' schedule_time = '2024-06-01T04:10:00+05:30' from_phone_numbers = ['+919876543210', '+919876543211'] async def schedule_batch(api_key, batch_id, scheduled_at): print("Scheduling batch for batch_id: {}".format(batch_id)) url = f"{host}/batches/{batch_id}/schedule" headers = {'Authorization': f'Bearer {api_key}'} data = {'scheduled_at': scheduled_at} try: async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, data=data) as response: response_data = await response.json() if response.status == 200: return response_data else: raise Exception(f"Error scheduling batch: {response_data}") except aiohttp.ClientError as e: print(f"HTTP Client Error: {str(e)}") except Exception as e: print(f"Unexpected error: {str(e)}") async def get_batch_status(api_key, batch_id): print("Getting batch status for batch_id: {}".format(batch_id)) url = f"{host}/batches/{batch_id}" headers = {'Authorization': f'Bearer {api_key}'} try: async with aiohttp.ClientSession() as session: async with session.get(url, headers=headers) as response: response_data = await response.json() if response.status == 200: return response_data else: raise Exception(f"Error getting batch status: {response_data}") except aiohttp.ClientError as e: print(f"HTTP Client Error: {str(e)}") except Exception as e: print(f"Unexpected error: {str(e)}") async def get_batch_executions(api_key, batch_id): print("Getting batch executions for batch_id: {}".format(batch_id)) url = f"{host}/batches/{batch_id}/executions" headers = {'Authorization': f'Bearer {api_key}'} try: async with aiohttp.ClientSession() as session: async with session.get(url, headers=headers) as response: response_data = await response.json() if response.status == 200: return response_data else: raise Exception(f"Error getting batch executions: {response_data}") except aiohttp.ClientError as e: print(f"HTTP Client Error: {str(e)}") except Exception as e: print(f"Unexpected error: {str(e)}") async def create_batch(): url = f"{host}/batches" headers = {'Authorization': f'Bearer {api_key}'} with open(file_path, 'rb') as f: form_data = aiohttp.FormData() form_data.add_field('agent_id', agent_id) form_data.add_field('file', f, filename=os.path.basename(file_path)) # Add multiple from_phone_numbers for phone in from_phone_numbers: form_data.add_field('from_phone_numbers', phone) async with aiohttp.ClientSession() as session: async with session.post(url, headers=headers, data=form_data) as response: response_data = await response.json() if response_data.get('state') == 'created': batch_id = response_data.get('batch_id') res = await schedule_batch(api_key, batch_id, scheduled_at=schedule_time) if res.get('state') == 'scheduled': check = True while check: # Check status every 1 minute await asyncio.sleep(60) res = await get_batch_status(api_key, batch_id) if res.get('status') == 'completed': check = False break if not check: res = await get_batch_executions(api_key, batch_id) print(res) return res if __name__ == "__main__": asyncio.run(create_batch()) ``` *** ## Next Steps Understand outbound calling concurrency limits Set up dedicated phone numbers for campaigns Personalize each call with dynamic data Automatically retry failed calls # Buy Phone Numbers for Your Bolna Voice AI Agents Source: https://www.bolna.ai/docs/buying-phone-numbers Purchase dedicated US and Indian phone numbers from the Bolna dashboard. US numbers use Twilio, Indian numbers use Plivo or Vobiz with regional selection. $5/month per number. Buy dedicated phone numbers directly from the Bolna dashboard. Each number costs **\$5/month**, billed as a recurring subscription from your Bolna wallet balance. My Phone Numbers page showing the Buy Phone Number button in the top right, with columns for Phone number, Agent, Telephony, Purchased on, Renews on, Monthly rent, and Delete number Buy and view your phone numbers at [platform.bolna.ai/phone-numbers](https://platform.bolna.ai/phone-numbers). *** ## How to Buy a Phone Number Navigate to **My Numbers** in the sidebar and click the **Buy Phone Number** button in the top right. Buy phone number dialog with Select Country dropdown, Pattern search field, Select phone number dropdown, and Purchase number button Open the **Select Country** dropdown. The available countries are **United States** and **India**. The purchase flow changes based on your selection. Buy phone number dialog with country dropdown open showing United States and India options *** ## United States Numbers US numbers are provided through **Twilio**. You can search for numbers by area code pattern. Type an area code in the **Pattern** field to filter results. For example, enter `718` to find numbers starting with that prefix. Results appear in the format `1718XXXXXXX`. Buy phone number dialog with United States selected and 718 entered in the pattern field Click **Select phone number** to browse available numbers. Pick one from the list. Phone number dropdown showing available US numbers like +17162718146, +12186717180, and others with $5.0 monthly pricing Click **Purchase number** to complete the purchase. The \$5/month cost is deducted from your wallet balance. *** ## India Numbers Indian numbers require compliance verification. When you select **India**, the purchase flow changes: the **Pattern** field is replaced by a **Region** selector, and you must choose a telephony provider. Regions: Karnataka (80), Maharashtra (22) Regions: Karnataka (80), Gujarat (79), NCR (11) The region code appears after `+91` in the phone number. For example, a Karnataka number looks like `+9180XXXXXXXX`. ### Plivo Buy phone number dialog with India selected, Plivo as provider, and region dropdown showing All regions, Karnataka (80), and Maharashtra (22) ### Vobiz Buy phone number dialog with India selected, Vobiz as provider, and region dropdown showing All regions, Karnataka (80), Gujarat (79), and NCR (11) Choose **Plivo** or **Vobiz** from the provider dropdown. Select a region from the dropdown, or leave it on **All regions** to see all available numbers. Pick a number from the list and click **Purchase number**. Indian numbers require compliance approval. You may need to submit identity documents before your number is activated. *** ## Pricing All phone numbers cost **\$5/month** as a recurring subscription. The amount is deducted automatically from your Bolna wallet balance each month on the renewal date. Phone number charges are **separate** from call charges. The \$5/month covers only the number itself. Per-minute telephony and provider costs are billed separately when you make or receive calls. View [call pricing](/docs/pricing/call-pricing) for details on per-minute call costs and telephony charges. *** ## What Can You Do with Purchased Numbers? Call customers from your dedicated numbers Route incoming calls to your Voice AI agents Run calling campaigns at scale with CSV uploads Learn more about Twilio, Plivo, and Vobiz # Agent Conversations, Metrics & Logs Source: https://www.bolna.ai/docs/call-history Access Voice AI agent conversations, recordings, transcripts, and execution data. Monitor performance metrics, debug with logs, and export data for analysis. ## What is Call History? Call History (Agent Conversations) displays all historical conversations with your agents. View performance metrics, listen to recordings, read transcripts, and access raw execution data for debugging and analysis. Call History page showing performance metrics, call table with execution details, and filter options *** ## How to Access Call History Click **Call History** in the left navigation menu. Click **See all call logs** in the actions panel. *** ## Performance Metrics The top section displays **real-time metrics** for your selected agent and date range. Use these to monitor campaign performance at a glance. | Metric | Description | | -------------------- | ---------------------------------------------- | | **Total Executions** | Total number of call attempts | | **Total Cost** | Total campaign spend | | **Total Duration** | Total call time in seconds | | **Status Breakdown** | Count of Error, Completed, and No-Answer calls | | **Avg Cost** | Average cost per call | | **Avg Duration** | Average call length | *** ## Filtering Calls | Filter | Description | | -------------- | ----------------------------------------- | | **Agent** | Select a specific agent to view its calls | | **Batch** | Filter by batch campaign | | **Date Range** | Choose a date range for the calls | | **Group By** | Group calls by different criteria | | **Call Type** | Filter by inbound or outbound calls | | **Status** | Filter by Completed, Error, or No-Answer | | **Provider** | Filter by telephony provider | Use the **search by execution ID** box to quickly find a specific call. *** ## Call Table Each call is displayed with the following information: | Column | Description | | --------------------- | --------------------------------------------------- | | **Execution ID** | Unique identifier for the call | | **User Number** | Phone number of the caller/recipient | | **Conversation Type** | Type of call (plivo outbound, twilio inbound, etc.) | | **Duration (s)** | Call duration in seconds | | **Hangup By** | Who ended the call (Callee, Carrier, Plivo, etc.) | | **Batch** | Batch campaign if applicable | | **Timestamp** | When the call occurred | | **Cost** | Cost of the call | | **Status** | Call status (Completed, No-answer, Error) | *** ## Call Details Click **Recordings, transcripts, etc** to view the full conversation data. Conversation data modal showing call recording with waveform player and transcript | Section | Description | | -------------- | ----------------------------------------------------- | | **Recording** | Audio waveform with play, copy, and download options | | **Transcript** | Full conversation showing Assistant and User messages | Use the copy button to quickly copy the recording URL or transcript text. Click the **Trace Data** icon to view detailed execution logs for debugging. Agent execution logs showing timestamp, log data, direction, component, and provider | Column | Description | | ------------- | ---------------------------------------------------------- | | **Timestamp** | Exact time of each log entry | | **Log Data** | The actual request or response content | | **Direction** | Whether it's a request or response | | **Component** | Which component handled it (synthesizer, transcriber, llm) | | **Provider** | Provider used (elevenlabs, deepgram, azure, etc.) | When you fetch logs via the [Get execution raw logs API](/docs/api-reference/executions/get_execution_raw_logs), LLM assistant responses may also include **`reasoning_content`** (model thinking or reasoning summary) when the provider returns it. **Trace data is essential for debugging!** Use it to identify latency issues, transcription errors, or unexpected LLM responses. Click **Download logs** to export all trace data for detailed analysis. Click the **Raw Data** icon to view the complete JSON execution data. Raw call data modal showing JSON format The raw data format matches the [Get Execution API](/docs/api-reference/executions/get_execution) response, making it easy to integrate with your systems programmatically. *** ## Quick Actions | Action | Description | | --------------------- | --------------------------------- | | **Refresh** | Reload the call list | | **Stop Queued Calls** | Cancel pending calls in the queue | | **Download Records** | Export call data as CSV | Export call data as CSV for analysis in spreadsheet tools or to share with your team. *** ## Next Steps Configure webhooks and post-call tasks Access call data programmatically Configure your agent settings Set up automated calling campaigns # Understanding Call Latency Metrics in Bolna Voice AI Source: https://www.bolna.ai/docs/call-latencies Analyze call latency across transcription, LLM, and synthesis in Bolna Voice AI. Identify bottlenecks and optimize response times. ## Introduction Bolna provides detailed latency metrics for every Voice AI execution, helping you monitor and optimize agent response speed. These metrics break down timing across the entire voice pipeline, from speech recognition to LLM processing to audio synthesis. Access latency data via the [Get Execution API](/docs/api-reference/executions/get_execution) in the `latency_data` object. *** ## Latency Data Overview ### Top-Level Metrics ```json theme={"system"} { "latency_data": { "stream_id": 129.56, "time_to_first_audio": 130.84, "region": "in", "transcriber": { ... }, "llm": { ... }, "synthesizer": { ... } } } ``` | Field | Type | Description | | --------------------- | -------- | --------------------------------------------------------------------- | | `stream_id` | `float` | Time (ms) to establish the audio stream connection | | `time_to_first_audio` | `float` | Total time (ms) from call start to first audio played to the user | | `region` | `string` | Geographic region code (e.g., `in` for India, `us` for United States) | `time_to_first_audio` is the most important metric for perceived responsiveness. It represents how long the caller waits before hearing the agent speak. *** ## Pipeline Component Metrics Converts spoken audio into text. Tracks how quickly speech is being transcribed. ```json theme={"system"} { "transcriber": { "time_to_connect": 226, "turns": [ { "turn": 1, "turn_latency": [ { "sequence_id": 1, "audio_to_text_latency": 20.12, "text": "hello who is there" }, { "sequence_id": 2, "audio_to_text_latency": 19.96, "text": "hello who is this" } ] } ] } } ``` | Field | Type | Description | | ----------------------- | --------- | ------------------------------------------------------ | | `time_to_connect` | `integer` | Time (ms) to establish connection with the transcriber | | `turn` | `integer` | Sequential conversation turn number (starting at 1) | | `sequence_id` | `integer` | Incremental transcription update ID within a turn | | `audio_to_text_latency` | `float` | Time (ms) from audio input to transcribed text | | `text` | `string` | Transcribed text for this sequence | Multiple sequences per turn represent **incremental refinements**. The transcriber provides partial results that improve over time. The final sequence is the most accurate. Generates the agent's response based on transcribed input. ```json theme={"system"} { "llm": { "time_to_connect": null, "turns": [ { "time_to_first_token": 1633.04, "time_to_last_token": 1691.53, "turn": 1 }, { "time_to_first_token": 737.80, "time_to_last_token": 777.49, "turn": 2 } ] } } ``` | Field | Type | Description | | --------------------- | ----------------- | ---------------------------------------------------------------------- | | `time_to_connect` | `integer \| null` | Time (ms) to connect to the LLM provider (`null` if not applicable) | | `turn` | `integer` | Sequential turn number | | `time_to_first_token` | `float` | Time (ms) to receive the **first token**, critical for perceived speed | | `time_to_last_token` | `float` | Time (ms) to receive the **last token**, total generation time | **Time to First Token (TTFT)** is the key metric here. With streaming, the synthesizer starts converting text to speech as soon as the first tokens arrive, reducing overall latency. Converts LLM text responses into spoken audio. ```json theme={"system"} { "synthesizer": { "time_to_connect": 271, "turns": [ { "time_to_first_token": 599, "time_to_last_token": 800, "turn": 1 }, { "time_to_first_token": 317, "time_to_last_token": 518, "turn": 2 } ] } } ``` | Field | Type | Description | | --------------------- | --------- | ----------------------------------------------- | | `time_to_connect` | `integer` | Time (ms) to connect to the TTS service | | `turn` | `integer` | Sequential turn number | | `time_to_first_token` | `integer` | Time (ms) to generate the **first audio chunk** | | `time_to_last_token` | `integer` | Time (ms) to complete **all audio generation** | Modern TTS systems stream audio. Playback begins before the entire response is synthesized, keeping the conversation flowing naturally. *** ## Identifying Bottlenecks Use these thresholds to pinpoint performance issues across the pipeline: **Possible causes:** * Network issues with the transcription service * Need for a different transcription provider * Poor audio quality or background noise **Fix:** Try a different transcriber provider in your [Audio Tab](/docs/agent-setup/audio-tab) configuration, or improve audio input quality. **Possible causes:** * LLM model is too large or complex * Prompts need optimization (too long or unstructured) * High load on the LLM service **Fix:** Consider a faster LLM model, optimize your prompt length, or try a different provider in your [LLM Tab](/docs/agent-setup/llm-tab). **Possible causes:** * Network issues with the TTS service * Voice model is computationally expensive * Provider experiencing high load **Fix:** Try a different voice or TTS provider in your [Audio Tab](/docs/agent-setup/audio-tab) configuration. *** ## Related Pages Retrieve execution details with latency data Track the full lifecycle of your calls Understand call termination reasons # Call Guardrails Source: https://www.bolna.ai/docs/calling-guardrails Control when your agent makes outbound calls with time-based restrictions to ensure compliance with calling regulations and respect recipient time zones. ## What are Call Guardrails? Call guardrails help you control when your agent makes outbound calls by enforcing time-based restrictions. This ensures compliance with calling regulations and respects recipient time zones. With call guardrails, you can define allowed calling hours (e.g., 9 AM - 5 PM) for your agents. Calls outside these hours are automatically rescheduled to the next available time window. For emergency or priority calls, you can use the bypass flag to override these restrictions. ## How It Works 1. **Configure guardrails** on your agent with allowed calling hours (`call_start_hour` and `call_end_hour`) 2. **Initiate a call** via API (optionally with `bypass_call_guardrails` flag) 3. **Timezone detection** - System automatically detects recipient's timezone from phone number 4. **Time validation** - If bypass is false, checks if current time in recipient's timezone is within allowed window 5. **Execute or reschedule** - Call is made immediately if within hours, or automatically rescheduled if outside The hours are interpreted in the **recipient's local timezone**, not yours. For example, if `call_start_hour=9`, the call can be made at 9 AM Indian time for an Indian number. ## Configuration Configure guardrails when creating or updating an agent via the `/v2/agent` API: | Field | Type | Required | Default | Description | | ----------------- | ------- | -------- | ------- | ------------------------------------------------------ | | `call_start_hour` | integer | No | - | Start of allowed calling window (0-23, 24-hour format) | | `call_end_hour` | integer | No | - | End of allowed calling window (0-23, 24-hour format) | **Example: Business hours (9 AM - 5 PM)** ```bash theme={"system"} curl --request POST \ --url https://api.bolna.ai/v2/agent \ --header 'Authorization: Bearer YOUR_API_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "agent_config": { "agent_name": "Sales Agent", "agent_welcome_message": "Hello, how can I help you?", "calling_guardrails": { "call_start_hour": 9, "call_end_hour": 17 }, "tasks": [...] }, "agent_prompts": {...} }' ``` Hours use 24-hour format where 0 = midnight, 9 = 9 AM, 17 = 5 PM, 23 = 11 PM. `call_end_hour` must be greater than or equal to `call_start_hour`. ## Making Calls ### Standard Call (With Guardrails) When you initiate a call, the agent's guardrails are automatically applied: ```bash theme={"system"} curl --request POST \ --url https://api.bolna.ai/call \ --header 'Authorization: Bearer YOUR_API_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "recipient_phone_number": "+14155551234", "user_data": {...} }' ``` **What happens:** * If within allowed hours → Call is made immediately * If outside allowed hours → Call status is set to `rescheduled` and automatically rescheduled to next `call_start_hour` ### Bypass Call Guardrails The `bypass_call_guardrails` parameter allows you to skip all time validation checks for specific calls. When set to `true`, calls are made immediately regardless of configured time windows. **When to use bypass:** * Emergency calls or critical notifications * VIP/priority calls that can't wait * Testing call flows in development * Time-sensitive notifications or alerts **Single call with bypass:** ```bash theme={"system"} curl --request POST \ --url https://api.bolna.ai/call \ --header 'Authorization: Bearer YOUR_API_TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "recipient_phone_number": "+14155551234", "bypass_call_guardrails": true, "user_data": {...} }' ``` Use the bypass flag responsibly. Bypassing guardrails may violate calling regulations or disturb recipients. ## Common Use Cases ### Business Hours Only Configure standard 9-5 business hours: ```json theme={"system"} { "calling_guardrails": { "call_start_hour": 9, "call_end_hour": 17 } } ``` Calls are only made between 9:00 AM and 5:00 PM in the recipient's timezone. ## Important Notes * **Time format**: Use 24-hour format (0-23). * **Timezone behavior**: Time validation uses the **recipient's timezone**, automatically detected from phone number. * **Automatic rescheduling**: Calls outside allowed hours are automatically rescheduled to the next `call_start_hour`. No manual intervention required. * **Bypass flag**: For single calls (`POST /call`) use flag bypass\_call\_guardrails. Default is `false`. * **status**: The status is updated to `rescheduled` when the call is triggered outside allowed hours ## In-Call Reschedule Validation When a user asks to reschedule a call to a specific time during a conversation (e.g., "reschedule for 9 PM today"), the system validates the requested time against the agent's allowed calling window before scheduling it. **Priority order for validation:** 1. **`calling_guardrails`** — explicit `call_start_hour` / `call_end_hour` config always takes precedence 2. **Agent prompt** — if no explicit guardrails are set, the LLM reads the agent's system prompt for any mentioned time restrictions 3. **Default window (9 AM – 9 PM)** — fallback if neither of the above is configured If the requested reschedule time falls outside the allowed window, the reschedule is dropped entirely. The system does not snap to the boundary — if the time is disallowed, the request is rejected. Ensure your agent's system prompt and `calling_guardrails` config mention the same calling hours to avoid inconsistent behavior during conversations. ## Next Steps * [Make outbound calls](/docs/making-outgoing-calls) - Learn the basics of making calls * [Batch calling](/docs/batch-calling) - Schedule calls in bulk * [Auto-retry](/docs/auto-retry) - Automatically retry failed calls * [API reference for making calls](/docs/api-reference/calls/make) - Full API documentation # Bolna AI Updates for April, 2025 Source: https://www.bolna.ai/docs/changelog/april-2025 Explore the latest features, improvements, and API updates introduced in April 2025 for Bolna Voice AI agents. ## Call Frequency Limiting * Set a limit on the maximum number of inbound calls allowed from a unique phone number to a given destination number. Call frequency limiting helps prevent spam, abuse, or unintended repeated calls. ## Improvements * All inbound and outbound calls to have a maximum limit of `25KB` for injecting context. * Learn more on [injecting context for inbound calls](/docs/customizations/identify-incoming-callers) for inbound calls. * Learn more on [injecting context for outbound calls](/docs/using-context) for outbound calls). ## Inbound Whitelist Control * Configure inbound rules to allow calls only from specific whitelisted phone numbers. Inbound whitelist control ensures that only trusted callers can initiate conversations with your agents. ## Improvements * Latency improvements for agents using [guardrails](/docs/guardrails). * Tool information will now be available in the post call analysis like [extraction](/docs/using-extractions) & summarization. ## Deepgram Aura-2 TTS Support * Added support for [Deepgram's](/docs/providers/voice/deepgram) Aura-2 TTS model `aura-2`. ## Improvements * Transcripts will now be more [accurate by incorporating interruptions](/docs/customizations/capturing-precise-transcripts). ## OpenAI GPT-4.1 Model Support * Added support for OpenAI's **GPT-4.1** family of models: `gpt-4.1`, `gpt-4.1-mini` & `gpt-4.1-nano`. ## Improvements * Ability to remove voices from your account * Audio recordings are now stored in `dual` (stereo) mode for both inbound & outbound calls. # Bolna AI Updates for April, 2026 Source: https://www.bolna.ai/docs/changelog/april-2026 Explore the latest features and improvements introduced in April 2026 for Bolna Voice AI agents. ## Conversation Rating & Feedback You can now rate and leave feedback on individual conversations directly from the dashboard. After reviewing a call, score it from 1 (Poor) to 4 (Excellent) and optionally add a note to capture what went well or what needs improvement. Scores and notes stay internal to your team, making it easy to track agent quality over time and share context during reviews. Conversation rating dialog ## Import custom functions from cURL You can now paste a `curl` request while creating a custom function in the **Tools** tab and use it to generate a draft configuration automatically. This makes it much faster to bring existing API requests into Bolna without rebuilding the function setup from scratch. Learn more in the [Custom Functions documentation](/docs/tool-calling/custom-function-calls#import-from-curl). ## LLM reasoning in execution logs The [Get execution raw logs](/docs/api-reference/executions/get_execution_raw_logs) API now includes optional **`reasoning_content`** on LLM response rows when the underlying model returns traceable reasoning (for example OpenAI reasoning summaries or Gemini thinking). It appears alongside the usual **`data`** field for assistant turns. In the dashboard, use **Call history → Trace Data** ([Call history](/docs/call-history)) to inspect execution logs while debugging. ## Extraction Confidence, Reasoning & Typed Responses Extraction results now include richer signal to help you trust and act on post-call data: * **Confidence score** — every extraction result carries a `confidence` score (0.0–1.0) and a `confidence_label` (`"High"` ≥ 0.8, `"Medium"` ≥ 0.5, `"Low"` \< 0.5). Use these to route low-confidence results for human review before pushing data downstream. * **Reasoning** — `reasoning_subjective` and `reasoning_objective` explain exactly why the LLM produced each answer, making it much easier to audit unexpected results. * **Expected Format for free text** — you can now constrain free-text responses to a specific type: `timestamp` (ISO 8601), `numeric`, `boolean`, `email`, or a **custom regex** pattern. Responses are validated post-LLM; mismatches are flagged in a `validation` field while the original answer is still preserved. ```json theme={"system"} { "subjective": "user@example.com", "objective": null, "confidence": 0.95, "confidence_label": "High", "reasoning_subjective": "Customer clearly provided their email address during the call.", "validation": { "is_valid": true, "expected_type": "email" } } ``` Learn more in the [Using Extractions documentation](/docs/using-extractions) and [Dispositions API reference](/docs/api-reference/dispositions/overview). ## Multilingual Agent Support You can now launch multilingual agents with language-specific configuration across prompts, speech recognition, and text-to-speech. This makes it easier to set up agents that can operate cleanly across multiple languages from a single workflow. Learn more in the [Multilingual voice agents documentation](/docs/customizations/multilingual-languages-support). ## Region-Based Indian Phone Number Search You can now search Indian phone numbers by region directly in the dashboard. This makes it easier to find numbers for a specific geography. Learn more in the [Phone Numbers API documentation](/docs/api-reference/phone-numbers/search). ## Unified Voice Configuration in Agent Setup You can now configure TTS voices from a single place in agent setup with a unified selector for provider, model, and voice. This makes it easier to find and apply the right voice without jumping across multiple controls. The updated voice selector includes: * Search across available voices by name * Gender filters for `male`, `female`, and `neutral` voices * Inline voice sample playback while selecting a voice Learn more in the [Audio Tab documentation](/docs/agent-setup/audio-tab). # Bolna AI Updates for August, 2025 Source: https://www.bolna.ai/docs/changelog/august-2025 Explore the latest features, improvements, and API updates introduced in August 2025 for Bolna Voice AI agents. ## Support for scheduling calls at a future timestamp in `/call` endpoint. * If `scheduled_at` is provided, the call will be queued and executed at that timestamp. Refer [docs](https://www.bolna.ai/docs/api-reference/calls/make#body-scheduled-at). ## Instantly Clone Voices with a Single Click * You can now create high-quality AI clones of any voice directly from the Voice Lab. * Simply provide a name and a 1-2 minute audio sample to generate a new, unique voice for your agents. * Voice cloning is powered by leading providers like ElevenLabs to ensure top-tier quality. Learn more in our [new guide to cloning voices](https://www.bolna.ai/docs/clone-voices). Voice Lab clone voices feature interface in Bolna showing one-click voice cloning with audio sample upload ## Added `OpenRouter` support * Support for the following models via [OpenRouter](/docs/providers/llm-model/openrouter). Learn more about OpenRouter from their [official website](https://openrouter.ai). 1. `gpt-4.1` OpenRouter OpenAI 2. `gpt-4.1-mini` OpenRouter OpenAI 3. `gpt-4.1-nano` OpenRouter OpenAI 4. `gpt-4o` OpenRouter OpenAI 5. `gpt-4o-mini` OpenRouter OpenAI 6. `gpt-4` OpenRouter OpenAI OpenRouter OpenAI model selection interface in Bolna showing available GPT models for Voice AI agents ## Add your own `OpenRouter` API keys * Use your own OpenRouter account by adding your API Key to the [OpenRouter provider](https://www.bolna.ai/docs/providers). OpenRouter provider connection setup in Bolna showing API key configuration # Bolna AI Updates for December, 2024 Source: https://www.bolna.ai/docs/changelog/december-2024 Explore the latest features, improvements, and API updates introduced in December 2024 for Bolna Voice AI agents. ## Batch Management Enhancements * Download batches that have been uploaded * Display batch call status breakdown for better tracking ## API Updates * Batches APIs - Added breakdown for batches executions ([API doc](/docs/api-reference/batches/get_batch)) ## New Features * Added Cartesia TTS support for voice synthesis * Implemented voicemail detection for Twilio & Plivo calls * Enabled call hangup using prompts (see [hangup live calls on Bolna](/docs/hangup-calls)) * Introduced multi-agent prompt building (see [multi-agent prompt](/docs/multi-agent-prompt)) ## Major Platform Updates * Added support for over 40+ languages (see [supported languages](/docs/customizations/multilingual-languages-support)) * Knowledgebases are now functional in all supported languages and work together with LLM-driven context (see [ingesting and using KBs](/docs/getting-started/knowledge-base)) * Revamped batches for simpler processing and management (see [using batches](/docs/batch-calling)) * Added call hangup information for all calls ## Improvements & Migrations * Changed `execution_id` notation from `{agent_id}#{timestamp}` to a unique `{uuid}` format. * The execution ID overhaul addresses previous scaling issues and product complications. ## API Updates #### New APIs * Get call details using only `execution_id` ([API doc](/docs/api-reference/executions/get_execution)) * Set inbound agent programmatically ([API doc](/docs/api-reference/inbound/agent)) * Get a list of all added voices for your account ([API doc](/docs/api-reference/voice/get_all)) #### API changes * Call APIs - Outbound calls will now return the unique `execution_id` ([API doc](/docs/api-reference/calls/make)) * Batches APIs - removed redundant need of `agent_id` wherever applicable ([API doc](/docs/api-reference/batches/overview)) * Execution APIs - removed redundant need of `agent_id` wherever applicable ([API doc](/docs/api-reference/executions/overview)) # Bolna AI Updates for December, 2025 Source: https://www.bolna.ai/docs/changelog/december-2025 Explore the latest features, improvements, and API updates introduced in December 2025 for Bolna Voice AI agents. ## Mention function calls using '@' in agent prompts You can now mention function calls directly in your agent prompt using the `@` symbol. Simply type `@` followed by the function name to reference it in your instructions, making it easier to guide your agent on when to use specific functions. Agent prompt interface showing '@' symbol for mentioning function calls in Bolna Voice AI agent instructions ## New Transcriber Integration: Pixa Bolna's transcriber lineup grows with **[Pixa](/docs/providers/transcriber/pixa)**. Use it as an additional transcription backend to pick the provider that best matches your agent's domain and reliability needs. ## New Transcriber Integration: Gladia You can now plug **[Gladia](/docs/providers/transcriber/gladia)** into Bolna for speech-to-text. This adds another strong choice for teams that want flexibility across languages and scenarios. ## New Transcriber Integration: ElevenLabs Scribe **[ElevenLabs Scribe](/docs/providers/transcriber/elevenlabs)** is now available as a transcriber option in Bolna. This provides more flexibility for building voice AI agents across different languages and use cases. ## URL support for Knowledgebases Knowledgebases now support [website URLs](/docs/getting-started/knowledge-base) as data sources, allowing you to ingest and reference content directly from web links. ## Improved Knowledgebase support * Added support for multiple PDF documents which can be used together. * Fixed issues with function calls while using knowledgebases. * Improved retrieval accuracy and reduced response latency. # Bolna AI Updates for February, 2025 Source: https://www.bolna.ai/docs/changelog/february-2025 Explore the latest features, improvements, and API updates introduced in February 2025 for Bolna Voice AI agents. ## Webcall Support * Added webcall support to help users build and test their Bolna Voice AI agents directly in the browser. ## Voice Import Integration * Integrated support for [importing voices](/docs/import-voices) from multiple providers like ElevenLabs and Cartesia, along with custom voice options — making voice agent personalization on Bolna AI smoother and more flexible than ever. ## Deepgram Nova-3 Model Support * Added [Deepgram `nova-3` model](/docs/providers/transcriber/deepgram#4-list-of-deepgram-models-supported-on-bolna-ai) for speech to text capabilities. ## ElevenLabs Flash v2.5 Model Support * Added [ElevenLabs `eleven_flash_v2_5` model](/docs/providers/voice/elevenlabs#4-list-of-elevenlabs-models-supported-on-bolna-ai) for text to speech capabilities. ## Improvements * Hangup live calls automatically on [detecting silence](/docs/hangup-calls#1-using-time-based-call-hangup) and [using LLM prompts](/docs/hangup-calls#2-using-prompts-to-hangup-calls). * Add a [hangup message](/docs/hangup-calls#adding-a-hangup-message) to be spoken while disconnecting the call # Bolna AI Updates for February, 2026 Source: https://www.bolna.ai/docs/changelog/february-2026 Explore the latest features, improvements, and API updates introduced in February 2026 for Bolna Voice AI agents. ## Override Agent Config in /call API The `/call` API now supports an `agent_data` parameter that lets you override agent configuration properties at call time. Currently, overriding the `voice_id` (for the same provider) is supported. This allows you to dynamically change the voice used for a specific call without modifying the agent's default configuration. ```json Example theme={"system"} { "agent_id": "123e4567-e89b-12d3-a456-426655440000", "recipient_phone_number": "+919876543210", "agent_data": { "voice_id": "Sam" } } ``` Learn more in the [Make a Phone Call API documentation](/docs/api-reference/calls/make). ## Sarvam v3 Models Support Bolna now supports **Sarvam v3** models: * **saaras:v3** — New transcriber model configured for direct transcription in the original spoken language. Supports all 11 Indian languages. * **bulbul:v3** — New Sarvam TTS voice model for improved Indian language speech synthesis. Learn more about Sarvam transcriber models in the [Sarvam STT documentation](/docs/providers/transcriber/sarvam) and voice models in the [Sarvam TTS documentation](/docs/providers/voice/sarvam). ## Deepgram: New Indian Languages Added Bolna now supports additional **Deepgram** Indian languages for speech recognition: * **bn** — Bengali * **kn** — Kannada * **mr** — Marathi * **te** — Telugu ## API Rate Limiting Bolna APIs now enforce rate limits to ensure fair usage and platform stability. Rate limits are applied per **organization** (if the user belongs to one) or per **user** otherwise. **Endpoint-specific limits:** | Endpoint | Rate Limit | | --------------------------------- | ------------------- | | `/v2/agent/{agent_id}/executions` | 500 requests/minute | | `/v2/agent/{agent_id}` | 500 requests/minute | | `/call` | 500 requests/minute | All other API endpoints are subject to a default rate limit of **1000 requests per minute**. Requests exceeding the limit will receive an HTTP 429 response. Learn more in the [rate limiting documentation](/docs/api-reference/rate-limiting). ## Truecaller Verification Bolna now supports **Truecaller Verification** — users can get their phone numbers **verified on Truecaller**, so your calls show a verified identity to recipients. This helps build trust and can improve answer rates by making it clearer who’s calling. Learn more in the [Truecaller Verification documentation](https://www.bolna.ai/docs/truecaller-verification). # Bolna AI Updates for January, 2025 Source: https://www.bolna.ai/docs/changelog/january-2025 Explore the latest features, improvements, and API updates introduced in January 2025 for Bolna Voice AI agents. ## Bug fixes * Execution `status` wasn't getting updated for few incoming calls with connected Twilio telephony ## API Updates * Agent APIs - Added functionality to programmatically delete agents via APIs ([API doc](/docs/api-reference/agent/v2/delete)) ## Bug fixes * Few executions were erroneously loosing the `batch_id` mapping # Bolna AI Updates for January, 2026 Source: https://www.bolna.ai/docs/changelog/january-2026 Explore the latest features, improvements, and API updates introduced in January 2026 for Bolna Voice AI agents. ## Vobiz Telephony Integration * Introducing native Vobiz integration for Voice AI calling in India and global markets * Connect your existing Vobiz account securely to Bolna for complete control over your telephony infrastructure * Make outbound AI calls and receive inbound calls using your own Vobiz phone numbers * Support for both dashboard-based calling and programmatic API integration * Learn more in the [Vobiz integration documentation](/docs/vobiz) ## Auto-Retry for Failed Calls Automatically retry calls that fail due to no-answer, busy signals, or errors. Configure retry attempts, delays, and which statuses trigger retries. **Key features:** * Up to 3 automatic retry attempts * Configurable delays between retries * Works with single calls and batch campaigns * Webhook notifications include retry status Learn more in the [auto-retry documentation](/docs/auto-retry). ## IVR Support for Inbound Calls Bolna now supports IVR (Interactive Voice Response) for Plivo inbound calls. Route callers to different Voice AI agents based on their menu selections. **Key features:** * **Menu steps** - Present options and route based on digit pressed * **Collect steps** - Gather multi-digit input (account numbers, PINs) * **Multi-agent routing** - Different agent per menu option * **Conditional branching** - Build complex flows with language selection * **Context passing** - All collected data sent to agent as context Configure IVR via the `/inbound/setup` API by adding `ivr_config` to your request. Learn more in the [IVR documentation](/docs/ivr-inbound-calls). ```json theme={"system"} { "ivr_config": { "enabled": true, "voice": "Polly.Aditi", "welcome_message": "Welcome to Acme Corp.", "steps": [ { "step_id": "department", "type": "menu", "prompt": "Press 1 for Sales. Press 2 for Support.", "field_name": "department", "options": [ {"digit": "1", "label": "Sales", "agent_id": "sales-agent-id"}, {"digit": "2", "label": "Support", "agent_id": "support-agent-id"} ] } ] } } ``` ## Multilingual Message Auto Switching Bolna now automatically detects the language your users speak and adapts system messages accordingly. Bolna agents analyze conversation patterns and intelligently switche messages to match the detected language. Bolna agents are now able to identify the dominant language while handling real-world conversational scenarios where users mix languages. This ensures messages are delivered in the language users actually prefer for substantive communication. **Currently supported message types:** * **User online check message** - The "are you still there?" prompt when checking if users are on the call * **Call hangup message** - Closing messages when the agent ends a call * **Pre-function call message** - Brief wait messages while executing custom tools or API calls Configure multilingual variants using language codes (e.g., `en`, `hi`, `ta`, etc) and Bolna handles the rest. Learn more in the [language detection documentation](/docs/customizations/auto-switch-multilingual-messages). ## Noise Cancellation During Calls Bolna now supports noise cancellation during calls, providing clearer audio quality by filtering out background noise for both the agent and the caller. Noise cancellation toggle to choose the level on Bolna platform ## Auto Reschedule Automatically reschedule calls when a user asks to be called at a specific time. The agent will intelligently detect scheduling requests and handle the rescheduling process seamlessly. Toggle to automatically reschedule calls on Bolna platform # Bolna AI Updates for July, 2025 Source: https://www.bolna.ai/docs/changelog/july-2025 Explore the latest features, improvements, and API updates introduced in July 2025 for Bolna Voice AI agents. ## Bolna AI Data Residency * [Introducing India Data Residency](/docs/enterprise/data-residency) for enterprise-grade Voice AI, now hosted in India for compliance and improved performance. ## Phone Number Management APIs * Search available phone numbers [using APIs](/docs/api-reference/phone-numbers/search). * Buy available phone numbers [using APIs](/docs/api-reference/phone-numbers/buy). * Delete and remove phone numbers [using APIs](/docs/api-reference/phone-numbers/delete). ## Rime TTS Voice Support * Added [Rime TTS](/docs/providers/voice/rime) voices and models: * `arcana` models and voices * `mistv2` models and voices ## Sarvam Bulbul v2 WebSocket Integration * Incorporated websockets for Sarvam `bulbul:v2` model to improve real-time performance. # Bolna AI Updates for June, 2025 Source: https://www.bolna.ai/docs/changelog/june-2025 Explore the latest features, improvements, and API updates introduced in June 2025 for Bolna Voice AI agents. ## Bolna AI On-Premise Offering * Rolling out Bolna AI [On-Premise offering](/docs/enterprise/on-premise-deployments) in Private Beta for enterprise customers. ## Agent Data Ingestion Configuration * Exposed `ingest_source_config` for agents, enabling inbound calls to ingest user data via APIs. * The following APIs have been updated to reflect these changes: * Get Agent API [API reference doc](/docs/api-reference/agent/v2/get) * Create Agent API [API reference doc](/docs/api-reference/agent/v2/create) * Update Agent API [API reference doc](/docs/api-reference/agent/v2/update) * Patch update Agent API [API reference doc](/docs/api-reference/agent/v2/patch_update) * List Agents API [API reference doc](/docs/api-reference/agent/v2/get_all) ## TTS Model Switching in UI Dashboard * Enabled TTS model switching directly from the UI Dashboard for easier voice model management. TTS synthesizer model provider selection interface in Bolna dashboard showing voice models for Voice AI agents ## Sub-Account API Endpoints * Added the following APIs for sub-account management: * Create sub-account API [API reference doc](/docs/api-reference/sub-accounts/create) * List all sub-accounts API [API reference doc](/docs/api-reference/sub-accounts/get_all) * Track sub-accounts usage API [API reference doc](/docs/api-reference/sub-accounts/usage) # Bolna AI Updates for March, 2025 Source: https://www.bolna.ai/docs/changelog/march-2025 Explore the latest features, improvements, and API updates introduced in March 2025 for Bolna Voice AI agents. ## Improvements * Enabling `strict` mode for custom tools to ensure function calls reliably adhere to the function schema, instead of being best effort. * Updating the UI for the custom tools and improving the [documentation with examples](/docs/tool-calling/custom-function-calls). ## Dynamic Caller Identification * Bolna Voice AI agents can now dynamically identify incoming callers in real time via: 1. using [your internal APIs](/docs/customizations/identify-incoming-callers#1-internal-api-integration-real-time-lookup) which returns records mapped to a phone number, 2. using uploaded [CSV files](/docs/customizations/identify-incoming-callers#2-csv-uploads) or 3. using publicly linked [Google Sheets](/docs/customizations/identify-incoming-callers#3-google-sheets-integration). ## Azure Transcriber Support * Added Azure's transcriber models for speech to text. ## Improvements * Infrastructure changes & updates to improve initial conversational latencies. ## Bolna Status Page Launch * Launched the [Bolna Status page](https://status.bolna.ai) where you can track real-time system updates, maintenance notices, and any ongoing outage updates. ## Bug fixes * Bolna Voice AI agents will now have the context about current `timestamp` & `timezone` automatically by default which can be used. This helps the agent compute times accurately based on your local setting. * This can be [overridden](/docs/using-context#injecting-current-time) by passing the `timezone` as well. # Bolna AI Updates for March, 2026 Source: https://www.bolna.ai/docs/changelog/march-2026 Explore the latest features, improvements, and API updates introduced in March 2026 for Bolna Voice AI agents. ## Custom Ambient Noise Tracks You can now upload your own **custom ambient noise tracks** in addition to the existing presets. This gives you full control over the background soundscape of your calls. **What's new:** * **Upload custom tracks** via `POST /ambient-sounds/custom` — supports `wav` and `mp3` formats, up to **10 MB** * **Delete custom tracks** via `DELETE /ambient-sounds/{sound_id}` * **List all tracks** via `GET /ambient-sounds` — returns both presets and your custom tracks, each with a `type` field (`preset` or `custom`) **What's changed:** * `ambient_noise_track` now accepts the **id** of an ambient sound record instead of a preset name enum * The three preset tracks remain available with the same IDs: `coffee-shop`, `office-ambience`, `call-center` Ambient noise continues to be supported with **Plivo** and **Vobiz** telephony providers. Read more in the [Call Tab documentation](/docs/agent-setup/call-tab#ambient-noise). ## Extractions - Capture Structured Data from Call Transcripts We've added **Extractions** to automatically pull structured data from your call transcripts. Instead of manually reviewing conversations, you can set up categories and questions to extract things like lead quality, appointment details, or customer sentiment. Here's what you can do: * **Organize by category** - Group related extractions together (like "Visit Details" or "Lead Qualification") * **Choose your answer format** - Use free text for open-ended responses or pre-defined options with conditional logic * **Use variables** - Reference call data like `{name}`, `{email}`, or `{candidate_name}` in your extraction prompts * **Test before deploying** - Try out your extractions on sample transcripts or paste in custom ones * **Multiple access methods** - Available via Dashboard, Executions API, Webhooks, and Batch Executions Extractions return data in this format: ```json theme={"system"} { "extracted_data": { "Category Name": { "Extraction Name": { "subjective": "Free text response from LLM", "objective": "Pre-defined value or null" } } } } ``` Use it for lead scoring, syncing appointments, preventing churn, compliance auditing, or general call intelligence. Learn more in the [Using Extractions documentation](/docs/using-extractions) and [Dispositions API reference](/docs/api-reference/dispositions/overview). ## Prompt Variables for Date, Time & Timezone You can now use `{current_date}`, `{current_time}`, and `{timezone}` as variables directly in your agent prompts for more control over placement and formatting of date/time information. | Variable | Description | Example Value | | ---------------- | ----------------------------------- | --------------------------- | | `{current_date}` | Current date in the user's timezone | `Wednesday, March 18, 2026` | | `{current_time}` | Current time in the user's timezone | `02:30:15 PM` | | `{timezone}` | Timezone name per tz database | `Asia/Kolkata` | Read more in the [Using Context documentation](/docs/using-context#date-time--timezone). ## Ambient Noise for Calls You can now add background ambient noise to your calls for a more natural, human-like experience. Use the `ambient_noise_track` parameter to select a preset track. Available tracks: * **`coffee-shop`** — Background sounds of a coffee shop environment * **`office-ambience`** — Subtle office background noise * **`call-center`** — Call center ambient sounds Set `ambient_noise_track` to `None` to disable ambient noise (default). Ambient noise is supported with **Plivo** and **Vobiz** telephony providers. *** ## In-Call Reschedule Validation When a user asks to reschedule a call to a specific time during a conversation, the system now validates the requested time against the agent's allowed calling window before scheduling it. **Priority order for validation:** 1. **`calling_guardrails`** — explicit `call_start_hour` / `call_end_hour` config always takes precedence 2. **Agent prompt** — if no explicit guardrails are set, the LLM reads the agent's system prompt for any mentioned time restrictions 3. **Default window (9 AM – 9 PM)** — fallback if neither of the above is configured If the requested reschedule time falls outside the allowed window, the request is rejected entirely. Read more in the [Calling Guardrails documentation](/docs/calling-guardrails#in-call-reschedule-validation). *** ## Vobiz Telephony Number Buying You can now search and purchase phone numbers from **Vobiz** directly via the API and the dashboard UI. The `provider` parameter has been added to phone number search and purchase endpoints, supporting `twilio`, `plivo`, and `vobiz`. Read more in the [Phone Numbers API documentation](/docs/api-reference/phone-numbers/search). ## Google Gemini Flash Models Support Bolna now supports **Google Gemini** Flash models as LLM providers for voice AI agents. The following models are available: * **gemini-2.5-flash** — Production-ready, best speed and quality balance. 1M token context window. * **gemini-2.5-flash-lite** — Most cost-effective in the Gemini 2.5 family, optimized for low latency. * **gemini-3-flash-preview** — Next-generation Gemini model with improved reasoning (released Dec 2025). * **gemini-3.1-flash-lite-preview** — Fastest throughput at 363 tokens/sec, ideal for high-volume workloads (released Mar 2026). All models support **English, Hindi, Gujarati, French, Italian, and Spanish**. Learn more in the [Google Gemini documentation](/docs/providers/llm-model/gemini). ## Multilingual Knowledge Base Support Knowledge bases now support **multilingual** language mode. When creating a knowledge base, set `language_support` to `multilingual` to enable cross-lingual retrieval across 100+ languages. This enables: * Uploading documents in any language (Hindi, Spanish, French, etc.) * Cross-lingual retrieval — query in one language, retrieve from documents in another Set the `language_support` parameter via the [Create Knowledgebase API](/docs/api-reference/knowledgebase/create) or through the dashboard when adding a new knowledge base. Read more in the [Knowledge Base documentation](/docs/getting-started/knowledge-base#multilingual-knowledge-bases). ## Provision to purchase 140 & 160 series phone numbers Bolna agents can now be triggered with 140 & 160 series phone numbers to comply with TRAI regulations. Read about procuring these phone numbers on [Purchase special phone numbers documentation](/docs/obtaining-regulated-phone-numbers). # Bolna AI Updates for May, 2025 Source: https://www.bolna.ai/docs/changelog/may-2025 Explore the latest features, improvements, and API updates introduced in May 2025 for Bolna Voice AI agents. ## Latency Improvements for Azure TTS * We've optimized our Azure TTS integration for significantly lower end-to-end latency, resulting in faster voice generation and snappier response times for live calls. ## Smallest.ai Lightning-v2 TTS Support * Added support for Smallest.ai's latest `lightning-v2` TTS model for Bolna AI voice agents. ## Extended Call Duration Limit * Extended maximum call duration to 40 minutes, allowing for longer interviews or conversations without interruption. ## Azure OpenAI Model Updates * Added support for the following Azure OpenAI clusters: 1. `gpt-4.1` Azure OpenAI 2. `gpt-4.1-mini` Azure OpenAI 3. `gpt-4.1-nano` Azure OpenAI 4. `gpt-4o` Azure OpenAI 5. `gpt-4o-mini` Azure OpenAI 6. `gpt-4` Azure OpenAI Azure OpenAI model selection interface in Bolna showing available GPT models for Voice AI agent configuration ## ElevenLabs Multi-Context WebSocket Integration * Updated ElevenLabs to use [`Multi-Context WebSocket`](https://elevenlabs.io/docs/cookbooks/multi-context-web-socket) for improved latency and fluency. * The Multi-Context WebSocket greatly improves websocket handling, closures, and session contexts. ## Multilingual Support Expansion * Bolna now supports over 100+ different languages including English (India), English (United States), English (United Kingdom), and many more. ## Updates * Users can now top up for **\$1000 USD** in one go. Billing top-up interface in Bolna platform showing $1000 USD payment option for your account * Users can now opt for auto recharge. Auto recharge configuration in Bolna billing settings for automatic account funding when credits run low ## Improvements * Latency improvements across the AI voice call stack. * Execution pages now support filters and column selections. Updated executions dashboard in Bolna platform showing enhanced filtering and column selection features for call management ## viaSocket Integration * Added [viaSocket](/docs/integrations#external-integrations) integration with Bolna Voice AI agents. * Tutorial: Learn how to [create a Bolna API connection with viaSocket](/docs/tutorials/viasocket/create-bolna-api-connection). ## Sarvam TTS Bulbul-v2 Support * Added [Sarvam TTS](/docs/providers/voice/sarvam) `bulbul-v2` model for Bolna Voice AI agents. # Bolna AI Updates for May, 2026 Source: https://www.bolna.ai/docs/changelog/may-2026 Explore the latest features and improvements introduced in May 2026 for Bolna Voice AI agents. ## SIP trunks — TCP, TLS, and audio encryption You can now create BYOT SIP trunks over TCP or TLS, and turn on end-to-end audio encryption on TLS trunks. See [SIP trunk setup](/docs/sip-trunking/byot-setup). ## Recording URLs Moving to Bolna-Hosted Endpoint — Action Required by June 1 Direct Amazon S3 recording URLs will stop working after **June 1, 2026**. If your integration stores, parses, or fetches recording URLs, you must update it before that date. Starting June 1, call recording URLs will be served through a stable Bolna-hosted endpoint instead of raw Amazon S3 URLs. **New endpoint format:** ``` https://api.bolna.ai/recordings/call/{execution-id} https://api.bolna.ai/recordings/transfer/{execution-id} ``` Use the `transfer` variant if the call included a transfer leg. **Previous format (will stop working after June 1):** ``` https://bolna-recordings-india.s3.amazonaws.com/{vendor}/{file}.mp3 ``` **Where the new URLs appear:** * `GET /executions/{execution-id}` — `telephony_data.recording_url` and `transfer_call_data.recording_url` * Post-call webhook payloads — the `recording_url` field * Dashboard — already updated The Bolna endpoint is permanent and stable. The **resolved pre-signed link it returns expires after 24 hours** — do not store or cache it. Store the `execution-id` and call the endpoint fresh each time you need playback or download access. **What to do before June 1:** 1. Audit anywhere your system stores, forwards, parses, or fetches recording URLs — CRMs, dashboards, post-call webhooks, data pipelines. 2. Update base URL handling to call `https://api.bolna.ai/recordings/call/{execution-id}` instead of the raw S3 URL. 3. Remove any caching of the resolved pre-signed link; always fetch fresh. 4. Test your updated integration while direct S3 URLs are still active. **Why this change?** Recordings are stored in private S3 buckets that require a signed URL for access. The new endpoint handles signing on your behalf, removes direct exposure of bucket structure, and enforces access controls at the Bolna layer. If you have questions, contact [support@bolna.ai](mailto:support@bolna.ai). ## OpenAI Realtime Transcriber — GA with gpt-realtime-whisper The OpenAI Realtime transcriber is now generally available on Bolna using the `gpt-realtime-whisper` model. This replaces the previous alpha model (`gpt-transcribe-alpha-walrus`) and connects via OpenAI's GA `?intent=transcription` WebSocket endpoint. **What's new:** * Model updated to `gpt-realtime-whisper` — OpenAI's natively streaming transcription model * Server-side VAD is built into the model — no manual endpointing configuration required * Streaming interim transcript deltas arrive as the caller speaks * `effort` parameter renamed to `delay` for clarity (controls latency vs accuracy trade-off) * Optional near-field noise reduction toggle Set `provider: "openai"` and `model: "gpt-realtime-whisper"` in your transcriber configuration to use it. Learn more in the [OpenAI Realtime Transcriber documentation](/docs/providers/transcriber/openai). ## Deepgram Flux Transcriber — Now Available Bolna now supports **Deepgram Flux**, a next-generation transcription engine built for real-time voice AI. Flux models have turn detection built directly into the model, replacing external VAD-based endpointing with a richer event stream that lets agents respond sooner and handle barge-ins more accurately. **Two models are available:** * `flux-general-en` — English-optimised Flux model * `flux-general-multi` — Multilingual Flux model with built-in Language Identification **What's new:** * **Configurable EndOfTurn Threshold** (`eot_threshold`) — control how confident the model must be before committing to a final transcript * **EndOfTurn Timeout** (`eot_timeout_ms`) — maximum silence window before forcing a turn end, from 300 ms to 3 s * **Eager EndOfTurn** — Bolna can start an LLM request speculatively on `EagerEndOfTurn`, cutting perceived response latency; if the speaker continues (`TurnResumed`), the request is cancelled * **Language Identification** (`flux-general-multi` only) — detected languages are returned per turn, enabling dynamic multilingual handling without pre-configuring a language Learn more in the [Deepgram Flux Transcriber documentation](/docs/providers/transcriber/deepgram-flux). ## Custom Headers for Webhooks You can now send **custom HTTP headers** along with your execution-data webhook from the agent's **Analytics** tab. Toggle **Add headers** next to the webhook URL and provide a JSON object of header key-value pairs — Bolna will include them on every webhook delivery for that agent. This makes it easier to authenticate webhook requests against your own services (for example, by sending an `Authorization` token, an API key, or a tenant identifier) without needing a proxy in front of your endpoint. Webhook configuration with custom headers JSON field Learn more in the [Analytics Tab documentation](/docs/agent-setup/analytics-tab). # Bolna AI Updates for November, 2025 Source: https://www.bolna.ai/docs/changelog/november-2025 Explore the latest features, improvements, and API updates introduced in November 2025 for Bolna Voice AI agents. ## Support for AiSensy WhatsApp messaging Bolna now supports **AiSensy** for sending WhatsApp messages, enabling seamless WhatsApp outreach as part of your workflows and campaigns. ## Configurable Style exaggeration parameter for ElevenLabs We've added **Style Exaggeration** controls for ElevenLabs voices, allowing you to fine-tune how expressive and stylistic the generated speech sounds. * Increase exaggeration for more dramatic, expressive delivery. * Reduce it for a more neutral and natural speaking style. ElevenLabs style exaggeration control in Bolna for adjusting expressiveness of text-to-speech output ## Revamped workflows and campaigns Bolna workflows and campaigns have been refreshed for a smoother build-and-run experience. Follow the step-by-step guide in [this doc](/docs/workflows-and-campaigns#creating-workflows) to create and launch workflows. * Build multi-step outreach flows with calls, WhatsApp, and email automation. ## Detailed latency metrics for Voice AI calls Bolna now provides comprehensive latency metrics for every Voice AI call. Learn more in the [latencies](/docs/call-latencies) documentation. * Monitor and optimize the performance of your conversational AI agents. * Gain clear visibility into where time is spent across the conversation pipeline. * Analyze latency using overall averages and percentiles such as P50, P90, and P95. ## We've added new configurable voice parameters for finer control over ElevenLabs TTS output: * **Similarity Boost** – Adjusts how closely the generated voice matches the original reference voice. * **Stability** – Controls variation in tone and expression, helping balance naturalness with consistency. ElevenLabs voice settings in Bolna showing configurable parameters like Similarity Boost and Stability for TTS output control ## Voice cloning available for Cartesia `sonic-3` models * You can now clone your voices using Cartesia's latest `sonic-3` text-to-speech model for the following languages: | Language | Language code | BCP Format | | --------- | ------------- | ---------- | | English | en | bn-IN | | Bengali | bn | bn-IN | | Gujarati | gu | gu-IN | | Hindi | hi | hi-IN | | Kannada | kn | kn-IN | | Malayalam | ml | ml-IN | | Marathi | mr | mr-IN | | Punjabi | pa | pa-IN | | Tamil | ta | ta-IN | | Telugu | te | te-IN | # Bolna AI Updates for October, 2025 Source: https://www.bolna.ai/docs/changelog/october-2025 Explore the latest features, improvements, and API updates introduced in October 2025 for Bolna Voice AI agents. ## Stop Agent Queued Calls API * Introducing a new API endpoint to stop all queued calls for a specific agent * Prevents any pending calls from being executed, giving you better control over agent call management * Use this endpoint to cancel all calls currently in the queue waiting to be executed * Useful for scenarios where you need to immediately halt all pending operations for an agent * Learn more in the [Stop Agent Queued Calls API documentation](/docs/api-reference/agent/v2/stop) ## Unsiloed Document Parser Integration * Integrated [Unsiloed](https://unsiloed.ai) as the parsing engine for knowledgebase PDFs, alongwith [LlamaParse](https://www.llamaindex.ai/llamaparse) as fallback. * Significantly improved accuracy for documents with complex tables, forms, and structured data * Uses UnsiloedHawk OCR engine with semantic layout detection for better text extraction * High-resolution processing ensures accurate capture of details from charts, diagrams, and small text * Learn more in the [Knowledgebases documentation](/docs/getting-started/knowledge-base) ## Cartesia Sonic-3-Preview Model Support for Indian multilingual voices * Added support for Cartesia's latest `sonic-3-preview` text-to-speech model including support for the following languages: | Language | Language code | BCP Format | | --------- | ------------- | ---------- | | English | en | bn-IN | | Bengali | bn | bn-IN | | Gujarati | gu | gu-IN | | Hindi | hi | hi-IN | | Kannada | kn | kn-IN | | Malayalam | ml | ml-IN | | Marathi | mr | mr-IN | | Punjabi | pa | pa-IN | | Tamil | ta | ta-IN | | Telugu | te | te-IN | * Enhanced voice quality and naturalness for AI voice agents using Cartesia TTS * The `sonic-3-preview` model delivers improved expressiveness and prosody for conversational AI applications * Available for all Cartesia TTS integrations in Bolna voice agents * Learn more in the [Cartesia TTS documentation](/docs/providers/voice/cartesia) ## Exotel Telephony Integration * Introducing native Exotel integration for Voice AI calling in India and global markets * Connect your existing Exotel account securely to Bolna for complete control over your telephony infrastructure * Make outbound AI calls and receive inbound calls using your own Exotel phone numbers * Support for both dashboard-based calling and programmatic API integration * Learn more in the [Exotel integration documentation](/docs/exotel) ## Remove Inbound Agent API * Introducing the ability to programmatically remove and unlink Bolna Voice AI agents from phone numbers * Use this API to remove the association between an agent and a phone number when the agent is no longer needed for handling inbound calls * Learn more in the [Remove Inbound Agent API documentation](/docs/api-reference/inbound/unlink) ## RAG Performance & Accuracy Improvements * **ONNX-optimized reranking**: Sub-second query times with parallel execution for faster, more accurate document retrieval * **MPNet embeddings**: Switched to `all-mpnet-base-v2` model for better semantic understanding of user queries * **Table extraction**: Specialized processor preserves table structure, numeric data, and formatting from PDFs * **Multi-collection queries**: Agents can now search across multiple knowledgebases simultaneously for comprehensive context * Learn more in the [Knowledgebases documentation](/docs/getting-started/knowledge-base) ## Sub-account Deletion API * Introducing the ability to programmatically delete sub-accounts and all their associated data through the API * The Sub-account Deletion API enables better account lifecycle management by allowing you to: * Remove test or development sub-accounts that are no longer needed * Clean up sub-accounts for clients who have churned or ended their service * Maintain a clean organizational structure by removing inactive sub-accounts * When a sub-account is deleted, **ALL** associated data is permanently removed, including: * All agents configured under that sub-account * All batch calling data and records * All execution history and call logs * All configurations and settings * Learn more in the [Sub-account Deletion API documentation](/docs/api-reference/sub-accounts/delete) # Bolna AI Updates for September, 2025 Source: https://www.bolna.ai/docs/changelog/september-2025 Explore the latest features, improvements, and API updates introduced in September 2025 for Bolna Voice AI agents. ## Phone Number Compliance Application Requirement * Introduced mandatory compliance application process for purchasing phone numbers on Bolna platform * Users must now submit business verification documents before purchasing dedicated phone numbers: * CIN (Corporate Identification Number) certificate * GST registration details and certificate * One-time application with 12-24 hour review process * Enhanced security and regulatory compliance for telecommunications services * Learn more: * [Compliance Requirements Overview](/docs/compliance-application/introduction) - Understand why compliance is required and what documents you need * [Step-by-Step Submission Guide](/docs/compliance-application/how-to-submit-guide) - Complete walkthrough of the application process ## Added Anthropic support for LLM * Support for the following [Anthropic](/docs/providers/llm-model/anthropic) models. Learn more about Anthropic models from their [official website](https://www.anthropic.com). 1. `claude-sonnet-4` ## Added Sarvam and AssemblyAI transcriber support * [Sarvam](/docs/providers/transcriber/sarvam) transcriber for Speech to Text (STT) capabilities with 11 Indian languages including English, Hindi, Bengali, Tamil, Telugu, Kannada, Malayalam, Marathi, Gujarati, Punjabi, and Odia. * [AssemblyAI](/docs/providers/transcriber/assemblyai) transcriber for Speech to Text (STT) capabilities with real-time English streaming capabilities ## Concurrency model at sub-account scope * Concurrency limits can now be configured at the sub-account level, allowing multiple calls or batches to run in parallel instead of being queued one after another. See how to configure concurrency when creating a sub-account in the ([API doc](/docs/api-reference/sub-accounts/create)) ## Batch Webhook Notifications * Users can now attach a webhook URL to a batch at upload time. When the batch status changes — `processed`, `scheduled`, `queued`, `running`, `completed` or `stopped`, webhook updates will be sent automatically to track the progress of batches in real time. Voice Lab clone voices feature interface in Bolna showing one-click voice cloning with audio sample upload ## Voice AI Agents Template Library The Voice AI Agents library now includes the following pre-built template agents to help you get started quickly with Bolna Voice AI: * [Recruitment Voice AI agent](/docs/voice-agents/recruitment-agent) * [Customer Support Voice AI agent](/docs/voice-agents/customer-support-agent) * [Cart Abandonment Voice AI agent](/docs/voice-agents/cart-abandonment-agent) * [Lead Qualification Voice AI agent](/docs/voice-agents/lead-qualification-agent) * [Onboarding Voice AI agent](/docs/voice-agents/onboarding-agent) * [Front Desk Voice AI agent](/docs/voice-agents/front-desk-agent) * [COD Confirmation Voice AI agent](/docs/voice-agents/cod-confirmation-agent) * [Announcements Voice AI agent](/docs/voice-agents/announcements-agent) * [Reminders Voice AI agent](/docs/voice-agents/reminders-agent) * [Surveys Voice AI agent](/docs/voice-agents/surveys-agent) * [Property Tech Voice AI agent](/docs/voice-agents/property-tech-agent) * [Dentist Appointment Voice AI agent](/docs/voice-agents/dentist-appointment-agent) * [Salon Booking Voice AI agent](/docs/voice-agents/salon-booking-agent) * [Weekend Planner Voice AI agent](/docs/voice-agents/weekend-planner-agent) * [Sales Credit Card Voice AI agent](/docs/voice-agents/sales-credit-card-agent) * [Sales Loans Voice AI agent](/docs/voice-agents/sales-loans-agent) ## API Updates * Cumulative view of all sub-account usage ([API doc](/docs/api-reference/sub-accounts/all_usage)) ## API Updates * Outbound calls in `queued` or `scheduled` state can be stopped before executions ([API doc](/docs/api-reference/calls/stop_call)) ## Passing headers in Custom Function tools * Passing custom `headers` is now supported on [function tooling](/docs/tool-calling/custom-function-calls). Passing custom headers in your custom functions # Clone Your Voice Source: https://www.bolna.ai/docs/clone-voices Clone your voice with Bolna AI. Upload a short sample to create lifelike custom voices and personalize your AI agents with any licensed voice. ## What is Voice Cloning? Create custom AI voices by uploading a short audio sample (1-2 minutes) of any voice you have rights to use. Perfect for brand consistency, personalized customer experiences, or using specific voice talent across all your agents. Use the same voice across all customer touchpoints Create unique voices for different agent personas *** ## How to Clone a Voice Go to your agent in the Bolna Playground and click the **Audio** tab. Scroll down to the **Text-to-Speech** section and click **Add Voice +**. Audio Tab showing the Text-to-Speech section with Add Voice button Choose your voice cloning provider: **ElevenLabs** or **Cartesia** Voice cloning provider selection screen Enter a **name** and **description** to identify your voice when building agents Voice naming interface Upload a high-quality audio file (MP3, WAV) that is **1-2 minutes** long Audio sample upload interface Click **"Clone Voice"** and wait for processing. Your new voice will appear in Voice Lab! For best results, use clean audio with **no background noise** and only the voice you want to clone. *** ## Next Steps Import custom voices from your voice provider Configure voice settings in the Playground Set up multilingual agents with custom voices Access your cloned voices # Submit Phone Number Compliance Application Source: https://www.bolna.ai/docs/compliance-application/how-to-submit-guide Bolna phone number compliance guide: step-by-step submission process, 12–24h review, and troubleshooting for fast approval. Before submitting, make sure you understand the [compliance requirements](/docs/compliance-application/introduction) including required documents (CIN certificate, GST registration) and data privacy policies. ## How to Submit Your Compliance Application Visit the [Compliance Application page](https://platform.bolna.ai/account?tab=compliance) on your Bolna dashboard and click the **"Create a new Application"** button to initiate the process. Enter your complete information: * **First Name**: Your legal first name * **Last Name**: Your legal last name * **Company Name**: Your registered business name Click the **"Drag and drop your file here, or click to browse"** area under the CIN Certificate section. Select your CIN certificate PDF file (must be under 10 MB). The file will be uploaded automatically. Provide your complete GST number in the format provided by your tax authority (e.g., `ABCDEFGHIJKL1234`). Click the upload area under the GST File section and select your GST registration certificate or proof of registration (PDF format, maximum 10 MB). Double-check all information and uploaded documents for accuracy. Once you're satisfied, click **"Create Application"** to submit your compliance application for review. ## Application Review Process After submitting your compliance application: 1. **Initial Review**: Our compliance team will review your application within 12-24 business hours 2. **Verification**: We verify the authenticity of your documents with relevant authorities 3. **Approval Notification**: You'll receive an email notification once your application is approved 4. **Start Purchasing**: After approval, you can immediately start [purchasing phone numbers](/docs/buying-phone-numbers) If additional information is required, our team will contact you via email. Please monitor your inbox and respond promptly to avoid delays. ## Common Issues and Solutions Ensure your file meets these requirements: * File format is PDF * File size is under 10 MB * File is not corrupted or password-protected If issues persist, try converting your document to PDF using a different tool or compressing it to reduce file size. The CIN (Corporate Identification Number) certificate is required for registered companies. If you're: * **A registered company**: Contact your country's corporate registry to obtain a copy If your GST registration is still being processed, please wait until you receive your official GST certificate before submitting the compliance application. You can still explore Bolna's features using our demo numbers. Most applications are reviewed within 12-24 business hours. Complex cases requiring additional verification may take up to 2 business days. You'll receive email updates throughout the process. Once submitted, you cannot directly edit your application. If you need to make changes or correct errors, contact our support team at [support@bolna.ai](mailto:support@bolna.ai) with your application details. If your application is rejected, you'll receive an email explaining the reason. Common reasons include: * Unclear or illegible documents * Mismatched information * Invalid or expired certificates You can resubmit your application with corrected documents. ## Next Steps After your compliance application is approved: 1. **Purchase Phone Numbers**: Browse and [buy dedicated phone numbers](/docs/buying-phone-numbers) for your Voice AI agents 2. **Make Outbound Calls**: Start [making outbound calls](/docs/making-outgoing-calls) using your purchased numbers 3. **Receive Inbound Calls**: Set up your agents to [handle incoming calls](/docs/receiving-incoming-calls) 4. **Scale Your Operations**: Explore [batch calling](/docs/batch-calling) for high-volume campaigns *** ## Related Resources Learn about compliance requirements, required documents, and data security Buy dedicated phone numbers after compliance approval Use your purchased numbers for outbound calling Frequently asked questions about Bolna Voice AI # Phone Number Compliance Requirements for India - Bolna AI Source: https://www.bolna.ai/docs/compliance-application/introduction Understand India phone number compliance requirements for Bolna AI. Learn about the required documents like CIN certificate, GST, and data security standards. ## Overview Before purchasing phone numbers on Bolna, all users must submit a compliance application. This regulatory requirement ensures proper verification and compliance with telecommunications regulations in your region. The compliance application is a one-time requirement. Once approved, you can purchase multiple phone numbers without resubmitting your documents. ## Why Compliance is Required Telecommunications regulations require phone number providers to verify the identity and legitimacy of businesses using phone numbers for commercial purposes. This helps: * **Prevent fraud and abuse**: Ensures phone numbers are used by verified businesses * **Regulatory compliance**: Meets requirements set by telecommunications authorities * **Protect customers**: Maintains trust and security in voice communications * **Support legitimate businesses**: Enables compliant companies to operate confidently ## Required Documents To complete your compliance application, you'll need to prepare the following documents: ### 1. Personal Information * **Full Name**: Your complete first and last name as it appears on official documents * **Company Name**: Your registered business or organization name ### 2. CIN Certificate (Corporate Identification Number) * **File Format**: PDF only * **File Size**: Maximum 10 MB * **Requirements**: * Official CIN certificate issued by your country's corporate registry * Must be clear and legible * Should contain your company's registration details The CIN certificate is issued by the Ministry of Corporate Affairs (or equivalent regulatory body) when you register your company. If you don't have a digital copy, you can scan or photograph the original document and convert it to PDF. ### 3. GST Registration * **GST Number**: Your Goods and Services Tax registration number * **GST File**: * File Format: PDF only * File Size: Maximum 10 MB * Requirements: GST registration certificate or proof of registration Ensure your GST number matches exactly with your GST certificate. Any mismatch may delay the approval process. ## Data Privacy and Security Your compliance documents are handled with the highest standards of security: * **Encrypted Storage**: All uploaded documents are encrypted at rest and in transit * **Limited Access**: Only authorized compliance team members can access your documents * **Regulatory Compliance**: We comply with data protection regulations including GDPR * **Secure Deletion**: Documents are securely deleted after the regulatory retention period We never share your compliance documents with third parties except as required by law or regulatory authorities. ## Ready to Submit Your Application? Now that you understand the compliance requirements, follow our detailed step-by-step guide to submit your application: Complete walkthrough of the submission process, review timeline, and troubleshooting common issues ## Need Help? If you have questions about the compliance requirements or need assistance: * **Email Support**: [support@bolna.ai](mailto:support@bolna.ai) * **Documentation**: Visit our [FAQ page](/docs/frequently-asked-questions) * **Schedule a Call**: [Book a consultation](https://www.bolna.ai/meet) with our team *** ## Related Resources Step-by-step guide to buying phone numbers after compliance approval Learn how to use your purchased numbers for outbound calling Set up inbound call handling with your Voice AI agents Frequently asked questions about Bolna Voice AI # Import agents Source: https://www.bolna.ai/docs/copy-import-agent Import Bolna Voice AI agent templates for instant deployment. Clone & customize pre-built conversational workflows for support, lead gen, booking & more. Using the Import Agent option to import an agent Pasting the Copied Agent ID to import the agent # Auto-Detect and Switch Languages in Bolna Voice AI Source: https://www.bolna.ai/docs/customizations/auto-switch-multilingual-messages Learn how Bolna Voice AI automatically detects the caller's language and switches system messages like hangup, user online check, and tool call messages to match. Bolna Voice AI automatically detects the language your callers speak and switches system messages to match. No manual intervention needed. The agent analyzes the conversation and delivers the right message in the right language. "Are you still there?" plays in the caller's detected language Farewell message delivered in the detected language "Please wait" messages during API calls adapt to the language *** ## How Detection Works The agent starts in the primary language configured in the [Audio Tab](/docs/agent-setup/audio-tab). After **3 conversation turns**, Bolna analyzes the caller's transcripts to identify the dominant language being spoken. Once detected, all configured system messages switch to that language for the rest of the call. Detection waits for 3 turns to gather enough context for accurate identification. This keeps it fast while avoiding false matches early in the call. *** ## Supported Message Types ### User Online Check Message When the agent checks if a caller is still on the line after a period of silence, it sends a configurable message. Add variants in multiple languages and Bolna picks the right one automatically. User online detection settings with multilingual message fields for English, Hindi, Gujarati, Bengali, and Tamil ```json theme={"system"} { "check_user_online_message": { "en": "Hey, are you still there?", "hi": "क्या आप अभी भी वहाँ हैं?", "ta": "வணக்கம், நீங்கள் இன்னும் இணைப்பில் இருக்கிறீர்களா?", "bn": "নমস্কার, আপনি কি এখনও লাইনে আছেন?" } } ``` *** ### Call Hangup Message When the agent ends a call, it delivers a closing message. Configure multilingual variants so callers hear a natural farewell in their language. Call settings showing multilingual hangup message fields for English, Hindi, Bengali, and Tamil ```json theme={"system"} { "call_hangup_message": { "en": "Thank you for calling. Goodbye!", "hi": "कॉल करने के लिए धन्यवाद। अलविदा!", "bn": "কলটি এখন কেটে যাবে। ধন্যবাদ এবং নমস্কার!" } } ``` *** ### Function Tool Call Messages When the agent executes a tool or API call, it plays a brief "please wait" message. This message can also be configured per language. Custom function configuration showing pre_call_message JSON with English and Hindi variants ```json theme={"system"} { "pre_call_message": { "en": "Just give me a moment, I'll be back with you.", "hi": "कृपया थोड़ा समय दीजिए, मैं पता करके बताता हूँ।" } } ``` *** ## Fallback Behavior When selecting a message, Bolna follows a three-step fallback: | Priority | What happens | | ------------------------ | ------------------------------------------------------------------------- | | **1. Detected language** | Uses the message in the caller's detected language | | **2. English** | Falls back to the `en` variant if the detected language is not configured | | **3. First available** | Uses the first language in the configuration if neither is found | Always configure an `en` (English) variant as a safe fallback for every message type. *** ## Supported Languages Auto-detection supports all languages available in Bolna, identified by their ISO 639-1 codes. | Code | Language | Code | Language | Code | Language | | ---- | -------- | ---- | -------- | ---- | --------- | | `en` | English | `hi` | Hindi | `bn` | Bengali | | `ta` | Tamil | `te` | Telugu | `mr` | Marathi | | `gu` | Gujarati | `kn` | Kannada | `ml` | Malayalam | | `pa` | Punjabi | `ur` | Urdu | `as` | Assamese | For the full list of supported languages, see the [Multilingual Support](/docs/customizations/multilingual-languages-support) guide. *** ## Best Practices Add message variants for every language your agent supports. Gaps lead to unexpected fallbacks. Write messages that feel natural in each language. Avoid direct translations. Always use the language's native script. "धन्यवाद" not "Dhanyavaad". Verify messages sound natural by testing with native speakers of each language. *** ## Next Steps Full guide to setting up multilingual agents Best practices for writing prompts in native scripts Configure pre-call messages for API tools Configure user online detection and timeouts # Capturing precise transcripts in Bolna Voice AI Source: https://www.bolna.ai/docs/customizations/capturing-precise-transcripts Bolna Voice AI enables to capture actual transcripts when the conversations involve interruptions to improve call accuracy and experience. ## Overview Bolna AI incorporates an **advanced interruption handling** mechanism that ensures accurate and contextually relevant transcripts during voice agent interactions. This feature is currently in beta. Please use it with caution. Precise transcript generation toggle in Bolna Voice AI showing interruption handling configuration When a user interrupts the AI agent mid-conversation, rather than logging the full transcript generated by Large Language Models (LLMs), Bolna intelligently computes the actual transcript by filtering out incomplete or overridden responses. This enhances clarity, ensuring that only the final, meaningful exchange is stored, processed and used for the conversations. ## How It Works Bolna AI’s interruption handling system functions through a three-step process: * **Detection of Interruptions**: The system continuously monitors speech input to detect when the user starts speaking while the Voice agent is still speaking. * **Contextual Computation**: Whenever an interruption is detected, Bolna AI determines whether the user’s input should overrides the Voice agent's response. * **Final Transcript Adjustment**: Bolna then reconstructs the conversation transcript to exclude everything after the interruption, ensuring that only the final & meaningful parts of the dialogue are retained, processed and used for further processing. ## Example | Without precise transcript generation | Using precise transcript generation | | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | | **Assistant:** "Hello, Thank you for calling Wayne Enterprises. How can we help you today?" | **Assistant:** "Hello, Thank you for calling Wayne Enterprises. How can we help you today?" | | **User:** "hello" | **User:** "hello" | | **Assistant:** "Hello! How can I assist you today?" | **Assistant:** "Hello! How can I ~~assist you today?~~" | | **User:** "yeah where are you calling from" | **User:** "yeah where are you calling from" | | **Assistant:** "I'm here to support you regarding your recent order from Wayne Enterprises. How can I assist you?" | **Assistant:** "I'm here to support you regarding your recent order ~~from Wayne Enterprises. How can I assist you?~~" | | **User:** "yeah i'm facing an issue with the item i purchased" | **User:** "yeah i'm facing an issue with the item i purchased" | | ... | ... | In the above example, the strikethrough text is only for representation purposes. In practice, you'll see only the transcripts till the interruptions if the `precise transcript generation` is `enabled`. ## Conclusion Bolna AI’s interruption handling feature ensures that conversation transcripts reflect actual user intent rather than an unfiltered log of AI responses. By dynamically computing the actual transcript, this feature enhances the efficiency of voice AI applications, making conversations more human-like and structured. # Dynamically identify incoming callers Source: https://www.bolna.ai/docs/customizations/identify-incoming-callers Use Bolna Voice AI agents to identify callers in real time via API, CSV, or Google Sheets and personalize calls with automatic user data injection. ## What is Caller Identification? Link your inbound phone numbers to custom data sources. When a call comes in, your Bolna Voice AI agent automatically identifies the caller, matches their number, and pulls in relevant details like name, address, preferences, past history, or any data you provide. Incoming caller identification interface in Bolna Voice AI showing dynamic data source integration for personalized call handling This data is seamlessly injected into the agent's prompt, making every interaction personalized and contextual. *** ## Data Source Options **Best for:** Teams with existing databases or CRM systems. Provide an API endpoint that accepts the caller's phone number. Bolna automatically sends the following parameters: | Parameter | Description | | ---------------- | ------------------------------- | | `contact_number` | Incoming caller's phone number | | `agent_id` | Agent handling the call | | `execution_id` | Unique identifier for this call | API integration setup for real-time caller identification showing endpoint configuration **Example request:** ``` GET https://api.your-domain.com/api/customers?contact_number=+19876543210&agent_id=06f64cb2-...&execution_id=c4be1d0b-... ``` The returned JSON data is automatically merged into the AI prompt before the call begins. * The endpoint must be a **GET** endpoint * Supported authentication: **Bearer Token** **Best for:** Smaller teams who prefer simple, no-code data management. Upload a CSV file with `contact_number` column (phone numbers with country code) and associated user info. Bolna automatically looks up the incoming number and injects matching row data into the prompt. CSV file upload interface for caller identification in Bolna Voice AI ```csv theme={"system"} contact_number,first_name,last_name +11231237890,Bruce,Wayne +91012345678,Bruce,Lee +00021000000,Satoshi,Nakamoto +44999999007,James,Bond ``` **Best for:** Real-time sync with spreadsheet simplicity. Link a **publicly accessible** Google Sheet with user data. Bolna auto-syncs and looks up the incoming number to pull the latest data. No re-uploads needed. Google Sheets integration for real-time caller data synchronization in Bolna Voice AI | contact\_number | first\_name | last\_name | | --------------- | ----------- | ---------- | | +11231237890 | Bruce | Wayne | | +91012345678 | Bruce | Lee | | +00021000000 | Satoshi | Nakamoto | | +44999999007 | James | Bond | Your Google Sheet can be updated at any time. Bolna agents automatically pick up the latest data in real time. *** ## Related Features Configure inbound calling for your agents Pass dynamic data to personalize conversations Route inbound calls with IVR menus # Set Up Multilingual Voice AI Agents Source: https://www.bolna.ai/docs/customizations/multilingual-languages-support Deploy Bolna Voice AI agents in multiple languages. Configure per-language prompts, language switching, handoff messages, and multilingual knowledge bases. Bolna supports multiple languages, letting you deploy voice agents globally. Language support is integrated across all components: transcription, LLM processing, and voice synthesis. Bolna Audio Tab language configuration showing English marked as Primary, Dutch and Hindi as secondary languages, and an Add Language button *** ## How Multilingual Agents Work A multilingual agent can understand and respond in multiple languages within a single call. Here is how the pieces fit together: Add languages in the [Audio Tab](/docs/agent-setup/audio-tab) or [Agent Tab](/docs/agent-setup/agent-tab). They stay synced across both. Each language gets its own prompt tab. Write a dedicated prompt for every language your agent supports. A shared instruction field tells the agent when to switch languages mid-call. *** ## Setting Up Languages In the [Audio Tab](/docs/agent-setup/audio-tab) or [Agent Tab](/docs/agent-setup/agent-tab), click **+ Add Language**. Languages sync between both tabs automatically. Click the **crown icon** next to any language to make it primary. The primary language is what the agent starts every conversation in. In the [Agent Tab](/docs/agent-setup/agent-tab), select each language tab and write its prompt. The agent activates the matching prompt when speaking in that language. In the [Advanced Settings](/docs/agent-setup/agent-tab#per-language-advanced-settings) for each language, set a **Handoff Message** that plays when the agent transitions away from that language. Tooltip showing Make Hindi primary when clicking the crown icon next to Hindi *** ## Language Switching The **Language Switching Instructions** field in the [Agent Tab](/docs/agent-setup/agent-tab) is a single shared field that applies to all languages. It tells the agent when and how to switch languages during a call. | What to include | Example | | ---------------------- | ----------------------------------------------------- | | **Trigger conditions** | "Switch to Hindi if the user speaks in Hindi" | | **Fallback behavior** | "Fall back to English if the language is unsupported" | | **Default rule** | "Respond in the language the user is currently using" | Write these once. They apply across all languages automatically. ### Auto-Switching System Messages Beyond prompt-level switching, Bolna can also **auto-detect** the caller's language and switch system messages to match. This works for: "Are you still there?" adapts to the caller's language Farewell message plays in the detected language "Please wait" messages during API calls match the language Detection activates after 3 conversation turns to ensure accuracy. See the full [Auto-Switch Languages](/docs/customizations/auto-switch-multilingual-messages) guide for setup details. *** ## Per-Language Configuration Each language you add gets its own independent configuration: Agent Prompt with English marked as Primary, Hindi and Dutch language tabs, prompt editor showing Personality and Identity sections | What | Where | Scope | | ----------------------------------- | ---------------------------- | ----------------- | | **Prompt** | Agent Tab, language tabs | Per language | | **Agent Name** | Agent Tab, Advanced Settings | Per language | | **Handoff Message** | Agent Tab, Advanced Settings | Per language | | **Language Switching Instructions** | Agent Tab | Shared across all | | **Text-to-Speech** | Audio Tab | Per language | | **Speech-to-Text** | Audio Tab | Per language | Each language can use a different STT and TTS provider. For example, use **Deepgram** for English transcription and **Sarvam** for Hindi, or **ElevenLabs** for English voice and **Sarvam** for Hindi voice. Select a language tab in the [Audio Tab](/docs/agent-setup/audio-tab) to configure its providers independently. Settings are independent per language. The Agent Name, Handoff Message, STT provider, and TTS provider for Hindi do not affect English. *** ## Supported Languages | Language | Code | | ---------- | ---- | | English | `en` | | Hindi | `hi` | | Bengali | `bn` | | Assamese | `as` | | French | `fr` | | Gujarati | `gu` | | Indonesian | `id` | | Kannada | `kn` | | Malay | `ms` | | Malayalam | `ml` | | Marathi | `mr` | | Odia | `od` | | Punjabi | `pa` | | Spanish | `es` | | Tamil | `ta` | | Telugu | `te` | | Urdu | `ur` | | Dutch | `nl` | *** ## Writing Effective Multilingual Prompts Write prompts in the language's native script, not phonetic English. "नमस्ते" not "Namaste". Use proper accents for European languages. "Cómo estás?" not "Como estas?" **Hindi** * Incorrect: "Namaste! Aap kaise ho?" * Correct: "नमस्ते! आप कैसे हैं?" **Spanish** * Incorrect: "Hola! Como estas?" * Correct: "¡Hola! ¿Cómo estás?" **French** * Incorrect: "Bonjour! Comment ca va?" * Correct: "Bonjour ! Comment ça va ?" Read the full [guide for writing prompts in non-English languages](/docs/guides/writing-prompts-in-non-english-languages) for detailed best practices. *** ## Multilingual Knowledge Bases If your agent uses knowledge bases with non-English documents, enable **multilingual** support when creating the knowledge base. This supports 100+ languages, allowing your agent to retrieve information regardless of document or query language. Learn more in the [Knowledge Base documentation](/docs/getting-started/knowledge-base#multilingual-knowledge-bases). *** ## Next Steps Configure per-language prompts and handoff messages Set up languages, voices, and transcription Auto-detect and switch system messages by language Best practices for writing multilingual prompts # Using Custom LLMs with Bolna Voice AI Source: https://www.bolna.ai/docs/customizations/using-custom-llm Integrate custom large language models (LLMs) into Bolna Voice AI to enhance agent capabilities and tailor responses to your unique requirements We expect your custom LLM to be an OpenAI compatible server. * [https://platform.openai.com/docs/api-reference/chat/create](https://platform.openai.com/docs/api-reference/chat/create) * [https://platform.openai.com/docs/api-reference/chat/streaming](https://platform.openai.com/docs/api-reference/chat/streaming) ## Adding your Custom LLM using dashboard 1. Click on LLM select dropdown as shown in the image LLM selection dropdown in Bolna Voice AI agent configuration showing available model options for customization 2. From the dropdown click on `Add your own LLM`. Add your own LLM option in Bolna dropdown menu for integrating custom large language models with Voice AI agents 3. A dialog box will be displayed. Fill in the following details: * `LLM URL`: the endpoint of your custom LLM * `LLM Name`: a name for your custom LLM click on `Add Custom LLM` to connect this LLM to Bolna Custom LLM configuration dialog in Bolna showing URL and name input fields for integrating your custom large language models 4. **Refresh the page** 5. In the LLM settings tab, choose `Custom` in the first dropdown to select LLM Providers Custom LLM provider selection in Bolna Voice AI settings showing integrated custom language model options 6. In the LLM settings tab, you'l now see your custom LLM model name appearing. Select this and save the agent. Custom LLM model selection interface in Bolna showing available custom LLM models for Voice AI agent configuration **Using the above steps will make sure the agent uses your Custom LLM URL**. ## Demo video Here's a working video highlighting the flow: Complete custom LLM workflow in Bolna Voice AI showing step-by-step process for adding your own custom language models # Terminate Bolna Voice AI calls Source: https://www.bolna.ai/docs/disconnect-calls Optimize call lengths with Bolna Voice AI by setting duration limits. Automatically terminate calls exceeding limits for better resource management. ## What are Call Duration Limits? Bolna Voice AI lets you set a maximum call duration (in seconds) for automatic termination. Once the limit is reached, the call ends automatically, providing a safety net against unexpectedly long calls. Call duration limit settings in Bolna Voice AI showing maximum duration configuration for automatic termination *** ## Why Set Duration Limits? Prevent unexpectedly long calls from consuming credits Ensure fair allocation of concurrent call capacity Protect against edge cases where calls do not end naturally Better forecast and manage calling expenses Learn more about [call pricing](/docs/pricing/call-pricing) and [outbound calling concurrency](/docs/outbound-calling-concurrency). *** ## Compatibility | Call Type | Support | | -------------- | ----------------- | | Outbound calls | ✓ Fully supported | | Inbound calls | ✓ Fully supported | *** ## Duration Limits vs. Hangup Prompts | Feature | Duration Limits | Hangup Prompts | | ----------------- | --------------------------------- | ----------------------------------- | | **Trigger** | Hard time-based cutoff | Context-aware conversation analysis | | **Accuracy** | 100%, always triggers at set time | Prompt-dependent, may need tuning | | **Use case** | Safety net for runaway calls | Natural, intelligent call endings | | **Configuration** | Set duration in seconds | Write a custom evaluation prompt | **Use both together** for optimal call management: hangup prompts for natural conversation endings, and duration limits as a safety net to prevent runaway calls. *** ## Related Features Configure silence detection and hangup prompts Monitor the full lifecycle of your calls Understand call termination reasons # DTMF (Keypad Input) Source: https://www.bolna.ai/docs/dtmf Let callers enter digits on their phone keypad and have your voice agent respond to the input. ## What is DTMF? DTMF (Dual-Tone Multi-Frequency) is the system behind phone keypad input: the tones produced when a caller presses a digit key (0-9, `*`, `#`). When enabled, digit presses from the caller are captured and sent to the agent as a text message, which the LLM can read and respond to just like spoken input. ## When to use it DTMF is useful any time you want callers to enter structured numeric input without speaking it: * **PIN or OTP verification** -- "Please enter your 6-digit OTP followed by #" * **Account or order number lookup** -- "Enter your account number and press #" * **Phone number capture** -- collecting a callback number during a call * **Confirmation flows** -- "Press 1 to confirm, 2 to cancel" * **Sensitive input** -- when callers are uncomfortable speaking a number aloud (e.g. a password or card number) DTMF works alongside speech. A caller can still speak normally between keypad entries. For branching menu flows ("press 1 for sales, press 2 for support"), use [IVR Inbound Calls](/docs/ivr-inbound-calls) instead. It handles menu routing natively without an LLM. ## Telephony support | Provider | Support | | ---------------- | ----------------------- | | Plivo | Supported | | Twilio | Supported | | SIP Trunk (BYOT) | Currently not supported | | Exotel | Currently not supported | | Vobiz | Currently not supported | ## Enabling DTMF ### From the dashboard Toggle on **Keypad Input (DTMF)** in the **Call Tab** of your agent. Call tab showing the Keypad Input DTMF toggle ### Via the API Set `dtmf_enabled: true` inside `task_config` when creating or updating an agent: ```json theme={"system"} { "task_config": { "dtmf_enabled": true } } ``` ## How it works 1. The agent asks the caller to enter digits and press `#`. 2. The caller presses keys on their keypad. 3. Bolna accumulates the digits until `#` is pressed. 4. The digits are delivered to the agent as: `dtmf_number: ` 5. The agent responds to the input. `#` is the termination key. The agent only receives the input after the caller presses it. The `#` itself is not included in the value. ## Writing the prompt Tell callers to press `#` after their entry, and tell the agent what to do when it sees a `dtmf_number:` message. **Example prompt snippet:** ``` When you need the caller's phone number, say: "Please enter your phone number on your keypad and press the hash key when you are done." When you receive a message starting with "dtmf_number:", the digits that follow are what the caller entered. Read them back to confirm and proceed accordingly. ``` **What the agent receives:** ``` dtmf_number: 9876543210 ``` The agent treats this like any other message in the conversation. It can confirm the value, use it in a tool call, or move to the next step based on it. ## Next Steps Menu-based call routing with keypad navigation All call configuration options # Bolna AI Data residency Source: https://www.bolna.ai/docs/enterprise/data-residency Bolna AI India data residency for enterprises: store & process voice AI data in India with compliance, privacy & ultra-low latency. ## Overview Bolna AI now supports data residency in India (IN) for customers who require their data to be stored and processed within Indian jurisdiction. By default, all Bolna AI services operate in United States (US)‑hosted infrastructure, but customers on enterprise plans can choose to have their data processed exclusively in India. This feature helps organizations meet local compliance, privacy, and sovereignty requirements while continuing to benefit from Bolna’s real‑time AI capabilities. Data residency is an Enterprise feature. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information. ## What’s Included When you select India (IN) as your data residency location: * **Storage**: All customer audio, transcripts, logs, and configurations are stored on secure infrastructure physically located in India. * **Processing**: All inference, transcription, and response generation happens within Indian borders. ## When to Use India Data Residency India‑based data residency is recommended if you: * Are subject to Indian data localization laws or work in regulated industries like banking, government, healthcare, or telecom. * Want to ensure all processing and storage remain inside Indian borders for privacy or competitive reasons. * Need to meet contractual obligations with Indian clients regarding data handling. # Bolna AI On-Prem for Enterprise Source: https://www.bolna.ai/docs/enterprise/on-premise-deployments Discover Bolna Enterprise solutions for large-scale businesses, offering scalable Voice AI agents, advanced integrations, and custom seamless solutions. **Bolna AI On-Prem** empowers your organization to deploy our best-in-class voice AI infrastructure. It is fully containerized and runs entirely within your cloud or data center. Designed for high-security, high-performance workloads, it's ideal for industries with stringent data requirements. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information about Bolna On-Premise deployments. ## Deployment Anywhere, Full Control * Deploy **dockerized containers** or use **Kubernetes** across any cloud or on-prem environment. * Supports deployment on **your own servers** fully leveraging your existing infrastructure. * Choose your preferred region and provider (AWS, GCP, Azure, bare metal, private cloud). ## Data Privacy & Compliance * **Complete data sovereignty**: All audio, requests, logs and transcripts remain within your environment. Nothing is sent to Bolna's servers. This ensurs compliance with healthcare, financial, and legal regulations. * Regular performance and usage metrics are securely sent to Bolna cloud solely for billing and system optimizations. * Full audit logs for monitoring all outbound activity, giving your security team complete visibility. ## Performance, Scalability & Reliability * Achieve **ultra-low latency** by co-locating inference with your existing application stack. * Scale horizontally and separate API and websocket containers, and auto-scale based on demand. ## Enterprise-Grade Operations * Fully compatible with Bolna APIs, without any changes to your integration. You can simply point to your self-hosted endpoint. # Bolna AI On-Prem guide for Enterprises Source: https://www.bolna.ai/docs/enterprise/on-premise-instructions Learn how to self-host Bolna Voice AI on your own servers using Docker or Kubernetes for secure, private, and scalable enterprise deployments. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for the Docker images and pricing info. ## 1. Introduction ### Why on-premise? Deploying Voice AI infrastructure on your own server (on-premises or self-managed cloud infrastructure) instead of relying entirely on third-party SaaS solutions has several strategic, technical, and operational advantages, especially for companies focused on privacy, control, and performance. ### Security With an on-premises deployment, all data remains within your corporate network, ensuring enhanced security as it is not transmitted over the Internet. This setup helps in complying with strict data privacy and protection regulations. ### Components Bolna Architecture Diagram ### Prerequisites **Docker**: Install Docker on your system to manage the containerized application. ```bash theme={"system"} # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update # Install the latest version of Docker sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Verify Docker is running sudo docker run hello-world # Install Docker Compose plugin sudo apt install -y docker-compose-plugin # Verify Docker Compose version docker compose version ``` **Hardware Specifications**: Storage and compute requirements * **Instance type**: c6a.xlarge * **Object storage**: AWS S3 * **Relational Database**: PostgreSQL 16.3, RAM: 8GB+ * **Caching layer**: Redis 7.10, 4GB RAM (Instance type: cache.t4g.medium) * **Message Queueing Channel**: RabbitMQ 13.13.7, RAM: 8GB (Instance type: mq.m5.large) ## 2. Deployment Environments This documentation will cover specific instructions and considerations for deploying the services within an AWS environment, ensuring optimal configuration and performance. ## 3. Self-Service Licensing & Credentials Self-hosting key can be either generated from our dashboard or contact [enterprise@bolna.ai](mailto:enterprise@bolna.ai) ## 4. Deploy All Services ### Login to Bolna's ghcr ```bash theme={"system"} echo | docker login ghcr.io -u --password-stdin ``` ### Pull images ```bash theme={"system"} docker pull ghcr.io/bolna-ai/api_server:v1 docker pull ghcr.io/bolna-ai/ws_server:v1 docker pull ghcr.io/bolna-ai/telephone_server:v1 docker pull ghcr.io/bolna-ai/q_manager:v1 docker pull ghcr.io/bolna-ai/q_worker:v1 docker pull ghcr.io/bolna-ai/arq_worker:v1 ``` ### Docker Compose File: Create a docker-compose.yml File ```bash theme={"system"} version: '3.8' services: api_server: image: ghcr.io/bolna-ai/api_server:v1 container_name: api_server ports: - "5001:5001" env_file: - .env restart: always telephone_server: image: ghcr.io/bolna-ai/telephone_server:v1 container_name: telephone_server ports: - "8001:8001" env_file: - .env restart: always q_worker: image: ghcr.io/bolna-ai/q_worker:v1 container_name: q_worker ports: - "5002:5002" env_file: - .env restart: always q_manager: image: ghcr.io/bolna-ai/q_manager:v1 container_name: q_manager ports: - "5003:5003" env_file: - .env restart: always ws_server: image: ghcr.io/bolna-ai/ws_server:v1 container_name: ws_server ports: - "5005:5005" env_file: - .env restart: always arq_worker: image: ghcr.io/bolna-ai/arq_worker:v1 container_name: arq_worker env_file: - .env restart: always command: ["arq", "arq_worker.WorkerSettings"] ``` ### Start docker compose: ```bash theme={"system"} docker compose up -d ``` # Managing Your Organization & Team Source: https://www.bolna.ai/docs/enterprise/organization Learn how to manage your Bolna organization, invite team members, and configure roles and permissions for secure and efficient voice AI operations. ## Overview Your Bolna Organization is the central hub for all your voice AI resources. It acts as a top-level container for your team members, voice agents, billing information, API keys, and overall settings. Proper organization management is key to scaling your operations securely and efficiently. Within an organization, you can manage access for different team members, monitor usage across all your agents, and configure security policies that apply to your entire team. This is an Enterprise feature. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information. ## Managing Team Members You can invite new members to your organization and assign and edit roles based on their responsibilities. This ensures that team members only have access to the resources they need to perform their jobs. Bolna Organization Members page showing a list of team members with their email addresses, assigned roles, and management options * **Invite Members**: Organization Admins can invite new users via email from the 'Members' tab in the organization settings. * **Assign Roles**: Each member is assigned a role that dictates their level of access and permissions within the organization. * **Edit Roles**: Organization Admins can edit the access level of existing users by selecting the organization role they want to assign to their members. ## Roles and Permissions Bolna uses a simple two-role system to manage access control within your organization. * **Admin**: Has full, unrestricted access to the organization. Admins can manage billing, invite or edit member roles, create and delete agents, and manage all API keys. They have complete control over all settings. * **Member**: Has limited access designed for operational tasks. Members can place calls on existing agents. They can create and manage their own API keys but cannot access API keys belonging to the admin or other members. Members are restricted from performing most delete operations (like deleting agents). ## Editing Existing User Roles Organization Members page highlighting the pencil edit icon next to a team member's role for updating their access level * In order to update existing user roles, click on the Edit Icon for the user you want to edit the organization role of. Edit member role dialog box showing a dropdown to select between Admin and Member roles for updating a team member's organization access * This opens up a dialog box where you can update the role that you want to edit. ## Usage & Billing The **Billing** tab provides a complete overview of your subscription, plan details, and usage metrics like total call minutes and number of active agents. You can view invoicing history and manage your payment methods here. The organization's balance is shared across all users. All usage from both Admin and Member accounts is deducted from this single, centralized balance. ## API Keys Both Admins and Members can generate API keys for programmatic access. However, access is scoped based on role: * **Admin Keys**: Have full permissions and can perform any action via the API. * **Member Keys**: Are restricted to the same permissions as the Member role. They can be used to call agents but cannot perform most of the delete or edit actions. Members can delete and create their own API Keys while not having access to the admins or other member's keys. # Bolna AI Enterprise Plan Source: https://www.bolna.ai/docs/enterprise/plan Discover Bolna Enterprise solutions for large-scale businesses, offering scalable Voice AI agents, advanced integrations, and custom seamless solutions. As you build your application on Bolna to solve your use-case, we partner with you throughout the journey - from early concept to enterprise-grade deployment. ## What is included in the Enterprise Plan? Bolna's Enterprise Plan is built for organizations with high-volume, mission-critical voice needs. It includes: ### Elevated concurrency limits Scale beyond the default 10 concurrent calls to handle hundreds or thousands of simultaneous conversations based on your needs. Learn more about [outbound calling concurrency](/docs/outbound-calling-concurrency). ### Priority in processing your calls and requests Enterprise customers skip queues during peak usage, ensuring consistent performance even during high-demand periods. ### Premium Slack support and regular check-ins Access guaranteed support and a dedicated engineer who understands your use case and can provide proactive assistance. ### Customized volume-based discounts Competitive pricing that improves as your call volume grows, making enterprise-scale deployments cost-effective. See our [call pricing](/docs/pricing/call-pricing) for standard rates. ## Who should consider the Enterprise Plan? The Enterprise Plan is ideal for: * Companies making 10,000+ calls per month * Organizations requiring guaranteed uptime and SLAs * Businesses needing dedicated technical support * Teams building mission-critical voice AI applications * Companies requiring custom integrations or features * Organizations with specific data residency requirements ([learn more](/docs/enterprise/data-residency)) ## How to get started with Enterprise Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call at [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information and a customized quote based on your requirements. # Sub-Accounts for Enterprise Organizations Source: https://www.bolna.ai/docs/enterprise/sub-accounts Bolna AI enterprise sub-accounts let you manage multiple customers & teams with full data isolation, unified billing & centralized control. ## Overview Bolna's Sub-Account feature is designed for enterprise organizations that need to manage multiple customers, business units, or operational environments under a single main account. This powerful organizational tool provides complete data isolation, centralized management, and scalable operations for complex voice AI deployments. Sub-accounts enable you to create logical boundaries within your account, ensuring that different customers, departments, or projects operate independently while maintaining unified oversight and control. Sub-accounts is an Enterprise feature. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information. ## Key Sub-account Advantages ### Complete Data Isolation * **Customer separation**: Maintain strict boundaries between different customer data and configurations * **Audit trails**: Comprehensive logging and monitoring for each sub-account independently ### Centralized Management & Control * **Unified dashboard**: Manage all sub-accounts from a single enterprise control panel * **Consolidated billing**: Streamlined invoicing and cost allocation across all sub-accounts * **Resource allocation**: Distribute and monitor usage quotas across sub-accounts ## Primary Use Cases ### Service Providers & Agencies Transform your voice AI service delivery with enterprise-grade multi-tenancy: * **Customer isolation**: Each client gets their own environment with dedicated resources * **Flexible billing**: Accurate cost tracking and billing for each client account ### Large Enterprise Organizations Organize your voice AI infrastructure across complex organizational structures: * **Department separation**: Sales, support, marketing, and operations teams get isolated environments * **Regional management**: Separate voice AI deployments by geographic regions or markets * **Product line organization**: Different products or services get dedicated sub-accounts * **Subsidiary management**: Manage voice AI for multiple company subsidiaries independently ### Development & Testing Teams Maintain clean separation between different environments and projects: * **Environment isolation**: Separate development, staging, and production deployments * **Team collaboration**: Multiple teams work on isolated projects without interference * **Feature testing**: Test new voice AI capabilities without affecting production systems * **A/B testing**: Run parallel experiments with completely isolated data sets ### Compliance-Heavy Industries Meet strict regulatory and compliance requirements: * **Healthcare**: Separate patient data and HIPAA-compliant voice AI deployments * **Financial services**: Isolated environments for different financial products or regions * **Government**: Secure, compliant voice AI for different agencies or departments * **Legal**: Client-specific environments with strict confidentiality requirements ## Managing Sub Accounts ### Creation Sub-accounts are managed by the [Organization](/docs/enterprise/organization), consisting of Admins or Member Users. ### API Keys & Access * Sub-accounts themselves cannot generate or manage API keys. * When a sub-account is created, an associated API key is automatically provisioned. ### Usage & Billing * Usage can be accessed for [each sub account's usage](/docs/api-reference/sub-accounts/usage) or by [all the sub accounts](/docs/api-reference/sub-accounts/all_usage) across the entire organization. * Navigate to [Sub-Account Usage](https://platform.bolna.ai/dashboard/subaccounts?tab=usage) to see detailed breakdowns. * Billing is consolidated at the **organization level**, but with granular visibility into sub-account consumption for accurate cost tracking. ### Roles & Permissions * Both **Admins and Members** in the organization can create and update sub-accounts. * Sub-accounts are **not users** — they act as logical containers for agents, call logs, and usage separation. * Access to sub-account data is scoped by API keys. ### Resource Isolation * Sub-accounts provide isolation at the **agents and call logs** level. * Shared resources such as **phone numbers and providers** remain available at the organization level, allowing reuse across multiple sub-accounts. * This ensures logical boundaries while still enabling efficient resource management. ### Lifecycle Management * Sub-accounts can be created and updated via the dashboard (beta) or API. * Updates can be performed by any organization user (Admin or Member). ### Audit & Monitoring * Sub-accounts maintain independent usage logs, analytics, and call histories. * These can be viewed centrally by **Admins** using the sub-account’s associated API key or the dashboard. * This provides enterprise-wide observability while preserving operational separation between environments. For detailed technical implementation, see our [Sub-Account API Reference](/docs/api-reference/sub-accounts/overview). Enterprise sub-accounts are designed for organizations with complex operational needs. Our enterprise team will work with you to design the optimal sub-account architecture for your specific requirements. # Exotel Integration with Bolna Voice AI Source: https://www.bolna.ai/docs/exotel Connect Exotel with Bolna Voice AI for inbound and outbound calling. Configure multilingual phone automation for India & global markets. Complete setup guide. ## Understanding Exotel Integration with Bolna Voice AI Exotel serves as a powerful telephony infrastructure provider that seamlessly integrates with Bolna's Voice AI platform. This integration enables businesses to deploy intelligent conversational AI agents that can handle both incoming and outgoing phone calls with natural language understanding and multilingual capabilities. When you connect Exotel to Bolna, you gain full control over your telephony operations while leveraging advanced AI-powered voice automation. The integration allows you to maintain your existing Exotel phone numbers and infrastructure while adding sophisticated AI capabilities for customer engagement, support automation, sales outreach, and appointment scheduling. ## Getting Started with Exotel on Bolna Configure AI agents to initiate automated phone calls through your Exotel numbers Set up AI agents to answer and handle inbound calls on your Exotel phone lines Link your existing Exotel account credentials to Bolna for seamless integration ## Why use Exotel with Bolna? Exotel offers several advantages: * **Cost-effective**: Enjoy competitive domestic calling rates tailored for Indian businesses. * **Reliable infrastructure**: Built on robust Indian telecom networks for high uptime and clear call quality. * **Pan-India and global reach**: Seamlessly connect with customers across India and in multiple countries. * **Easy integration**: Set up quickly and integrate effortlessly with the Bolna Voice AI platform. For high-volume calling needs, consider using [batch calling](/docs/batch-calling) to scale efficiently. Compare Exotel with [Plivo](/docs/plivo) to choose the best provider for your needs. # Connect Your Exotel Account to Bolna Source: https://www.bolna.ai/docs/exotel-connect-provider Securely connect your Exotel account with Bolna. Enable your Voice AI agents to utilize Exotel phone numbers for managing inbound and outbound calls. ## Connecting Your Exotel Account for AI-Powered Calling Linking your personal or business Exotel account to Bolna gives you complete ownership and control over your telephony infrastructure. Once connected, all voice calls initiated by Bolna's AI agents will route through your Exotel account, utilizing your provisioned phone numbers and billing directly to your Exotel subscription. This approach ensures transparency in call costs, maintains your existing phone number reputation, and provides full visibility into call analytics through both Bolna and Exotel dashboards. ## Step-by-Step Integration Process ### Step 1: Access the Providers Configuration Panel Begin by logging into your Bolna platform account and locating the `Providers` section in the left navigation menu. Click the **Exotel connect button** to initiate the account linking process. Providers page in Bolna dashboard showing Exotel connection button for integrating Exotel telephony with Voice AI agents
### Step 2: Enter Your Exotel Authentication Credentials You'll need to provide your Exotel API credentials, which include your `API_KEY`, `API_TOKEN`, `ACCOUNT_SID`, `DOMAIN` and `PHONE_NUMBER`. These credentials can be found in your Exotel account dashboard under API settings. These credentials allow Bolna to securely communicate with Exotel's API on your behalf. Exotel account connection form in Bolna showing Auth ID and Auth Token input fields for establishing secure connection
### Step 3: Finalize the Connection After entering your credentials click the **connect button** to establish the secure link between your Exotel account and Bolna's Voice AI platform. The system will validate your credentials and establish the integration. Exotel account connection confirmation screen in Bolna showing connect button to finalize telephony provider integration
### Step 4: Verify Successful Integration Upon successful connection, you'll receive a confirmation message indicating that your Exotel account is now active on Bolna. From this point forward, all AI-powered voice calls initiated through Bolna cab be utilized with your Exotel infrastructure, phone numbers, and account balance. You can now configure your AI agents to make outbound calls or handle inbound calls using your Exotel telephony resources. Successful Exotel account connection status in Bolna platform showing secure integration completion for Voice AI telephony services
# Make Outbound Calls with Exotel and Bolna Source: https://www.bolna.ai/docs/exotel-outbound-calls Set up & run outbound calling campaigns in India with Bolna Voice AI on Exotel. Follow this step-by-step guide for dashboard setup and seamless API integration. ## Launching Outbound Calls Through the Bolna Dashboard ### Step 1: Access Your Bolna Platform Account Navigate to [https://platform.bolna.ai](https://platform.bolna.ai) and authenticate using your registered account credentials. Bolna platform login interface showing authentication process for connecting Voice AI agent dashboard with your Exotel account
### Step 2: Configure Exotel as Your Telephony Provider Within your agent configuration settings, select `Exotel` from the available call provider options. This designation tells Bolna to route all outbound calls through Exotel's telephony infrastructure. Exotel provider selection in Bolna agent configuration showing call provider setup for outbound Voice AI calling
### Step 3: Initiate Calls to Your Target Recipients Enter the phone numbers of your intended call recipients in the designated input field. Bolna will automatically initiate calls through your Exotel connection, engaging with each recipient using the voice agents you've configured. Outbound call initiation interface in Bolna showing phone number input and call placement process using Exotel integration
To utilize your own dedicated Exotel phone numbers for outbound calling, you must first establish a connection between your Exotel account and Bolna. Detailed instructions for linking your Exotel account are available in the [providers configuration guide](/docs/exotel-connect-provider). ## Programmatic Outbound Calling Using Bolna APIs For developers building custom applications or integrating voice AI into existing systems, Bolna provides comprehensive REST APIs for programmatic call management. ### Step 1: Obtain Your API Authentication Key 1. Generate and save your [Bolna API Key](/docs/api-reference/introduction#steps-to-generate-your-api-key) ### Step 2: Configure Agent with Exotel Provider When creating or updating your Bolna agent through the [`/create` Agent API](/docs/api-reference/agent/create), specify `exotel` as both the input and output provider within your tools configuration. ```create-agent.json theme={"system"} ... ... "tools_config": { "output": { "format": "wav", "provider": "exotel" }, "input": { "format": "wav", "provider": "exotel" }, "synthesizer": {...}, "llm_agent": {...}, "transcriber": {...}, "api_tools": {...} } ... ... ``` ### Step 3: Trigger Outbound Calls Programmatically Execute the [`/call` API endpoint](api-reference/calls/make) to initiate outbound calls to your target recipients. Include your agent ID and the recipient's phone number in E.164 international format. The API will return a call ID that you can use to track call status and retrieve conversation analytics. ```call.json theme={"system"} curl --request POST \ --url https://api.bolna.ai/call \ --header 'Authorization: ' \ --header 'Content-Type: application/json' \ --data '{ "agent_id": "fd3d9b56-0742-4a39-aaac-50dec1f37d00", "recipient_phone_number": "+919876543210" }' ``` # Frequently Asked Questions Source: https://www.bolna.ai/docs/frequently-asked-questions Find answers to common questions about Bolna Voice AI — setup, pricing, APIs, phone numbers, multilingual agents, sub-accounts, and on-premise deployment. All agents created on Bolna undergo internal compliance and safety checks. If you see a message such as **“Agent is restricted due to disallowed content. Please review and update it.”**, it means your agent’s configuration or prompt may have triggered a violation of Bolna’s content safety policies. Disallowed content includes (but is not limited to): * Political campaigns * Illegal activities or solicitation * Scam or fraud-related behavior * Profanity or hate speech * NSFW, adult, or sexually explicit content * Harmful or misleading information To resolve this, please review and modify your agent’s prompt, instructions, or behavior to ensure it adheres to a valid use-case. Once updated, you can re-save the agent to re-trigger validation. Bolna supports a wide range of customizable voice agents. From free-flowing conversational assistants to structured IVR-style bots. You can build agents for use cases like [lead qualification](/docs/agents-library), customer support, interviews, [appointment bookings](/docs/tool-calling/book-calendar-slots), [call transfers](/docs/tool-calling/transfer-calls), and more. Get started with our [Agent template library](/docs/agents-library) or explore the [Playground agent setup guide](/docs/agent-setup/agent-tab). Bolna offers transparent usage-based pricing: * **Call pricing**: \$0.02/min platform fee (plus provider charges). Please refer to the [cost & pricing documentation](/docs/pricing/call-pricing) for detailed information. For high-volume usage, explore our [Enterprise Plan](/docs/enterprise/plan) with customized volume-based discounts. By default, Bolna allows up to **10 concurrent calls** for paid users. Learn more about [outbound calling concurrency](/docs/outbound-calling-concurrency) or request higher limits via the [Enterprise Plan](/docs/enterprise/plan) for large-scale deployments and [batch calling](/docs/batch-calling) capabilities. **Yes**. You can either: * **Buy phone numbers directly** from the [Bolna Dashboard](/docs/buying-phone-numbers). * **Use your own telephony account** (e.g., [Twilio](/docs/twilio-connect-provider) or [Plivo](/docs/plivo-connect-provider)) to connect and use your own manageed dedicated phone numbers. No - Phone numbers purchased on Bolna can only be used with Bolna Voice AI agents. Absolutely. Bolna integrates seamlessly with third-party telephony providers like [Twilio](/docs/twilio-connect-provider) and [Plivo](/docs/plivo-connect-provider), allowing you to use your own account and phone numbers. Yes. Bolna supports multiple languages and voices. You can create agents in various languages (e.g., English, Hindi) using built-in multilingual support across [speech-to-text](/docs/providers/transcriber/deepgram), [LLM](/docs/providers/llm-model/openai), and [text-to-speech](/docs/providers/voice/elevenlabs) components. Find the [list of all supported languages](/docs/customizations/multilingual-languages-support) and learn how to [write prompts for multilingual agents](/docs/guides/writing-prompts-in-non-english-languages). Yes, definitely. Bolna AI is an API-first platform providing a comprehensive API suite to: * Create, update, list, and delete voice agents via [Agent APIs](/docs/api-reference/agent/v2/overview). * Trigger calls via [Call APIs](/docs/api-reference/calls/overview). * Manage executions and logs via [Executions APIs](/docs/api-reference/executions/overview). * Do bulk calls using batches via [Batches APIs](/docs/api-reference/batches/overview). * Manage phone numbers via [Phone numbers APIs](/docs/api-reference/phone-numbers/overview). * Create, list and manage sub‑accounts via [Sub-Account APIs](/docs/api-reference/sub-accounts/overview). Yes. The platform supports shared access where you can add your team (developers, operators, analysts, etc.) to collaborate within the Bolna dashboard. APIs also allow scoped access through sub‑accounts. Yes. Bolna supports multiple sub-accounts, designed for enterprise-level teams to isolate projects, billing, and permissions—fully manageable via the API. Yes - Bolna AI supports on-premise deployments. You can run the complete Bolna platform on your own infrastructure (e.g., private cloud or on-premise servers) instead of the hosted Bolna service. On-premise is available only for enterprise customers. Please reach out to us at [enterprise@bolna.ai](mailto:enterprise@bolna.ai) or schedule a call [https://www.bolna.ai/meet](https://www.bolna.ai/meet) for more information. Not yet. SIP connectivity is **not currently supported** on Bolna Voice AI. However, native SIP integration is on our roadmap to enable direct enterprise-grade connectivity with PBX systems and VoIP infrastructure. You can currently use [Twilio](/docs/twilio-connect-provider), [Plivo](/docs/plivo-connect-provider) or [Exotel](/docs/exotel-connect-provider) integrations for all telephony and call-routing needs. # Creating a Voice Call Agent Source: https://www.bolna.ai/docs/getting-started/agent-creation Learn how to create Voice Agents in Bolna. Use Auto Build for guided steps, premade templates for common use cases, or start from scratch with default settings. ## Overview Bolna provides multiple ways to create a Voice Call Agent for automated phone calls. Choose the method that works best for your use case. Agent Setup page showing Your Agents sidebar, configuration tabs, and agent details *** ## Getting Started Navigate to **Agent Setup** in the left sidebar and click **+ New Agent** to create a new agent. Agent Setup sidebar showing Import and New Agent buttons with agent list When you click **+ New Agent**, you'll see two options: AI generates your agent based on your description Start with ready-to-use templates *** ## Auto Build Agent Answer a few questions about your use case, and Bolna's AI generates the prompts and configurations for you. Auto Build Agent modal with fields for name, languages, call objective, next steps, FAQs, and sample transcript Give your agent a descriptive name (e.g., "Customer Support - E Commerce"). Choose the languages your agent should support (English, Hindi, etc.). Tell the AI what you want to achieve in this call (be descriptive!). Describe what should happen after the call is completed. Provide any FAQs, business documents, or additional information. Provide example conversations to guide the agent's behavior. Click **Generate Agent** to create your customized agent. **Pro tip:** The more detail you provide in the call objective, the better your AI-generated agent will be! *** ## Pre built Agents Start with a ready-to-use template designed for common calling scenarios like Customer Support, Lead Qualification, Recruitment, Onboarding, and more. Pre built Agents selection showing templates for Recruitment, Lead Qualification, Onboarding, Customer Support, Survey, and more Browse all templates in the [Agents Library](/docs/agents-library) to explore the full list of pre-built agents. *** ## Build from Scratch Click **"I want to create an agent from scratch"** at the bottom of the modal to create a new agent with default settings. The agent will appear in your dashboard ready for you to customize. Option to create an agent from scratch with default settings Learn how to configure your agent in the [Agent Setup Guide](/docs/agent-setup/overview). *** ## Import Agent Already have an agent configuration? Import an existing agent to reuse or share agents across projects. Step-by-step guide to importing agent configurations *** ## Next Steps Learn all agent configuration options Browse ready-to-use agent templates Best practices for prompting Integrate tools and APIs # Build Knowledge Base with PDFs & URLs Source: https://www.bolna.ai/docs/getting-started/knowledge-base Upload PDFs and add URLs to create knowledge bases for your Bolna Voice AI agents. Enable context-aware responses with RAG-powered retrieval. ## What is Knowledge Base? Knowledge Base allows you to upload documents and add URLs that your AI agent can reference during conversations. Using RAG (Retrieval-Augmented Generation), your agent retrieves relevant information and provides accurate, context-aware responses. Knowledge Base page showing sidebar navigation, uploaded PDFs and URLs with RAG IDs, status, and Add Knowledge Base button *** ## How to Access Knowledge Base Navigate to [platform.bolna.ai](https://platform.bolna.ai/) Click **Knowledge Base** in the left sidebar. Click the blue **Add Knowledge Base** button to get started. *** ## Adding a Knowledge Base Upload PDF documents for your agent to reference. Add Knowledge Base modal with Upload PDF tab showing drag and drop area and Language Support dropdown Open the modal from the main Knowledge Base page. The **Upload PDF** tab is selected by default. Drag and drop your PDF file, or click **"click to browse"** to select. Choose **English (Default)** or **Multilingual (Hindi, Tamil, etc.)** from the **Language Support** dropdown. Click **Upload PDF** to start processing. Only `.pdf` files are supported for document upload. Add website URLs for your agent to reference. Add Knowledge Base modal with Add URL tab showing website URL input field and Language Support dropdown Open the modal from the main Knowledge Base page. Click the **Add URL** tab. Paste the full URL (e.g., `https://example.com`). Choose **English (Default)** or **Multilingual (Hindi, Tamil, etc.)** from the **Language Support** dropdown. Click **Add URL** to start processing. Add your company website, FAQ pages, or product documentation URLs for comprehensive agent knowledge. *** ## Multilingual Knowledge Bases By default, knowledge bases are optimized for English content. If your documents are in **non-English languages** (Hindi, Spanish, French, etc.) or you need **cross-lingual retrieval** (e.g., query in English, retrieve from Hindi documents), enable **Multilingual** language support when creating a knowledge base. | Mode | Best for | | -------------------------- | ---------------------------------------------------------------------- | | **Default** (no selection) | English-only documents and queries | | **Multilingual** | Non-English documents, mixed-language queries, cross-lingual retrieval | Choose the language support mode **before** uploading. Existing knowledge bases cannot be switched between default and multilingual — you'll need to create a new one. If your agent handles calls in multiple languages using [multilingual voice support](/docs/customizations/multilingual-languages-support), pair it with a multilingual knowledge base for consistent cross-lingual performance. *** ## Managing Your Knowledge Bases Your uploaded knowledge bases are displayed in a table with full management capabilities. | Column | Description | | ----------- | ------------------------------------------------------ | | **RAG ID** | Unique identifier for the knowledge base | | **Source** | Original file name or URL | | **Type** | Content type (Pdf, Url) | | **Created** | When the knowledge base was added | | **Status** | Processing status (`processed`, `processing`, `error`) | | **Delete** | Remove the knowledge base | Wait for the status to show **"processed"** before connecting to your agent. If status shows **"error"**, try re-uploading the file. *** ## Connecting to Your Agent **Don't forget this step!** Knowledge bases must be connected to your agent in the LLM Tab to take effect. LLM Tab showing Add knowledge base multi-select dropdown with URLs and PDFs Go to your agent's **[LLM Tab](/docs/agent-setup/llm-tab)**. Locate **Add knowledge base (Multi-select)**. Check one or more knowledge bases from the dropdown. Click **Save agent** to apply changes. You can connect multiple knowledge bases to a single agent for comprehensive responses across different topics. *** ## Use Cases Answer questions about your products and services Provide accurate answers from your FAQ pages Reference company policies during calls Help agents access training and onboarding content *** ## Next Steps Connect knowledge base to your agent Configure prompts to use knowledge Set safety rules and structured responses Prompting best practices # Understanding Providers Source: https://www.bolna.ai/docs/getting-started/providers Learn about Bolna providers - the AI services that power your Voice AI agents. Connect your own Transcribers, LLMs, Synthesizers, and Telephony providers. ## What are Providers? Providers are the AI services that power your Voice AI agents. Every voice agent in Bolna uses providers working together to handle conversations in real-time. *** ## Benefits of Connecting Your Own Providers Use your own API keys and pay providers directly. No markup on provider usage. Use specific models, voices, or features not available on Bolna's default providers. Get enterprise SLAs, dedicated support, and compliance certifications from providers. Already have provider accounts? Connect them to Bolna and use your existing credits. When you connect your own provider, Bolna doesn't charge for that provider's usage. You pay the provider directly. *** ## How Providers Work Together ```mermaid theme={"system"} flowchart LR A[Caller speaks] --> B[Transcriber] B --> C[LLM] C --> D[Synthesizer] D --> E[Agent responds] ``` 1. **Transcriber (STT)** — Converts speech to text 2. **LLM** — Understands intent and generates a response 3. **Synthesizer (TTS)** — Converts text to natural speech *** ## Supported Providers ### LLMs (Large Language Models) The brain of your voice agent. Understands caller intent and generates responses. } href="/providers/llm-model/azure-openai"> Enterprise OpenAI deployment } href="/providers/llm-model/openai"> GPT-4o, GPT-4o-mini, GPT-3.5 } href="/providers/llm-model/openrouter"> Access multiple models } href="/providers/llm-model/openrouter"> Search-powered responses *** ### Transcribers (Speech-to-Text) Convert spoken words into text. Accuracy and speed are critical for natural conversations. } href="/providers/transcriber/deepgram"> Fast, accurate, great for calls } href="/providers/transcriber/openai"> GPT Realtime Whisper } href="/providers/transcriber/sarvam"> Indian language transcription *** ### Synthesizers (Text-to-Speech) Convert text into natural-sounding speech. Voice quality matters for customer experience. } href="/providers/voice/cartesia"> Ultra-low latency } href="/providers/voice/elevenlabs"> Ultra-realistic voices } href="/providers/voice/rime"> High-quality synthesis } href="/providers/voice/sarvam"> Indian language voices *** ### Telephony Providers Handle phone calls - both inbound and outbound. } href="/exotel"> India-focused } href="/plivo"> Cost-effective } href="/twilio"> Global coverage } href="/vobiz"> Enterprise telephony *** ### Tools & Integrations Connect external services to enhance your voice agent. } href="/integrations"> WhatsApp messaging } href="/tool-calling/book-calendar-slots"> Calendar booking *** ## Quick Start For testing and development, Bolna's built-in providers work out of the box. No configuration needed. Ready to connect your own providers? See [Connect Providers](/docs/providers) for step-by-step instructions. *** ## Recommended Setups | Use Case | Recommended Providers | | -------------------- | --------------------------------- | | **Quick testing** | Use Bolna's built-in providers | | **Production** | Connect your own accounts | | **Indian languages** | Sarvam for LLM | | **Lowest latency** | Deepgram + GPT-4o-mini + Cartesia | | **Highest quality** | Deepgram + GPT-4o + ElevenLabs | *** ## Next steps Add your provider credentials View all available integrations Create custom voices Configure your agent # Debugging Graph Agents Source: https://www.bolna.ai/docs/graph-agent/debugging Read the routing logs, understand what the routing LLM saw, and fix the most common misbehaviour patterns. The fastest way to diagnose a misbehaving graph agent is to read the routing logs. On every customer turn the framework logs the routing decision, the confidence, and the reason. This page walks through the log format and the patterns you'll see most often. *** ## What you'll see in the logs Every customer turn produces one routing log line. Two formats, depending on whether the routing LLM ran or a deterministic rule fired first. **LLM-routed turn:** ``` Routing decision (LLM): transition_to_offer_pitch | confidence: 0.95 | reasoning: Customer confirmed identity by saying 'yeah'. (latency: 210.4ms) ``` **Deterministic turn (expression or unconditional edge):** ``` Routing decision (deterministic): -> after_hours | deterministic:expression:Outside working hours (latency: 0.6ms) ``` | Field | What it tells you | | --------------------------------- | ------------------------------------------------------------------------------------------------------ | | `LLM` vs `deterministic` | Whether the routing LLM made the call, or an expression / unconditional rule fired first. | | `transition_to_` or `-> ` | The target node the routing picked. | | `confidence` (LLM only) | How certain the LLM was. Close to `1.0` means a clear match. Below `0.6` suggests ambiguous edges. | | `reasoning` | Why this transition was chosen. The single most useful field for debugging wrong transitions. | | `latency` | How long routing took. Deterministic edges are sub-millisecond; LLM routing is typically 150 to 300ms. | When the routing LLM picks `stay_on_current_node`, the agent **still produces a response** on the current node. It does not stay silent. *** ## Common scenarios ### Agent keeps re-asking instead of moving forward The routing LLM is returning `stay_on_current_node`. Read the `reasoning` value in the routing log: it almost always explains what it thought was missing. Common causes: * The edge condition is too strict, or uses vocabulary the LLM wouldn't associate with what the customer said. * The customer's input genuinely doesn't match any condition. Add a broader fallback edge. * The edge has `parameters` and the customer hasn't provided one of the required values yet. ### Agent routes to the wrong node Two edge conditions are overlapping. The routing LLM is matching the wrong one. Check the `reasoning` value in the routing log to see which condition it picked and why, then rewrite the conditions to be more specific and mutually exclusive. ### Confidence is consistently low Edge conditions are ambiguous or too similar to each other. Rewrite them, or add expression edges for the deterministic cases (working hours, retry counts, language) so the LLM has fewer overlapping options. ### Agent skips a node unexpectedly An expression edge fired before the LLM got a chance. Check whether any expression edges on the previous node have overly broad conditions. For example `_node_turns gte 1` would always fire on the second turn regardless of what the customer said. ### Time-based expression never fires `recipient_data.timezone` was not set on the call. Without it, `current_hour`, `current_weekday`, etc. are never populated and every time-based comparison silently returns `False`. Always set `timezone` when creating a call that uses time-based routing. ### Agent forgets earlier context on long calls The response LLM only sees the most recent 50 messages of conversation history. For most calls this is fine, but on very long flows the agent can lose earlier turns. Persist important state into `context_data` (extracted via edge `parameters` or pushed via event properties) instead of relying on the LLM seeing it in the transcript. ### Static node plays the wrong text or wrong voice The cache was built from an earlier version of the config. Re-save the agent so the cache regenerates from the current `static_message` and TTS voice settings. ### Event fires but the agent stays silent Most likely causes, in rough order: 1. The call had already ended when the event arrived. Check that you got `202 Accepted`, not `404`. 2. The event name doesn't match any edge on the **current** node. Event edges only fire on the active node. Check the most recent `Routing decision` log line to see where the call actually was when the event landed. 3. The user was speaking when the event resolved. The node still transitioned, but proactive generation was deliberately skipped. The next user turn will route on the new node naturally. 4. There's no event edge for that name anywhere on the node. Add one or rename the event to match an existing edge. # Edges & Routing Source: https://www.bolna.ai/docs/graph-agent/edges-and-routing Edge types, expression operators, built-in variables, and how routing decisions are made on every turn. Every node has a list of `edges`. After each customer message, the framework picks the next node by checking deterministic edges first (instant, free), then handing off to the routing LLM if nothing deterministic matches. *** ## Edge fields | Field | Description | | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | `to_node_id` | Target node id. Required. | | `condition` | Human-readable description of when to transition. Used as the routing LLM's tool description. | | `condition_type` | One of `"llm"` (default if unset), `"expression"`, `"unconditional"`, `"event"`. | | `expression` | Required when `condition_type == "expression"`. See [Expression edges](#expression-edges). | | `event_name` | Required when `condition_type == "event"`. The external event name to listen for. See [Event injection](/docs/graph-agent/event-injection). | | `function_name` | Override the auto-generated routing tool name (default: `transition_to_`). | | `function_description` | Override the auto-generated routing tool description. | | `parameters` | Map of `{name: type}` to extract from the user's input during the transition. See [Inline data extraction](#inline-data-extraction). | | `priority` | Lower fires first. Defaults: expression / unconditional / event = `0`, llm = `100`. | *** ## Edge types | `condition_type` | How it works | When to use | | ------------------ | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- | | Not set or `"llm"` | Routing LLM evaluates `condition` against the customer's reply. | When the decision requires understanding intent. | | `"expression"` | Rule-based check on context variables. Fires instantly if matched. | Time of day, retry counts, language detection, any data-driven decision. | | `"unconditional"` | Always takes this edge. No check. | When there is only one possible next step. | | `"event"` | Fires only when a matching external event arrives via REST. Ignored during speech routing. | When an external system (payment, form, link click) drives the conversation. See [Event injection](/docs/graph-agent/event-injection). | Expression and unconditional edges are checked together (in `priority` order, ascending) **before** any LLM call is made. *** ## Expression edges ```json theme={"system"} { "to_node_id": "after_hours", "condition": "Outside working hours", "condition_type": "expression", "expression": { "logic": "or", "conditions": [ { "variable": "recipient_data.current_hour", "operator": "lt", "value": 10 }, { "variable": "recipient_data.current_hour", "operator": "gte", "value": 18 } ] } } ``` Use `"logic": "and"` when all conditions must be true. Use `"logic": "or"` when any one is enough. ### Operators `eq`, `neq` `gt`, `gte`, `lt`, `lte` `contains` `in`, `not_in` `exists`, `not_exists` ### Priority Lower priority fires first. Defaults if not set: deterministic edges (expression, unconditional, event) get priority `0`; LLM edges get priority `100`. Within the deterministic bucket, the **first** matching edge wins. For mutually-exclusive rules (e.g. working-hours vs after-hours), set distinct priorities to make ordering explicit. *** ## Built-in variables These variables are populated automatically and can be referenced in any expression. | Variable | Type | Notes | | -------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `recipient_data.current_hour` | int (0-23) | Hour in the call's timezone. | | `recipient_data.current_minute` | int (0-59) | | | `recipient_data.current_weekday` | string | Lowercase, e.g. `"wednesday"`. | | `recipient_data.current_day` | int (1-31) | | | `recipient_data.current_month` | int (1-12) | | | `recipient_data.current_year` | int | | | `recipient_data.current_date` | string | Display string for prompts only, not for comparisons. | | `recipient_data.current_time` | string | Display string for prompts only. | | `recipient_data.timezone` | string | e.g. `"Asia/Kolkata"`. | | `recipient_data.user_number` | string | E.164 phone number. | | `detected_language` | string | Top-level, not under `recipient_data`. e.g. `"hindi"`, `"en"`. | | `_node_turns` | int | User messages on the **current** node. Resets on every transition. | | `_total_turns` | int | User messages in the entire call. | | `_silence_repeats` | int | Times the current node has replayed because the user stayed silent past `repeat_after_silence_seconds`. Resets on transition. See [Static nodes](/docs/graph-agent/static-nodes). | Time variables (`current_hour`, `current_weekday`, etc.) are populated **only when `recipient_data.timezone` is set on the call**. Without a timezone, time-based expressions silently never match. Always set `timezone` when creating a call that uses time-based routing. *** ## Common patterns **Working hours (10 AM to 6 PM)** ```json theme={"system"} { "to_node_id": "transfer_call", "condition": "Working hours", "condition_type": "expression", "priority": 0, "expression": { "logic": "and", "conditions": [ { "variable": "recipient_data.current_hour", "operator": "gte", "value": 10 }, { "variable": "recipient_data.current_hour", "operator": "lt", "value": 18 } ] } } ``` **Auto-escalate after too many retries** ```json theme={"system"} { "to_node_id": "transfer_call", "condition": "Too many retries on this node", "condition_type": "expression", "expression": { "conditions": [ { "variable": "_node_turns", "operator": "gte", "value": 2 } ] } } ``` *** ## Inline data extraction Edges can capture typed values from the user's reply during routing. The routing LLM treats them as required parameters; on a successful transition the values are merged into `context_data` and become available everywhere. ```json theme={"system"} { "to_node_id": "confirm_order", "condition": "Customer provided their order id", "parameters": { "order_id": "string" } } ``` After the transition, `context_data["order_id"]` is set and you can: * Reference it in node prompts via `{order_id}`. * Use it in downstream expression edges: `{ "variable": "order_id", "operator": "exists" }`. * Pass it to API tools as `%(order_id)s`. Prefer `parameters` over a separate "extract" node. One LLM call routes **and** captures data. *** ## Routing instructions The `routing_instructions` field is prepended to every routing request. Keep it short and directive: ``` You are the Routing System for this conversation. Analyze the user's input and the available edges. Select the edge whose condition best matches. If no edge matches, stay on the current node. ``` You can include `{variable}` placeholders. They are substituted from `context_data` (and the flattened `recipient_data`) at runtime. Missing keys render as `NULL`. # Real-Time Event Injection Source: https://www.bolna.ai/docs/graph-agent/event-injection Drive graph agent transitions and proactive agent speech from external events via REST, without waiting for the user to speak. Speech is one input to a graph agent. Events are the other. When a customer opens a payment link, completes a form, or finishes a transaction on your website, you want the agent to react immediately rather than wait for the user to say something. Event injection adds a REST endpoint, `POST /v1/call/{run_id}/events`, that lets your backend push named events into a live call. A matching event edge transitions the conversation and triggers proactive agent speech, all in under a second. *** ## Configuring an event edge Add edges with `condition_type: "event"` and an `event_name`. They are ignored during normal speech routing, so they coexist freely with LLM and expression edges on the same node. ```json theme={"system"} { "id": "awaiting_payment", "prompt": "User is completing payment via {method}. Reassure them.", "edges": [ { "to_node_id": "confirmation", "condition_type": "event", "event_name": "payment_completed" }, { "to_node_id": "payment_failed", "condition_type": "event", "event_name": "payment_failed" } ] } ``` A node can mix all three edge types: event edges (fire on external signal), expression edges (fire on context variables), and LLM edges (fire on user speech). Whichever input arrives first drives the transition. ### Edge field reference | Field | Type | Required | What it does | | ---------------- | --------- | -------- | ------------------------------------------------------------------------------------- | | `condition_type` | `"event"` | Yes | Marks this edge as event-triggered. Skipped during speech routing. | | `event_name` | string | Yes | The event name to match (e.g. `"link_opened"`, `"payment_completed"`). | | `to_node_id` | string | Yes | Target node for the transition. | | `priority` | number | No | If multiple event edges match the same name, lower priority fires first. Default `0`. | *** ## Firing an event ```bash theme={"system"} curl -X POST https://api.bolna.ai/v1/call/{run_id}/events \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "event": "link_opened", "properties": { "step": "verify" } }' ``` ``` 202 Accepted { "status": "accepted", "event": "link_opened", "run_id": "..." } 404 Not Found { "detail": "No active call found for this run_id" } ``` * `run_id` is returned by `POST /call` for outbound calls or arrives in your webhook for inbound calls. * Fire-and-forget. The endpoint returns 202 as soon as the event is published. * `properties` are merged into the agent's `context_data`, so they become available as `{variable}` substitution in node prompts and as `variable` references in expression edges. *** ## What happens when an event arrives | Scenario | Behaviour | | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Event matches an edge on the current node | Properties merged into `context_data`, transition fires, agent speaks proactively. | | Event doesn't match any edge | Properties still merged into `context_data`. No speech, but the next LLM call sees the new context. | | Agent is currently speaking | Buffered at a safe point, processed after the current utterance finishes. | | User is speaking when the event resolves | Node transitions, but proactive generation is **skipped**. The user's in-progress utterance routes on the new node. Prevents the agent from interrupting itself. | | LLM is generating a response | Buffered until generation completes. | | Two events arrive rapidly | Processed sequentially in arrival order. | | Event transitions to a static node | Cached audio plays in \~50ms. Zero LLM cost. | | Event arrives on a node with no event edges for that name | No transition. Properties still merge into `context_data` silently. | *** ## How proactive speech stays natural When an event drives a transition, the agent must speak without the user saying anything. Two design choices make this feel natural rather than scripted: 1. Event `properties` are merged into `context_data`, so the new node's `prompt` can reference them via `{variable}` substitution. 2. The conversation history is **not** polluted with fake user messages. The agent simply produces a new assistant turn on the new node. The result: a transcript that reads as consecutive assistant messages, exactly as a human agent would speak after seeing a screen update. *** ## Latency | Target node type | Latency | Cost | | ---------------- | --------------------- | ---------------- | | LLM node | \~800ms (LLM + TTS) | LLM tokens + TTS | | Static node | \~50ms (cached audio) | Zero | If a confirmation message never changes, point your event edge at a [static node](/docs/graph-agent/static-nodes) for the fastest possible response. *** ## Worked example: payment confirmation The agent waits while the user completes a payment on the bank's website. Your backend fires `payment_completed` when the gateway confirms. ### Graph config (3 nodes) ```json theme={"system"} [ { "id": "awaiting_payment", "prompt": "Payment initiated. Reassure the user while it processes. Amount: {payment_currency} {payment_amount}.", "repeat_after_silence_seconds": 20, "edges": [ { "to_node_id": "confirmation", "condition_type": "event", "event_name": "payment_completed" }, { "to_node_id": "payment_failed", "condition_type": "event", "event_name": "payment_failed" } ] }, { "id": "confirmation", "node_type": "static", "static_message": "Payment confirmed! Thank you. Have a great day.", "edges": [] }, { "id": "payment_failed", "prompt": "Payment failed: {error_reason}. Apologise briefly and offer to retry.", "edges": [] } ] ``` ### Backend code ```python theme={"system"} import requests def fire_event(run_id, event, properties=None): requests.post( f"https://api.bolna.ai/v1/call/{run_id}/events", headers={"Authorization": f"Bearer {API_KEY}"}, json={"event": event, "properties": properties or {}}, ) # Payment gateway webhook handler fire_event(run_id, "payment_completed", {"ref": "TXN-98765"}) ``` The `confirmation` node is static, so the user hears the confirmation in \~50ms with no LLM call. The `payment_failed` node uses `{error_reason}` from the event's `properties` to give the user a specific message. Add more event edges (`details_verified`, `payment_initiated`, etc.) to walk the user through a longer flow. The pattern stays the same: one edge per event name, one HTTP call per step. *** ## Notes on timing * Events never interrupt active speech. They are queued until the agent is at a safe point (no audio playing, no response in flight) and processed then. * If the user is mid-utterance when the event lands, the node transitions but the agent does not speak proactively. The user's utterance routes on the new node, so the agent's first words still feel responsive. * The `run_id` is all you need. The same endpoint works regardless of where the call is running. # Full Example Source: https://www.bolna.ai/docs/graph-agent/full-example Complete annotated graph agent config showing every feature: nodes, edges, expression routing, static nodes, event injection, and call transfer. This is the complete shape of a graph agent. It demonstrates every feature documented in the rest of this section. Replace `PLACEHOLDER` values with real config before deploying. The flow: * `welcome`: greets the customer. Transfers during working hours, ends the call after-hours, or jumps straight to `payment_confirmed` if a payment event arrives. * `collect_order`: collects an order id with silence handling and a per-node knowledge base. * `payment_confirmed`: static confirmation message played from cache. * `transfer_call`: routes the call to a human agent via the transfer tool. * `closing`: static goodbye. ```json theme={"system"} { "agent_config": { "agent_name": "Demo Graph Agent", "agent_type": "other", "agent_welcome_message": "Hello, my name is Neha.", "tasks": [ { "task_type": "conversation", "toolchain": { "execution": "parallel", "pipelines": [["transcriber", "llm", "synthesizer"]] }, "task_config": { "optimize_latency": true, "call_terminate": 600, "hangup_after_LLMCall": true }, "tools_config": { "input": { "format": "wav", "provider": "plivo" }, "output": { "format": "wav", "provider": "plivo" }, "api_tools": { "tools": [ { "key": "transfer_call", "name": "transfer_call_main", "parameters": { "type": "object", "required": ["call_sid"], "properties": { "call_sid": { "type": "string", "description": "unique call id" } } }, "description": "Transfer call to human agent.", "pre_call_message": "Please hold while I transfer your call..." } ], "tools_params": { "transfer_call_main": { "url": null, "param": { "call_sid": "%(call_sid)s", "call_transfer_number": "+91XXXXXXXXXX" }, "method": "POST", "headers": {} } } }, "llm_agent": { "agent_type": "graph_agent", "agent_flow_type": "streaming", "llm_config": { "model": "gpt-4.1-mini", "max_tokens": 200, "temperature": 0.2, "provider": "openai", "routing_model": "gpt-4.1-mini", "routing_max_tokens": 250, "routing_instructions": "PLACEHOLDER: routing instructions", "agent_information": "PLACEHOLDER: global agent prompt (persona, language, guardrails)", "current_node_id": "welcome", "nodes": [ { "id": "welcome", "prompt": "Greet the customer and identify their intent.", "edges": [ { "to_node_id": "collect_order", "condition": "Customer wants order status", "parameters": { "order_id": "string" } }, { "to_node_id": "transfer_call", "condition": "Customer asks for a human", "condition_type": "expression", "expression": { "logic": "and", "conditions": [ { "variable": "recipient_data.current_hour", "operator": "gte", "value": 10 }, { "variable": "recipient_data.current_hour", "operator": "lt", "value": 18 } ] } }, { "to_node_id": "closing", "condition": "Outside working hours", "condition_type": "expression", "priority": 1, "expression": { "logic": "or", "conditions": [ { "variable": "recipient_data.current_hour", "operator": "lt", "value": 10 }, { "variable": "recipient_data.current_hour", "operator": "gte", "value": 18 } ] } }, { "to_node_id": "payment_confirmed", "condition_type": "event", "event_name": "payment_completed" } ] }, { "id": "collect_order", "prompt": "Confirm the order id and look up its status using @fetch_order_status.", "repeat_after_silence_seconds": 10, "rag_config": { "vector_store": { "provider_config": { "vector_id": "PLACEHOLDER_collection_id" } }, "similarity_top_k": 8 }, "edges": [ { "to_node_id": "closing", "condition": "Status delivered to customer" }, { "to_node_id": "transfer_call", "condition_type": "expression", "expression": { "conditions": [ { "variable": "_silence_repeats", "operator": "gte", "value": 3 } ] } } ] }, { "id": "payment_confirmed", "node_type": "static", "static_message": "Your payment is confirmed. Thank you!", "edges": [ { "to_node_id": "closing", "condition_type": "unconditional" } ] }, { "id": "transfer_call", "prompt": "Transfer the call to a human agent.", "function_call": "transfer_call_main", "edges": [] }, { "id": "closing", "node_type": "static", "static_message": "Thank you for calling. Have a wonderful day. Goodbye!", "edges": [] } ] } }, "transcriber": { "model": "nova-3", "language": "multi-hi", "provider": "deepgram", "stream": true, "encoding": "linear16", "sampling_rate": 16000, "endpointing": 700 }, "synthesizer": { "provider": "elevenlabs", "stream": true, "caching": true, "buffer_size": 220, "audio_format": "wav", "provider_config": { "model": "eleven_turbo_v2_5", "voice": "PLACEHOLDER: voice name", "voice_id": "PLACEHOLDER: voice ID", "temperature": 0.2, "similarity_boost": 0.6, "speed": 0.9 } } } } ] } } ``` For automatic post-call extraction (disposition, sentiment, funnel stage), add an `extraction` task alongside the conversation task. See [Using extractions](/docs/using-extractions). ## What this example shows | Feature | Where | | --------------------------------------- | ---------------------------------------------------------------------------------------------------- | | Mixed edge types on one node | `welcome` has LLM, expression, and event edges. | | Inline data extraction via `parameters` | `welcome -> collect_order` captures `order_id`. | | Working-hours routing | `welcome -> transfer_call` (expression). | | After-hours fallback | `welcome -> closing` (expression, priority 1). | | Event-driven proactive speech | `welcome -> payment_confirmed` on `payment_completed`. | | Per-node RAG | `collect_order` has `rag_config`. | | Silence handling and escalation | `collect_order` has `repeat_after_silence_seconds: 10` and an expression edge on `_silence_repeats`. | | Static node | `payment_confirmed`, `closing`. | | Call transfer | `transfer_call` with `function_call`. | # Graph Agents Source: https://www.bolna.ai/docs/graph-agent/introduction Build structured, multi-step voice AI conversations using a node-based graph instead of one large prompt. A graph agent breaks a phone conversation into discrete **nodes**, each with its own purpose, instructions, and transition rules. Instead of one giant prompt that has to handle everything, you define exactly what the agent does at each step and exactly when it moves to the next one. Conversations follow explicit paths. Every transition is a rule you defined. When something breaks, you know which node failed and why. Change one node without touching the rest of the flow. Deterministic edges and static nodes skip the LLM entirely. ## When to use a graph agent Pick a graph agent when the call has discrete stages with different objectives (greet, qualify, collect, confirm, close), or when you need deterministic transitions (time of day, retry count, external events). For a single-objective agent that just answers questions, a regular `simple_llm_agent` is enough. *** ## Core concepts ### Nodes A node is one step in the conversation. Each node has one clear job. | Field | Type | Description | | ------------------------------ | ------ | ---------------------------------------------------------------------------------------------------- | | `id` | string | Unique identifier. Referenced by edges and `current_node_id`. | | `prompt` | string | Instruction given to the response LLM when the conversation is in this node. | | `edges` | array | Possible transitions out of this node. | | `examples` | object | Sample responses per language (`"en"`, `"hi"`). Guides tone and phrasing. | | `node_type` | string | `"llm"` (default) or `"static"`. See [Static Nodes](/docs/graph-agent/static-nodes). | | `static_message` | string | Required when `node_type == "static"`. Pre-cached audio plays at runtime. | | `repeat_after_silence_seconds` | number | Auto-replay the node after N seconds of user silence. Works on LLM and static nodes. | | `function_call` | string | Forces the response LLM's `tool_choice` to this tool when the node is entered (e.g. transfer nodes). | | `rag_config` | object | Optional per-node knowledge base. See [Tools & RAG](/docs/graph-agent/tools-and-rag). | ### Edges Edges define how the conversation moves from one node to the next. ```json theme={"system"} { "to_node_id": "order_status", "condition": "Customer provides a valid order number" } ``` If no edge matches, the agent stays on the current node and re-asks naturally. There are four edge types: LLM (default), expression, unconditional, and event. Full reference on [Edges & Routing](/docs/graph-agent/edges-and-routing). ### Routing After every customer message, a routing LLM evaluates the available LLM-typed edges on the current node and picks the best match. Expression and unconditional edges are evaluated **before** the routing LLM runs. If a deterministic rule matches, the transition fires instantly with zero latency and zero cost. The routing LLM is only invoked when no deterministic rule matches. *** ## Where graph agent config lives All graph-agent fields live inside `llm_agent`, nested under `tools_config` in your conversation task: ``` agent_config └── tasks[] └── tools_config └── llm_agent ← graph agent config goes here ├── agent_type: "graph_agent" ├── agent_information ├── routing_instructions ├── current_node_id └── nodes[] ``` ### Top-level fields | Field | Description | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `agent_type` | Must be `"graph_agent"` to enable the node-based flow. | | `agent_information` | Global system prompt. Persona, language rules, guardrails. Applied to every node. | | `routing_instructions` | Prompt given to the routing LLM. Prepended to every routing request. Supports `{variable}` substitution from `context_data`. | | `current_node_id` | Starting node when a new call begins. | | `nodes` | Array of all node objects. | | `model` | Response LLM. Defaults to `gpt-4.1-mini`. | | `routing_model` | Routing LLM. Defaults to `gpt-4.1-mini`. | | `routing_max_tokens` | Cap on routing response tokens. Defaults: 250 (non-GPT-5), 150 (GPT-5). | | `routing_reasoning_effort` | GPT-5 routing models only. `"minimal"` / `"low"` / `"medium"` / `"high"`. | ### `agent_information` is the identity layer This prompt is applied to every node. Use it for persona, response rules (max sentence count, language switching), pronunciation rules, and hard guardrails. `agent_information` is sent with every LLM call. Keep it focused. Save specifics for individual node prompts. *** ## Writing effective node prompts A well-written `prompt` includes the node's purpose, the exact question to ask, validation rules, a fallback, and any voice formatting rules. **Weak:** ``` Get the order number from the customer. ``` **Strong:** ``` Collect the customer's 10-digit order number. ASK: 'Can you please share your 10-digit order number?' VALIDATION: - Accept only numeric input, exactly 10 digits. - Expand spoken phrases: 'double four' becomes 'four four'. - If the customer gives fewer or more digits, ask once more politely. - After 2 failed attempts, offer to transfer to a live agent. FORMAT: Confirm the number in groups of 3-3-4 with a short pause between groups. Spell each digit as a word. Never use numerals in speech. ``` **One node, one job.** A node that collects an order number should only collect the order number. Don't also ask for the customer's name or call reason in the same node. *** ## Next steps Edge types, expression operators, built-in variables, inline data extraction. Pre-cached audio messages with auto-replay on user silence. Drive transitions and proactive speech from external events via REST. Call transfer, custom API tools, per-node knowledge bases. Routing logs, common scenarios, and how to fix them. Complete annotated JSON skeleton showing every feature end-to-end. # Static Nodes & Silence Repeat Source: https://www.bolna.ai/docs/graph-agent/static-nodes Pre-cached audio messages that play in 50ms with zero LLM cost, plus auto-replay on user silence with deterministic escalation. Many nodes in a flow always say the same thing: greetings, hold messages, confirmations, goodbyes. A static node pre-renders the audio for that message when the agent is saved and plays it back from cache at runtime. No LLM call. No TTS call. No latency. `repeat_after_silence_seconds` is a related setting that auto-replays a node after N seconds of user silence and exposes a `_silence_repeats` counter so expression edges can escalate after a few silent rounds (offer help, transfer, hang up). ## Latency and cost | Node type | Latency | Cost per turn | | ----------- | --------------------------- | --------------------------- | | LLM node | \~800ms (LLM + TTS + audio) | LLM tokens + TTS characters | | Static node | \~50ms (cached audio) | Zero | *** ## Configuring a static node Set `node_type` to `"static"` and provide `static_message`: ```json theme={"system"} { "id": "greeting", "node_type": "static", "static_message": "Hello! Thank you for calling Acme. How can I help you today?", "edges": [ { "to_node_id": "main_menu", "condition": "User responds with a request" } ] } ``` That's it. The audio is pre-generated using the agent's configured TTS voice when the agent is saved, then served from cache on every call. ### Field reference | Field | Type | Required | What it does | | ------------------------------ | --------------------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | `node_type` | `"llm"` or `"static"` | No (defaults to `"llm"`) | Controls whether the node calls the LLM or plays cached audio. | | `static_message` | string | Yes when `node_type == "static"` | The exact text to speak. Audio is pre-generated from this when the agent is saved. | | `repeat_after_silence_seconds` | number | No | If set, replays the node's response after this many seconds of user silence. Works on **both** static and LLM nodes. | All three fields are optional with safe defaults. Existing graph agents that don't use any of them behave exactly as before. *** ## Silence repeat When `repeat_after_silence_seconds` is set and the user goes quiet: 1. The silence timer fires after the configured seconds. 2. `_silence_repeats` increments by 1. 3. Expression edges are evaluated. If one matches `_silence_repeats`, the agent transitions. 4. Otherwise the node replays. A static node plays the same cached audio (zero cost). An LLM node regenerates with `[silence]` in the conversation history and rephrases naturally. 5. `_silence_repeats` resets to `0` on any transition out of the node. *** ## Example: greeting with silence fallback Play a greeting. If the user is silent, repeat up to 3 times, then hang up. ```json theme={"system"} { "id": "greeting", "node_type": "static", "static_message": "Hello! Thank you for calling. How can I help you today?", "repeat_after_silence_seconds": 8, "edges": [ { "to_node_id": "main_menu", "condition": "User responds with a request" }, { "to_node_id": "goodbye", "condition_type": "expression", "expression": { "conditions": [ { "variable": "_silence_repeats", "operator": "gte", "value": 3 } ] } } ] } ``` What happens: * Cached audio plays instantly. * User silent for 8s, audio replays (`_silence_repeats = 1`). * Still silent, replays (`_silence_repeats = 2`). * Still silent, replays (`_silence_repeats = 3`), expression matches, transitions to `goodbye`. *** ## Example: LLM node with silence nudge The same pattern works on LLM nodes. The LLM sees `[silence]` in conversation history and rephrases without any extra prompt engineering on your part. ```json theme={"system"} { "id": "collect_email", "prompt": "Ask the user for their email address politely.", "repeat_after_silence_seconds": 10, "edges": [ { "to_node_id": "confirm", "condition": "User shared an email", "parameters": { "email": "string" } }, { "to_node_id": "goodbye", "condition_type": "expression", "expression": { "conditions": [ { "variable": "_silence_repeats", "operator": "gte", "value": 3 } ] } } ] } ``` The LLM might say "Could you share your email?" first, then "Sorry, I didn't catch that, could you tell me your email?" on the next silence, then transition to goodbye after the third. *** ## When the cache is built Audio for every static node is generated when you save the agent, using the agent's configured TTS voice. At call time the cached audio is streamed directly, no LLM or TTS call. If you change `static_message` later, re-save the agent so the cache regenerates with the new text. # Tools & Per-Node RAG Source: https://www.bolna.ai/docs/graph-agent/tools-and-rag Wire up call transfer, custom API tools, and per-node knowledge bases inside a graph agent. Graph agents support two kinds of tools (call transfer and custom HTTP) and an optional per-node retrieval-augmented generation (RAG) hook. Tools are defined globally in `api_tools` and referenced by name in node prompts. RAG is configured per node and only fires when the conversation is on that node. *** ## Call transfer Define the transfer tool once in `api_tools.tools` and `api_tools.tools_params`: ```json theme={"system"} { "key": "transfer_call", "name": "transfer_call_main", "description": "Use when the customer requests a human agent.", "pre_call_message": "Transferring you now, please hold..." } ``` ```json theme={"system"} { "tools_params": { "transfer_call_main": { "url": null, "param": { "call_sid": "%(call_sid)s", "call_transfer_number": "+91XXXXXXXXXX" }, "method": "POST" } } } ``` On the transfer node, set `function_call` to force the response LLM to pick this tool when the node is entered: ```json theme={"system"} { "id": "transfer", "prompt": "Transfer the call to a human agent.", "function_call": "transfer_call_main", "edges": [] } ``` `function_call` sets the response LLM's `tool_choice` to the named tool. The LLM still emits the call; the framework doesn't auto-invoke it. *** ## Custom API tools Define a tool the LLM can call mid-conversation, e.g. to look up an order: ```json theme={"system"} { "key": "custom_task", "name": "fetch_order_status", "description": "Fetch order status using the customer's order ID.", "parameters": { "type": "object", "properties": { "order_id": { "type": "string", "description": "Customer order ID" } } }, "pre_call_message": "Just a moment, let me check that..." } ``` ```json theme={"system"} { "tools_params": { "fetch_order_status": { "url": "https://your-api.example.com/order/status", "param": { "order_id": "%(order_id)s" }, "method": "POST", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } } ``` Reference the tool from a node prompt with the `@` prefix: ``` Call @fetch_order_status with the [order_id] collected earlier. ``` Only define tools you actually use. Every tool is visible to the LLM as a callable function, and unused tools increase the chance of accidental invocations. *** ## Per-node RAG Any node can attach its own knowledge base. When the conversation is on that node, the latest user message is used to retrieve relevant chunks from the configured vector store, and they are injected into the system prompt before the response LLM runs. ```json theme={"system"} { "id": "policy_questions", "prompt": "Answer the customer's policy question using the knowledge base.", "rag_config": { "vector_store": { "provider_config": { "vector_id": "policies_v1" } }, "similarity_top_k": 10, "temperature": 0.7, "model": "gpt-4o", "max_tokens": 150 }, "edges": [ { "to_node_id": "closing", "condition": "Customer is satisfied" } ] } ``` If the retrieval call fails, the node still responds, just without retrieved context. The error is logged but never raised to the caller. Only configure `rag_config` on nodes that actually need it. Every retrieval call adds latency, so a node that doesn't need a knowledge base shouldn't pay for one. # Fetch Agent Executions using APIs Source: https://www.bolna.ai/docs/guides/fetch-agent-executions Sample Python guide demonstrating how to query and paginate through agent executions, with support for filters, logging, and best practices. ## API Endpoint Overview ### Endpoint [Agent Executions API](/docs/api-reference/executions/get_executions) - Fetches executions for a specified `agent_id`. ### Request Details * **Path Parameters** * `agent_id` (UUID, required): The ID of your agent. * **Query Parameters** (all optional unless noted): * `page_number` (integer, default 1): Page index, starting at 1. Must be ≥ 1. * `page_size` (integer, default 20, max 50): Results per request. * **Filters**: * `status` (enum): Filter by execution status (`scheduled`, `queued`, `in-progress`, `completed`, `failed`, etc.) * `call_type` (enum): `inbound` or `outbound` * `provider` (enum): e.g., `twilio`, `plivo`, `websocket`, `web-call` * `answered_by_voice_mail` (boolean): Filter calls answered by voicemail * `batch_id` (string): Narrow results by batch * `from` (string, date-time): Filter by starting timestamp * `to` (string, date-time): Filter by ending timestamp ### Authorization Include your API key as a Bearer token in the header: ```http theme={"system"} Authorization: Bearer ``` *** ## Example Python Code ```python theme={"system"} import aiohttp import time all_executions = [] page_number = 1 agent_id = "" # your agent_id api_key = "" # your Bolna API key headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } async with aiohttp.ClientSession(headers=headers) as session: while True: ts_start = time.time() * 1000 print(f"Starting fetch for page {page_number} at {ts_start:.0f} ms") url = f"https://api.bolna.ai/v2/agent/{agent_id}/executions?page_size=50&page_number={page_number}" async with session.get(url) as resp: status_code = resp.status res = await resp.json() ts_end = time.time() * 1000 print(f"Fetched page {page_number} in {ts_end - ts_start:.2f} ms") if status_code != 200: logger.error(f"Error fetching page {page_number}: status {status_code}") break page = res.get("data", []) all_executions.extend(page) if res.get("has_more", False): page_number += 1 else: print("Completed fetching all executions") break ``` *** ## Why This Matters | Benefit | Description | | -------------------------- | --------------------------------------------------------------------------- | | **Complete History** | Retrieve full call/execution logs for audits, analytics, or dashboards. | | **Filtering & Efficiency** | Use filters to slice data by status, provider, call type, date, batch, etc. | *** ## Quick FAQs ### How do I fetch all executions for a Bolna agent? Use the endpoint `/v2/agent/{agent_id}/executions` with pagination and keep fetching while `has_more == true`. ### Can I filter executions by provider or call type? Yes, you can use query parameters like `provider=twilio`, `call_type=inbound`, `status=completed` and more. ### What is the max page size? `50` results per page is the maximum allowed. Default is `20`. ### How are extracted fields returned? In your response under `extracted_data`, with your custom JSON fields—based on your Extraction prompt setup. *** # Writing Prompts in Non-English Languages Source: https://www.bolna.ai/docs/guides/writing-prompts-in-non-english-languages Write multilingual prompts in native scripts for Bolna Voice AI. Ensure natural pronunciation & accurate responses in English, Hindi, Tamil, Telugu & more. Bolna Voice AI agents have multilingual support and can have conversations in serveral languages ([see list of all support languages](/docs/customizations/multilingual-languages-support)). To ensure **natural speech output**, it is important to write your prompts in the **native script** of the target language, rather than phonetically using the English alphabet. ## Multilingual setup Bolna supports multilingual configurations. You can add multiple languages to a single agent, set one as primary, and write a separate prompt for each. > Example configurations: > > * English (Primary) + Hindi > * English (Primary) + Hindi + Dutch > * English (Primary) + French + Spanish See the [Multilingual Support](/docs/customizations/multilingual-languages-support) guide for full setup details. ## Prompting for non-english language If you want to switch languages dynamically you can instruct the prompt to follow the customer's language. For example, for Spanish you may write: > You will keep your sentences short and crisp. You will never reply with more than 2 sentences at a time. > You will stick to context throughout. You must speak in Spanish but if the customer wishes to communicate in English, you will immediately shift your language to English and then remain in english. > Generate the text response in the same language as the customer. *** ## Write the prompt in the native script Using the correct script: * Enables more accurate pronunciation * Helps the AI identify the intended language * Improves contextual understanding and tone * Prevents misclassification as English ## Tips for Writing in native scripts * Use Google Input Tools or built-in language keyboards on your phone/laptop. * For European languages, make sure to include accented characters (like é, ñ, ü, ¿, ç, etc.). * Double-check spellings and punctuation using tools like [Google Translate](https://translate.google.com/), but avoid relying on it for full sentence correctness. ## Examples of prompts in native scripts ❌ Incorrect > Bonjour! Comment ca va? Nous allons commencer l'entretien maintenant. ✅ Correct > Bonjour ! Comment ça va ? Nous allons commencer l’entretien maintenant. Notice the accents (ç, é, ’). These help the AI pronounce words like a native speaker. ❌ Incorrect > Hola! Como estas? Vamos a comenzar la entrevista ahora. ✅ Correct > ¡Hola! ¿Cómo estás? Vamos a comenzar la entrevista ahora. Accents and inverted punctuation (¿, ¡) matter for tone and pronunciation accuracy. ❌ Incorrect > Namaste! Aap kaise ho? Ham aapka interview lene wale hain. ✅ Correct > नमस्ते! आप कैसे हैं? हम आपका इंटरव्यू लेने वाले हैं। Accents and inverted punctuation (¿, ¡) matter for tone and pronunciation accuracy. *** ## Common Mistake to Avoid Don’t write in "English-style" phonetic spelling for non-English prompts. > ❌ Kaise ho?
> ✅ कैसे हो? > ❌ Como estas?
> ✅ ¿Cómo estás? ## FAQs You can add multiple languages to a single agent. Set one as primary and add secondary languages as needed. Each language gets its own prompt tab in the [Agent Tab](/docs/agent-setup/agent-tab). Bolna agents can dynamically switch between any of the configured languages. Use the **Language Switching Instructions** field in the [Agent Tab](/docs/agent-setup/agent-tab) to define when the agent should switch. If a customer speaks a language not configured on the agent, it will fall back to the primary language. It depends on your audience and brand tone. Ensure your prompts reflect the appropriate politeness level (e.g., “vous” vs. “tu” in French, or “आप” vs. “तुम” in Hindi) for a consistent and professional experience. Use Bolna's Preview Voice feature in \[Voice Labs]\[[https://platform.bolna.ai/voices](https://platform.bolna.ai/voices)] to test generated responses before finalizing your prompts. Adjust words and punctuation if needed for more natural pronunciation. # Hangup and Disconnect Bolna Voice AI calls Source: https://www.bolna.ai/docs/hangup-calls Discover methods to disconnect live Bolna Voice AI calls. Implement time-based hangups, custom prompts, and personalized messages for seamless call termination. ## How to Configure Call Hangup Bolna offers multiple ways to intelligently end voice calls based on user behavior and conversation context. *** ## Hangup Methods Set a `silence time` threshold (in seconds) for detecting user inactivity. If no audio is detected for the specified duration, the call disconnects automatically, preventing unnecessary call durations. Bolna Voice AI call hangup settings showing silence time threshold configuration Add a custom prompt that evaluates whether the conversation is complete. The LLM assesses the conversation context and decides when to end the call. Custom prompt configuration for intelligent call hangup in Bolna Voice AI Since this is prompt-based, it may not be 100% accurate. Tune the prompt based on your use case for best results. **Example hangup prompt:** ```text hangup prompt example theme={"system"} You are an AI assistant determining if a conversation is complete. A conversation is complete if: 1. The user explicitly says they want to stop (e.g., "That's all," "I'm done," "Goodbye," "thank you"). 2. The user seems satisfied, and their goal appears to be achieved. 3. The user's goal appears achieved based on the conversation history, even without explicit confirmation. If none of these apply, the conversation is not complete. ``` *** ## Personalized Hangup Message Add a closing message spoken by the agent as the final message before the call ends. This accepts [dynamic context variables](/docs/using-context#custom-variables) using `{}` for a personalized closing statement. Hangup message configuration showing custom closing statement with dynamic context variables Use variables like `{first_name}` in your hangup message for a personal touch, e.g., *"Thank you , have a great day!"* *** ## Related Features Set maximum call duration as a safety net Monitor call statuses in real time Understand who ended the call and why # Importing your voices to use with Bolna Voice AI Source: https://www.bolna.ai/docs/import-voices Easily import voices from multiple providers like ElevenLabs, Cartesia including custom voices into Bolna for seamless voice agent personalization. ## What is Voice Importing? Voice importing allows you to bring voices from external providers (like ElevenLabs, Cartesia) into your Bolna workspace. This enables you to use provider-specific voices or custom voices you've created with those providers in your Bolna Voice AI agents. *** ## How to Import Voices Go to your agent in the Bolna Playground and click the **Audio** tab. Scroll down to the **Text-to-Speech** section and click **Add Voice +**. Bolna Audio Tab showing the Text-to-Speech section with Sarvam provider and Add Voice button Choose your voice provider from the list Voice provider selection screen Provide the **Voice ID** you want to import Voice ID input field Toggle to import custom voices from your own connected account Connected account toggle Click **"Import"** - your voice will be available within seconds! Voice import confirmation screen Need help finding Voice IDs? Check your voice provider's dashboard or [contact support](mailto:support@bolna.ai). *** ## Next Steps Create brand-specific voice identities Configure voice settings in the Playground Browse voice provider integrations Set up multilingual agents with imported voices # Home Source: https://www.bolna.ai/docs/index Bolna — the AI Voice API for India. Deploy multilingual conversational Voice AI agents to automate calls, qualify leads, boost sales, support customers, & more.

Bolna Documentation

Create conversational voice agents to qualify leads, boost sales, automate support, streamline hiring, and more.

# Routing Calls Through Indian Servers Source: https://www.bolna.ai/docs/indian-server-configuration Configure your voice agent to process calls on Indian servers for data residency compliance and lower latency. ## Overview If your business requires data residency in India or you want to achieve the lowest possible latency for calls to Indian phone numbers, you can configure your agent to route calls through Bolna's Indian servers. This guide explains the configuration requirements to ensure your calls are processed entirely on Indian infrastructure. ## Requirements To route calls through Indian servers, your agent configuration must meet **all** of the following requirements: ### 1. Telephony Provider Use **Plivo** as your telephony provider. Twilio is not supported for Indian server routing. If you use Twilio, calls will be processed on US servers. ### 2. Transcriber (Speech-to-Text) Use one of these transcription providers: * Deepgram * Azure * Sarvam * ElevenLabs * Smallest **If using Deepgram**, additional requirements apply: | Requirement | Supported Values | | ------------ | ----------------------------------------------------------------------------------- | | **Model** | `nova-2`, `nova-3`, and their variants (e.g., `nova-2-phonecall`, `nova-3-general`) | | **Language** | `hi` (Hindi), `multi-hi` (Multilingual Hindi), `en-IN` (Indian English) | ### 3. Synthesizer (Text-to-Speech) Use one of these voice synthesis providers: * ElevenLabs * Sarvam * Azure TTS * Cartesia Some ElevenLabs voices may not be available in the India region. If you encounter issues, try selecting a different voice. ### 4. LLM (Language Model) Use one of these LLM providers: * Azure OpenAI ### 5. Provider API Keys Use Bolna's default provider integrations. Do not connect your own API keys for the transcriber, synthesizer, or LLM providers. If you connect your own API keys for any provider (transcriber, synthesizer, or LLM), calls will automatically route through US servers regardless of other configuration settings. ## Quick Checklist Before deploying your agent for Indian server routing, verify: | Component | Requirement | Status | | ----------------- | ------------------------------------------------ | -------- | | Telephony | Plivo | Required | | Transcriber | Deepgram, Azure, Sarvam, ElevenLabs, or Smallest | Required | | Deepgram Language | `hi`, `multi-hi`, or `en-IN` (if using Deepgram) | Required | | Synthesizer | ElevenLabs, Sarvam, Azure TTS, or Cartesia | Required | | LLM | Azure OpenAI | Required | | Custom API Keys | None connected | Required | ## Troubleshooting If your calls are not routing through Indian servers, check the following: 1. **Telephony Provider**: Ensure you're using Plivo, not Twilio 2. **Deepgram Language**: If using Deepgram, verify the language is set to `hi`, `multi-hi`, or `en-IN` 3. **Custom API Keys**: Check that you haven't connected your own API keys for any provider in the Providers section 4. **Provider Selection**: Verify all providers (transcriber, synthesizer, LLM) are from the supported lists above ## Related Resources * [Supported Telephony Providers](/docs/supported-telephony-providers) * [Plivo Setup Guide](/docs/plivo) * [Understanding Latency Metrics](/docs/call-latencies) # Bolna Voice AI Integrations Source: https://www.bolna.ai/docs/integrations Integrate Bolna Voice AI with tools like Twilio, Plivo, OpenAI, ElevenLabs, Deepgram, and Zapier to enable seamless voice automation and workflows. ## Telephony Integrations } href="/twilio-connect-provider" > Connect your Twilio phone numbers with Bolna } href="/plivo-connect-provider" > Connect your Plivo phone numbers with Bolna } href="/exotel-connect-provider" > Connect your Exotel phone numbers with Bolna } href="/vobiz-connect-provider" > Connect your Vobiz phone numbers with Bolna ## Model Integrations } href="https://platform.bolna.ai/auth/openai" > Connect your OpenAI account with Bolna } href="https://github.com/deepseek-ai/awesome-deepseek-integration/?tab=readme-ov-file#others" > Connect your Deepseek account with Bolna } href="https://platform.bolna.ai/auth/elevenLabs" > Connect your ElevenLabs account with Bolna } href="https://platform.bolna.ai/auth/cartesia" > Connect your Cartesia account with Bolna } href="https://platform.bolna.ai/auth/deepgram" > Connect your Deepgram account with Bolna } href="https://platform.bolna.ai/auth/azure" > Connect your Azure account with Bolna ## External Integrations } href="https://zapier.com/apps/bolna/integrations" > Connect your Zapier account with Bolna } href="https://www.make.com/en/integrations/bolna" > Connect your Make.com account with Bolna } href="https://platform.bolna.ai/auth/calcom" > Connect your Cal.com account with Bolna } href="https://viasocket.com/integrations/bolna" > Connect your viaSocket account with Bolna # Bolna AI: Create and deploy Voice AI Agents Source: https://www.bolna.ai/docs/introduction Build and deploy conversational Voice AI agents with Bolna. Qualify leads, automate support, and book appointments through natural phone conversations. ## See Bolna in Action