Skip to content

Voice

Bland
API integration

Ship Voice features without building the integration. Full Bland API access via Proxy and 130+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Bland

Use Cases

Why integrate with Bland

Common scenarios for SaaS companies building Bland integrations for their customers.

01

Speed-to-lead outbound dialing for vertical CRMs

Let your CRM customers auto-dial new inbound leads within seconds using Bland's AI voice agents. Trigger calls on lead creation, pass dynamic variables into a pathway, and sync qualification data back to the record.

02

AI receptionist for clinic and field-service platforms

Give your SMB customers a 24/7 inbound voice agent that books, cancels, and reschedules appointments against your platform's calendar. Purchase numbers, attach personas, and wire custom tools to your own APIs.

03

Automated post-call CRM data entry

Turn every call into structured records by running Bland's call analysis against completed conversations and mapping typed answers to your platform's custom fields. Eliminate manual note-taking for sales and support teams.

04

Voice channel for helpdesk and ticketing SaaS

Add a Tier 1 voice triage layer that resolves common issues using a knowledge base synced from your help center, then hands off to a human agent with full transcript context when needed.

05

White-labeled voice agents for agency platforms

Let agencies and multi-tenant SaaS provision branded personas and cloned voices per end-customer, so each workspace gets a differentiated AI caller identity managed from your product.

What You Can Build

Ship these features with Truto + Bland

Concrete product features your team can ship faster by leveraging Truto’s Bland integration instead of building from scratch.

01

One-click Bland account connect

Let your users connect their Bland workspace through Truto's managed auth so your app can dispatch calls and read call data on their behalf.

02

Event-driven outbound call dispatcher

Fire calls from any workflow trigger by sending a phone number and dynamic pathway variables to Bland's simple pathway endpoint.

03

Structured call outcome sync

Run question-and-answer analysis against completed calls and write typed results, corrected transcripts, and recordings into your contact or deal timeline.

04

Post-call webhook pipeline

Register post-call webhooks per customer, ingest completion events into your platform, and replay missed deliveries when your endpoint recovers.

05

Live call monitoring and transfer

Ship a supervisor view that lists active calls, streams live audio via a mint stream token, and lets managers transfer the AI call to a human rep mid-conversation.

06

Contact memory hydration from your database

Resolve callers to Bland contacts and push structured facts (tier, open tickets, deal stage) so the AI has full CRM context before it speaks.

SuperAI

Bland AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

bland_calls_send_simple_pathway

Send a call using a conversational pathway in Bland AI. The phone number is dialed and the specified pathway guides the conversation. Returns: status, call_id. Required: phone_number, pathway_id. Country code defaults to +1 if not specified; use E.164 format for best results.

bland_calls_analyze

Analyze a completed call with AI in Bland AI using a goal and a set of questions. Returns: status, message, answers, credits_used, metadata. Required: call_id, goal, questions. Each question is an array of [question_text, expected_answer_type]; unanswerable questions default to null.

bland_calls_stop

Stop an active call in Bland AI by call_id. Returns: status, message. Required: call_id.

bland_calls_listen

Start a live listen session for an active call in Bland AI, returning a WebSocket URL for real-time audio streaming. Returns: status, data, errors. Required: call_id. Live listen must be enabled in organization preferences and the call must be in active status.

bland_calls_stop_all_active

Stop all active calls in Bland AI for the authenticated organization. Returns: status, message, num_calls. The operation is asynchronous and may take some time to complete.

bland_calls_transfer_active

Transfer an active Bland call to a different phone number while the call is in progress. Returns: data, errors. Required: call_id, transfer_number. Only calls in queue_status "started" are eligible.

list_all_bland_calls

List Bland calls with optional filtering by date range, phone number, status, batch, and campaign. Returns: call_id, created_at, call_length, to, from, completed, queue_status, error_message, answered_by, batch_id.

bland_calls_list_active

List all currently active (queued and in-progress) Bland calls. Returns: call_id, user_id, from, to, objective, pathway_id, start_time, international, status, timestamp.

get_single_bland_call_by_id

Get detailed information, metadata, and transcripts for a specific Bland call by id. Returns the full call object including call_id, to, from, status, transcripts, summary, created_at, and price. Required: id.

bland_calls_get_event_stream

Get the stream of events that occurred during a specific Bland call. Returns: level, message, category, call_id, timestamp. Required: call_id.

bland_calls_get_recording

Retrieve the audio recording stream for a Bland call by call_id. Returns: status, message. The audio format defaults to WAV. Required: call_id.

bland_calls_get_corrected_transcript

Get the corrected transcript from a Bland call's recording with enhanced speaker diarization, speaker labels, and confidence scores. Returns: corrected, status, message, aligned, original. Required: call_id. The aligned field is deprecated; use corrected instead.

bland_calls_get_transcript_stream_token

Generate a short-lived WebSocket URL for streaming a Bland call's post-transfer transcript. Returns: data, errors. Required: call_id. The call must have been created with include_post_transfer_transcript set to true. The URL credential expires in 5 minutes.

list_all_bland_postcall_webhooks

List post call webhooks in Bland. Returns: call_id, payload, url, user_id, created_at, metadata.

create_a_bland_postcall_webhook

Create and send post call webhooks for one or more calls in Bland. Returns: metadata. Required: call_ids, webhook_url. Webhooks are sent immediately; returns an error if a call already has a webhook configured.

bland_postcall_webhooks_resend

Resend post call webhooks for one or more calls in Bland. Returns: metadata. Required: call_ids. Can only resend webhooks that were previously sent when calls completed; webhooks are re-sent to the same URL.

bland_account_get_details

Get the authenticated account's details in Bland, including account status, billing balance, and total call count. Returns: status, billing, total_calls.

list_all_bland_voices

List all voices available to your Bland account, including curated defaults, cloned voices, and library additions. Returns: id, name, description, public, tags, user_id, voice_id, service, finetuned, is_creator_voice, ratings, total_ratings, average_rating, my_rating, creator_display_name.

get_single_bland_voice_by_id

Get a single Bland voice by id (accepts UUID or curated voice name). Returns: id, status, message. Required: id.

bland_voices_get_settings

Get synthesis defaults and valid tuning ranges for a Bland voice you own. Returns: consistency, expressiveness, service, limits, boost_language_consistency. Required: voice_id.

bland_voices_update_settings

Update synthesis defaults on a Bland voice you own — set consistency, expressiveness, or boost_language_consistency. Returns: consistency, expressiveness, service, boost_language_consistency. Required: voice_id. At least one body field must be provided.

bland_voices_rename

Rename a voice clone in your Bland library. Returns: name, voice_id. Required: voice_id, name. Only org-owned voices can be renamed; default and shared voices return 403. Name must be 1-30 characters and unique within your library.

bland_voices_rate

Rate a voice in the Bland library with a 1-5 star rating. Returns: status, total_ratings, average_rating. Required: voice_id, rating. Each caller can have at most one active rating per voice; sending a new rating overwrites the previous one.

delete_a_bland_voice_by_id

Soft-delete a voice from your Bland library. Returns: status, message. Required: id. Only org-owned voices can be deleted; default, unadded public-library, and other-org voices return 400.

bland_voices_check_name_availability

Check whether a proposed voice name is available in your Bland org's library before cloning. Returns: status, result, message. Required: name. Names are scoped per org and case-insensitive.

bland_voices_list_shared

List publicly-shared voices in the Bland library catalog for discovery and voice-picker UIs. Returns: id, name, description, service, is_creator_voice, ratings, rating_count, rating_avg, trending_score, tags, created_at, public, creator_display_name, creator_fee_cents_per_1k, creator_fee_cents_per_10k.

bland_voices_add_library

Add a shared library voice from the Bland voice library to your org. Returns: status, message, voice. Required: add_id. Throttled to 30 add operations per minute per org.

bland_voices_clone

Clone a voice in Bland from one or more audio samples using the BTTS V3 (default) or V2 engine. Returns: voice_id, name. Required: name, audio_samples. Each engine requires exactly 1 audio file (~10 seconds, max 10 MB). gender accepts male or female.

bland_voices_bulk_update

Update default consistency, expressiveness, or boost config on a Bland voice clone. Returns: status, message, voice. Required: voice_id.

bland_tts_speak

Synthesize text into a WAV audio file using a Bland TTS voice in Bland. Deprecated — new integrations should use Synthesize Speech (v2). Set stream: true to receive audio as a chunked response. Returns binary WAV audio (Content-Type: audio/x-wav) with x-latency and x-cost headers. Required: text, voice_id.

bland_tts_stream

Stream synthesized speech audio to the client as it is generated using Transfer-Encoding: chunked in Bland. Deprecated — new integrations should use Synthesize Speech (v2). Optimized for low time-to-first-byte (live previews, voice assistants, IVRs). Returns chunked binary WAV audio (Content-Type: audio/x-wav) with a placeholder WAV header followed by PCM16 data. Required: text, voice_id.

bland_tts_mint_stream_token

Mint a short-lived JWT scoped to your Bland account for browser clients to open the Stream Speech WebSocket without exposing the long-lived API key. Deprecated — new integrations should use Synthesize Speech (v2). Returns: data, errors. Tokens are valid for 5 minutes.

list_all_bland_tts_generations

List TTS generations in Bland. Returns: id, org_id, user_id, text, voice_id, output_format, latency_ms, cost, created_at. Optional filter: voice_id.

get_single_bland_tts_generation_by_id

Get a single TTS generation in Bland by id. Returns: id, org_id, user_id, text, voice_id, output_format, audio_data, latency_ms, cost, created_at. Required: id. Pass format=audio to receive raw WAV binary instead of metadata JSON.

list_all_bland_tts_models

List Bland TTS models available for synthesis and voice cloning. Returns: model_id, display_name, description, sample_rates, max_characters, can_clone, languages, is_recommended. Results are cached for up to 5 minutes.

list_all_bland_voice_samples

List training samples attached to a Bland voice clone. Returns: id, voice_id, transcription, duration_seconds, audio_data, created_at. Required: voice_id. Only org-owned voices return samples; default voices return an error and V2/V3 voices return an empty array.

bland_voice_samples_add

Append audio training samples to a Bland voice clone, retraining the voice on the expanded sample set. Returns: status, samples. Required: voice_id, audio_samples. Only BTTS V1 voices accept additional samples (max 5 total); V2 and V3 voices do not.

get_single_bland_voice_sample_by_id

Get a single training sample for a Bland voice clone as raw WAV audio by default, or JSON metadata with base64 audio when format is json. Returns: id, voice_id, transcription, duration_seconds, audio_data, created_at. Required: voice_id, id.

bland_voice_samples_bulk_update

Update transcribed text for one or more training samples on a Bland voice clone. Returns: samples. Required: voice_id, samples.

bland_voice_samples_bulk_delete

Remove training samples from a Bland voice clone and retrain against the remaining samples. Returns: status, samples. Required: id, sample_ids. Removing all samples makes the voice unusable for synthesis.

list_all_bland_pathways

List all conversational pathways in Bland. Returns: name, description, nodes, edges.

get_single_bland_pathway_by_id

Get a single conversational pathway in Bland by id. Returns: name, description, nodes, edges. Required: id.

bland_pathways_get_session_token

Get a pathway session token in Bland for pathway chat access. The token expires after 1 hour. Returns: token, expires_at.

create_a_bland_pathway

Create a new conversational pathway in Bland. Returns: status, pathway_id. Required: name.

update_a_bland_pathway_by_id

Update a conversational pathway's fields in Bland by id, including name, description, nodes, and edges. Returns: status, message, pathway_data. Required: id.

delete_a_bland_pathway_by_id

Delete a Bland pathway by id. Returns: status, message. Required: id.

bland_pathways_generate

Generate a Bland pathway from a prompt. Queues generation asynchronously and returns a jobId for polling via the generation status endpoint. Returns: jobId. Required: input_prompt. Prompt must be at least 100 characters and 8000 or fewer for non-enterprise organizations.

bland_pathways_get_generation_status

Get the status of a Bland pathway generation job. Returns: ready, pathway_id, error. Required: statu_id. Poll until ready is true; pathway_id is present on success, error is present on failure.

create_a_bland_pathway_chat

Create a new pathway chat instance in Bland for sending and receiving messages. Returns: chat_id, message, variables. Required: pathway_id.

bland_pathway_chat_send_message

Send a message to an existing pathway chat in Bland. Returns: chat_id, assistant_responses, current_node_id, current_node_name, chat_history, pathway_id, pathway_version, use_candidate_model, variables, completed. Required: chat_id.

bland_pathway_chat_get_history

Get the conversation history for a pathway chat in Bland. Returns an array of message objects, each containing role and content. Required: chat_id.

list_all_bland_pathway_versions

List all versions of a specific Bland pathway. Returns: id, version_number, created_at, name, is_latest. Required: pathway_id.

get_single_bland_pathway_version_by_id

Get a specific Bland pathway version by id. Returns: id, created_at, name, nodes, edges, version_number, is_latest. Required: pathway_id, id. Use 0 for id to retrieve the live pathway.

bland_pathway_versions_promote

Promote a Bland pathway version to staging or production. Returns: message. Required: pathway_id, version_id. Environment defaults to production.

create_a_bland_pathway_version

Create a new version of a Bland pathway with a name, nodes, and edges. Returns: created_at, id, name, version_number. Required: pathway_id, name, nodes, edges.

update_a_bland_pathway_version_by_id

Update a specific Bland pathway version's name, nodes, and edges. Returns: status, message. Required: pathway_id, id, name, nodes, edges.

delete_a_bland_pathway_version_by_id

Delete a specific version of a Bland pathway. Returns: status, message. Required: pathway_id, id.

list_all_bland_pathway_folders

List all pathway folders in Bland. Returns: id, name, parent_folder_id. Folders can be nested via parent_folder_id.

bland_pathway_folders_list_pathways

List pathways within a specific pathway folder in Bland. Returns: id, name, description, created_at. Required: folder_id.

create_a_bland_pathway_folder

Create a new pathway folder in Bland. Returns: folder_id, name, parent_folder_id. Required: name.

delete_a_bland_pathway_folder_by_id

Delete a pathway folder in Bland by id. Returns: folder_id. Required: id.

update_a_bland_pathway_folder_by_id

Update a pathway folder in Bland by id. Returns: folder_id, name, parent_folder_id. Required: id, name.

bland_pathway_folders_move_pathway

Move a pathway to a different folder or to the root level in Bland. Returns: pathway_id, old_folder_id, new_folder_id. Required: pathway_id.

bland_knowledge_bases_upload_file

Upload a file to create a knowledge base in Bland for providing contextual information to AI agents. Returns: id, name, description, status, type, created_at, updated_at, file. Required: type, file. Supported formats include PDF, Word documents, and text files.

list_all_bland_knowledge_bases

List all knowledge bases in your Bland organization with pagination support. Returns: id, name, description, status, type, created_at, updated_at, file. Max 100 items per page.

get_single_bland_knowledge_base_by_id

Get detailed information about a specific Bland knowledge base by id, including its current status, metadata, and file information. Returns: id, name, description, status, type, created_at, updated_at, file. Required: id.

update_a_bland_knowledge_base_by_id

Update the name and/or description of an existing Bland knowledge base. Only metadata is modified, not the knowledge base content. Returns: id, name, description, status, type, created_at, updated_at, file. Required: id.

delete_a_bland_knowledge_base_by_id

Soft delete a Bland knowledge base by id, marking its status as DELETED. The data is retained but becomes inaccessible. Returns: success, message, knowledge_base_id. Required: id.

bland_knowledge_bases_discover_sitemap_urls

Discover available URLs from a website's sitemap in Bland. Useful for finding all pages before creating a web scraping knowledge base. Returns: urls, sitemap_url. Required: url.

bland_knowledge_bases_chat

Query a Bland knowledge base using natural language with conversational message history. Returns: response, context, sources. Required: messages, knowledge_base_id.

bland_numbers_purchase

Purchase a new inbound phone number in Bland ($15/mo). Returns the created number object including phone_number, created_at, prompt, webhook, voice_id, max_duration, record, and reduce_latency. Provide either area_code with optional country_code, or an exact phone_number to override area_code.

update_a_bland_number_by_id

Update an inbound number's agent settings and prompt in Bland. Returns: created_at, phone_number, prompt, webhook, voice_id, dynamic_data, max_duration, interruption_threshold, first_sentence, reduce_latency, transfer_phone_number, voice_settings, record, id, blocked_number, is_global, inbound_number, org_id, reason, is_active, updated_at. Required: phone_number, prompt. Setting pathway_id…

bland_numbers_update_label

Update the label for an inbound phone number in Bland. Returns: message, phone_number, label. Required: phone_number, newLabel. Max label length is 150 characters; set to an empty string to clear the label.

list_all_bland_numbers

List all inbound phone numbers configured for your Bland account. Returns: created_at, phone_number, prompt, webhook, voice_id, dynamic_data, max_duration, interruption_threshold, first_sentence, reduce_latency, transfer_phone_number, voice_settings, record, id, blocked_number, is_global, inbound_number, org_id, reason, is_active, updated_at.

get_single_bland_number_by_id

Get settings for a specific inbound phone number in Bland. Returns: created_at, phone_number, prompt, webhook, voice_id, dynamic_data, max_duration, interruption_threshold, first_sentence, reduce_latency, transfer_phone_number, voice_settings, record. Required: phone_number.

bland_numbers_create_session

Create an inbound session token in Bland AI that can be used to pass variables to inbound calls via the x-bland-session-id SIP header. Returns: token, expires_at. Required: phone_number.

bland_blocked_numbers_create_rules

Create block rules in Bland to prevent specific phone numbers from reaching your inbound numbers. Returns: created_count, blocks. Required: numbers, is_global. Maximum 10 numbers per request; is_global and inbound_number are mutually exclusive.

bland_blocked_numbers_list_rules

List block rules in Bland, optionally filtered by inbound number or active status. Returns: blocks, total_count, filters. If inbound_number is omitted, only global block rules are returned. active_only defaults to true.

bland_blocked_numbers_get_rule

Get a single block rule in Bland by its ID. Returns: id, blocked_number, is_global, inbound_number, org_id, reason, is_active, created_at, updated_at. Required: blocked_number_id.

bland_blocked_numbers_delete_rule

Delete a block rule in Bland by its ID. Returns: message, deleted_block_id. Required: blocked_number_id.

bland_blocked_numbers_edit_rule

Update an existing block rule in Bland, modifying its reason or active status. Returns: id, blocked_number, is_global, inbound_number, org_id, reason, is_active, created_at, updated_at. Required: blocked_number_id. Only reason and is_active can be updated; phone number and scope are immutable after creation.

create_a_bland_widget

Create a new chat/voice widget in Bland. Returns the created widget including id, pathway_id, agent_id, allowed_domains, messages_per_minute, config, webhook_url, created_at, and updated_at. Required: allowed_domains, messages_per_minute, config. Either pathway_id or agent_prompt must be provided.

list_all_bland_widgets

List all widgets associated with your Bland account. Returns each widget's id, pathway_id, agent_id, agent_prompt, allowed_domains, messages_per_minute, config, webhook_url, created_at, and updated_at.

get_single_bland_widget_by_id

Get a single Bland widget by id. Returns the widget object including id, pathway_id, agent_id, agent_prompt, allowed_domains, messages_per_minute, config, webhook_url, created_at, and updated_at. Required: id.

update_a_bland_widget_by_id

Update an existing Bland widget by id. Returns: id, pathway_id, agent_id, allowed_domains, messages_per_minute, config, webhook_url, created_at, updated_at. Required: id. pathway_id must be defined if agent_prompt is null and vice versa.

bland_widgets_list_threads

List conversation threads for a Bland widget. Returns: id, created_at, ended_at, live_agent_handoff_at, visitor_id, messages, pathway_id, agent_id, allowed_domains, messages_per_minute, config, updated_at. Required: widget_id.

bland_widgets_send_live_agent_message

Send a live agent message or end a conversation in a Bland widget thread. For MESSAGE requests, returns the created message (id, content, sender_type, created_at). For END_CONVERSATION requests, returns the updated thread (id, ended_at, live_agent_handoff_at, visitor_id, language). Required: widget_id, thread_id, type.

list_all_bland_contacts

List Bland contacts with pagination. Returns: id, org_id, name, metadata, created_at, updated_at, identifiers, memories, contact, created. Max 200 per page.

bland_contacts_find

Find a Bland contact by phone_number, email, or external_id. Returns: id, org_id, name, metadata, created_at, updated_at, identifiers, memories, contact, created. At least one of phone_number, email, or external_id must be provided.

get_single_bland_contact_by_id

Get a single Bland contact by id. Returns: id, org_id, name, metadata, created_at, updated_at, identifiers, memories. Required: id.

bland_contacts_resolve

Find or create a Bland contact by identifiers, optionally scoping memory to a persona or agent. Returns: contact, created. At least one of phone_number, email, or external_id must be provided.

update_a_bland_contact_by_id

Update a Bland contact's name, email, external_id, or metadata by id. Returns: id, org_id, name, metadata, created_at, updated_at. Required: id.

bland_contacts_merge

Merge a duplicate contact into a primary contact in Bland, transferring all calls, SMS conversations, and memory data from the duplicate to the primary. Returns: id, org_id, name, metadata, created_at, updated_at. Required: primary_contact_id, duplicate_contact_id. Cannot merge a contact with itself or contacts from different organizations.

bland_memory_create_contact_memory

Create or retrieve a contact memory in Bland AI — if a memory already exists for the contact, the existing record is returned instead. Returns the memory object (id, org_id, contact_id, summary, facts, recent_messages, open_items, memory_history, created_at, updated_at) and a created flag. Required: contact_id. Either persona_id or agent_number must be provided.

bland_memory_get_contact_memory

Get a contact memory in Bland AI by contact_id. Returns: id, org_id, contact_id, persona_id, agent_number, summary, facts, recent_messages, open_items, memory_history, created_at, updated_at, memory, created. Required: contact_id.

bland_memory_list_messages

List recent messages for a contact memory in Bland AI. Returns: memory, created. Required: contact_id.

bland_memory_update_facts

Update structured facts for a contact memory in Bland AI. New keys are added and existing keys are updated. Returns: id, org_id, contact_id, persona_id, agent_number, summary, facts, recent_messages, open_items, memory_history, created_at, updated_at, memory, created. Required: contact_id, facts.

bland_memory_get_context

Get the memory context for a contact in Bland, including recent cross-channel messages, a rolling summary, contact facts, extracted entities, and open items. Returns: contact_id, recentMessages, summary, contactFacts, entities, openItems. Required: contact_id. Either persona_id or agent_number must also be provided.

bland_memory_get_changes

Get memory change history for a call or SMS conversation in Bland, showing the initial memory state, changes made during the interaction, and a historical record of updates. Returns: initial_memory, changes, memory_history, memory, created. Required: one of call_id or conversation_id.

bland_memory_reset

Permanently reset all memory data (recent messages, summary, facts, entities) for a contact/persona pair in Bland. This action is irreversible. Returns: success. Required: contact_id. Either persona_id or agent_number must also be provided.

bland_memory_enable

Enable or disable memory for a pathway or persona in Bland, automatically refreshing entity schemas when enabled. Returns: message. Required: memory_enabled. Exactly one of pathway_id (with version_number) or persona_id (with version_id) must be provided.

bland_memory_bulk_update

Update the conversation summary for a contact memory in Bland AI. The new summary replaces the existing one. Returns: id, org_id, contact_id, persona_id, agent_number, summary, summary_updated_at, facts, recent_messages, open_items, memory_history, created_at, updated_at, memory, created. Required: contact_id, summary.

list_all_bland_tools

List custom tools in Bland. Returns each tool with tool_id, label, tool (configuration object with name, description, url, method, body, input_schema, response, timeout), and a public flag.

get_single_bland_tool_by_id

Get a single custom tool by id in Bland. Returns: tool_id, label, tool, public. Required: id.

create_a_bland_tool

Create a custom tool in Bland. Returns: status, tool_id. Required: name, description, url.

update_a_bland_tool_by_id

Update an existing custom tool by id in Bland. Returns: status, tool_id. Required: id.

delete_a_bland_tool_by_id

Delete a custom tool by id in Bland. Returns: status, message. Required: id.

list_all_bland_widget_custom_components

List Bland widget custom components. Returns: id, org_id, widget_id, pathway_id, pathway_node, width, height, variables, iframe_url, created_at, updated_at.

create_a_bland_widget_custom_component

Create a Bland widget custom component. Returns: id, created_at, updated_at. Required: widget_id, pathway_id, pathway_node, width, height, variables, iframe_url.

update_a_bland_widget_custom_component_by_id

Update a Bland widget custom component by id. Returns: id, org_id, widget_id, pathway_id, pathway_node, width, height, variables, iframe_url, created_at, updated_at. Required: id.

delete_a_bland_widget_custom_component_by_id

Delete a Bland widget custom component by id. Returns an empty 204 response on success. Required: id.

bland_accounts_create_encrypted_key

Create an encrypted key in Bland for BYOT (Bring Your Own Twilio) integration. The generated key can be passed as the `encrypted_key` header on call endpoints to send calls from your own Twilio account. Returns the created encrypted key object.

list_all_bland_personas

List all personas in your Bland organization. Returns: id, name, role, description, tags, image_url, created_at, updated_at, deleted_at, user_id, current_production_version_id, current_draft_version_id, inbound_numbers, current_production_version, current_draft_version. Max 100 per page.

get_single_bland_persona_by_id

Get a single Bland persona by id. Returns: id, created_at, updated_at, deleted_at, success, message. Required: id.

create_a_bland_persona

Create a new persona in Bland with optional call configuration, prompts, tools, pathway conditions, and knowledge base attachments. Returns: id, name, role, description, tags, image_url, created_at, updated_at, deleted_at, user_id, current_production_version_id, current_draft_version_id, current_production_version, current_draft_version. Required: name.

delete_a_bland_persona_by_id

Delete a Bland persona by id. Returns: success, message. Required: id. A persona currently in use by phone numbers cannot be deleted until it is removed from those numbers.

list_all_bland_persona_versions

List all versions of a Bland AI persona, ordered by version number (newest first). Returns: id, persona_id, version_type, version_number, orchestration_prompt, personality_prompt, pathway_conditions, kb_ids, call_config, default_tools, promoted_from_version_id, promoted_at, promoted_by, created_at, updated_at. Required: persona_id.

get_single_bland_persona_version_by_id

Get a specific version of a Bland AI persona by id. Returns: id, persona_id, version_type, version_number, orchestration_prompt, personality_prompt, pathway_conditions, kb_ids, call_config, default_tools, promoted_from_version_id, promoted_at, promoted_by, created_at, updated_at. Required: persona_id, id.

list_all_bland_prompts

List all prompts in Bland. Returns: id, prompt, name, last_updated.

get_single_bland_prompt_by_id

Get a single prompt by id in Bland. Returns: id, prompt, name, last_updated. Required: id.

create_a_bland_prompt

Create a new prompt in Bland. Returns: id, prompt, name. Required: prompt.

list_all_bland_sms_numbers

List all SMS-enabled phone numbers and their inbound SMS configurations in Bland. Returns: phone_number, sms_config, conversation_count. SMS is only available on Enterprise plans.

list_all_bland_sms_conversations

List SMS conversations in Bland with optional sorting and filtering. Returns: id, created_at, updated_at, message.

get_single_bland_sms_conversation_by_id

Get a single SMS conversation by id in Bland, including full message history and disposition logs. Returns: id, created_at, updated_at, message. Required: id.

bland_sms_conversations_delete_messages

Delete specific messages from an SMS conversation in Bland by message ID. Returns: message, deleted_count. Required: id, message_ids.

bland_sms_conversations_get_webhook

Get the post-conversation webhook data for an SMS conversation in Bland. Returns: conversation_id, url, payload, created_at, user_id, metadata. Required: conversation_id.

bland_sms_conversations_bulk_delete

Delete an SMS conversation and all associated messages in Bland. Returns: message. Required: id.

bland_sip_get_config

Get SIP trunk configuration for a phone number in Bland. Returns inbound and outbound configuration objects, each including number, id, org_id, direction, sip_endpoint, options, headers, created_at, and updated_at. Required: phone_number (E.164 format).

bland_sip_list_numbers

List SIP-provisioned phone numbers in Bland. Returns: sip_endpoint, inbound, outbound.

bland_sip_get_calls

Get SIP call logs for a phone number in Bland. Returns call records including call_id, direction, from, to, status, sip_code, duration_seconds, started_at, ended_at, and source_ip. Required: phone_number (E.164 format).

list_all_bland_audit_logs

List audit log events for your Bland organization, ordered newest first. Returns: id, org_id, actor_id, event_type, resource_type, resource_id, metadata, created_at. Audit logs are an enterprise feature not available on all accounts.

bland_organizations_list_members

List members of an organization in Bland. Returns: org_id, user_id, permissions, is_owner, is_org_creator, joined_at, first_name, last_name, combo_id, org_slug, org_display_name, member_email, member_phone_number, id, org_plan, org_creation_date, kyc_level, placement_group, is_deleted, is_stripe_overdue, is_suspended, org_rate_limit, org_type, entitlements, preferences.

list_all_bland_organizations

List the Bland organizations the authenticated user belongs to. Takes no parameters. Returns an array of Organization objects with: id, org_slug, org_display_name, org_image_url, org_plan, org_creation_date, kyc_level, placement_group, is_deleted, is_stripe_overdue, is_suspended, org_rate_limit, org_type, entitlements, preferences.

Why Truto

Why use Truto’s MCP server for Bland

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 650+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Bland in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Bland account

Use Truto’s frontend SDK to connect your customer’s Bland account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Bland

Truto’s Proxy API is a 1-to-1 mapping of the Bland API. You call us, we call Bland, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Bland’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Bland on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How do end users authenticate their Bland account?

Bland uses API key authentication. Through Truto, your users paste their Bland API key once during connection setup; Truto securely stores and injects the credential on every request so you never handle raw keys.

Can I initiate outbound calls with dynamic per-call variables?

Yes. Use the send-simple-pathway operation to trigger a call with the destination phone number plus any variables your pathway expects (names, addresses, order IDs). Bland interpolates them into the agent's script at runtime.

How do I get structured data out of a call for CRM sync?

After a call completes, invoke the call analyze operation with an array of questions and expected answer types. Bland returns typed JSON you can map directly to custom fields, plus you can fetch the corrected transcript and recording for attachment.

How do I know when a call ends?

Register a post-call webhook per Bland account so completion events are pushed to your endpoint. Truto also lets you list existing webhooks and resend missed deliveries if your receiver was down.

Can I let the AI agent read and write data in my SaaS during a call?

Yes. Provision custom tools in the user's Bland account that point to your platform's REST endpoints. The agent can invoke them mid-call to check availability, create bookings, or update records in real time.

Can I white-label the voice and persona per customer?

Yes. You can create personas, clone voices, upload voice samples, and manage voice settings per Bland account, so each of your tenants can ship a branded AI agent with its own identity.

Does the integration support inbound numbers and SIP handoff?

Yes. You can purchase and label numbers, list SIP configuration and numbers, and transfer active calls to a human agent's SIP endpoint when the AI detects a handoff condition.

Bland

Get Bland integrated into your app

Our team understands what it takes to make a Bland integration successful. A short, crisp 30 minute call with folks who understand the problem.