All integrations

Bolna

AI · AI

Voice agents, outbound calls, executions, and batches on their own key.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

bolna_delete_batches_by_batch_idWRITE

Delete a batch. via DELETE /batches/{batch_id}

api
bolna_delete_dispositions_by_disposition_idWRITE

Permanently delete a disposition and remove its link to any associated agents. Regular users can only delete dispositions they own (`created_by` matches their user ID). Admins can delete any disposition. Historical call execution results already containing this disposition's output are not affected — only future calls will stop evaluating it. Deleting a category's last disposition also deletes the category itself. via DELETE /dispositions/{disposition_id}

api
bolna_delete_extraction_categories_by_category_idWRITE

Delete an extraction category. The category owns its dispositions, so this deletes the category **and all of its dispositions**, and detaches the category from the agent. Historical call execution results that already contain output from this category's dispositions are not affected — only future calls stop evaluating them. via DELETE /extraction-categories/{category_id}

api
bolna_delete_extractions_by_template_idWRITE

Delete an extraction template (Admin only). via DELETE /extractions/{template_id}

api
bolna_delete_knowledgebase_by_rag_idWRITE

Delete a knowledgebase. via DELETE /knowledgebase/{rag_id}

api
bolna_delete_phone_numbers_by_phone_number_idWRITE

Delete a batch. Releases a purchased phone number permanently. (Bolna's own description of this operation reads 'Delete a batch'; the path deletes a phone number.) via DELETE /phone-numbers/{phone_number_id}

api
bolna_delete_providers_by_provider_key_nameWRITE

Remove provider. via DELETE /providers/{provider_key_name}

api
bolna_delete_sip_trunks_trunks_by_trunk_idWRITE

Permanently delete a SIP trunk and all associated resources (gateways, IP identifiers, phone numbers). via DELETE /sip-trunks/trunks/{trunk_id}

api
bolna_delete_sip_trunks_trunks_by_trunk_id_numbers_by_phone_number_idWRITE

Remove a phone number from a SIP trunk. If the number was mapped to an agent, the mapping is also removed. via DELETE /sip-trunks/trunks/{trunk_id}/numbers/{phone_number_id}

api
bolna_delete_sub_accounts_by_sub_account_idWRITE

Delete a sub-account. via DELETE /sub-accounts/{sub_account_id}

api
bolna_delete_user_model_custom_by_model_idWRITE

Delete a custom LLM Model along with its stored key. via DELETE /user/model/custom/{model_id}

api
bolna_delete_v2_agent_by_agent_idWRITE

Delete an agent. via DELETE /v2/agent/{agent_id}

api
bolna_delete_workflow_campaigns_by_campaign_idWRITE

Deletes a campaign. Only legal on a `draft` campaign with no entries and no executions. via DELETE /workflow-campaigns/{campaign_id}

api
bolna_delete_workflows_by_workflow_idWRITE

Soft-deletes a workflow. Existing campaigns and executions are preserved for reporting. via DELETE /workflows/{workflow_id}

api
bolna_get_agent_by_agent_id_execution_by_execution_idREAD

Retrieve specific execution by an agent. via GET /agent/{agent_id}/execution/{execution_id}

api
bolna_get_agent_by_agent_id_executionsREAD

Retrieve all executions by an agent. via GET /agent/{agent_id}/executions

api
bolna_get_agent_by_agent_id_extraction_categoriesREAD

List the extraction categories attached to an agent. Each category is returned with the dispositions it owns. via GET /agent/{agent_id}/extraction-categories

api
bolna_get_api_v1_voice_config_ttsREAD

Returns all TTS providers with their supported models for a given language. Use this to discover available providers and their model IDs before fetching voices. via GET /api/v1/voice-config/tts

api
bolna_get_api_v1_voice_config_tts_voicesREAD

Returns a paginated list of voices available for a specific TTS provider and model. Voices include both platform-curated voices and any custom voices created by your account. via GET /api/v1/voice-config/tts/voices

api
bolna_get_batches_by_agent_id_allREAD

List all batches for agent. via GET /batches/{agent_id}/all

api
bolna_get_batches_by_batch_idREAD

Retrieve a batch. via GET /batches/{batch_id}

api
bolna_get_batches_by_batch_id_executionsREAD

Retrieve all executions from a batch. Returns a bare JSON array of execution objects (not wrapped in a `data` key). via GET /batches/{batch_id}/executions

api
bolna_get_dispositionsREAD

List dispositions accessible to your account. When `agent_id` is provided, only dispositions linked to that agent are returned; otherwise all dispositions you own are returned. via GET /dispositions/

api
bolna_get_dispositions_by_disposition_idREAD

Retrieve a single disposition by ID, optionally scoped to a specific agent. via GET /dispositions/{disposition_id}

api
bolna_get_executions_by_execution_idREAD

Retrieve specific execution by `execution_id`. via GET /executions/{execution_id}

api
bolna_get_executions_by_execution_id_logREAD

Retrieve raw logs of specific `execution_id`. via GET /executions/{execution_id}/log

api
bolna_get_extractionsREAD

List all extraction templates. via GET /extractions/

api
bolna_get_extractions_by_template_idREAD

Get a specific extraction template. via GET /extractions/{template_id}

api
bolna_get_knowledgebase_allREAD

List all knowledgebases for your account. via GET /knowledgebase/all

api
bolna_get_knowledgebase_by_rag_idREAD

Retrieve a knowledgebase. via GET /knowledgebase/{rag_id}

api
bolna_get_phone_numbers_allREAD

List all phone numbers for your account. via GET /phone-numbers/all

api
bolna_get_phone_numbers_searchREAD

Search available phone numbers by country and pattern. via GET /phone-numbers/search

api
bolna_get_providersREAD

List all providers. via GET /providers

api
bolna_get_sip_trunks_trunksREAD

List all SIP trunks for your account. via GET /sip-trunks/trunks

api
bolna_get_sip_trunks_trunks_by_trunk_idREAD

Get a single SIP trunk with full details including gateways, IP identifiers, and phone numbers. via GET /sip-trunks/trunks/{trunk_id}

api
bolna_get_sip_trunks_trunks_by_trunk_id_numbersREAD

List all phone numbers associated with a SIP trunk. via GET /sip-trunks/trunks/{trunk_id}/numbers

api
bolna_get_sub_accounts_allREAD

List all sub-accounts. via GET /sub-accounts/all

api
bolna_get_sub_accounts_all_usageREAD

Retrieve usage details for all sub-accounts under the authenticated organization for up to 32 days. via GET /sub-accounts/all/usage

api
bolna_get_sub_accounts_by_sub_account_id_usageREAD

Track usage for the sub-account upto 32 days. via GET /sub-accounts/{sub_account_id}/usage

api
bolna_get_user_meREAD

Get user information. via GET /user/me

api
bolna_get_user_model_customREAD

List your custom LLM models. via GET /user/model/custom

api
bolna_get_v2_agent_allREAD

List all agents. via GET /v2/agent/all

api
bolna_get_v2_agent_by_agent_idREAD

Retrieve an agent. via GET /v2/agent/{agent_id}

api
bolna_get_v2_agent_by_agent_id_executionsREAD

Retrieve all executions by an agent. via GET /v2/agent/{agent_id}/executions

api
bolna_get_v2_batches_by_batch_id_executionsREAD

Retrieve all executions from a batch with pagination support. via GET /v2/batches/{batch_id}/executions

api
bolna_get_violations_listREAD

Retrieve a paginated list of violations, optionally filtered by status. via GET /violations/list

api
bolna_get_workflow_campaignsREAD

Lists campaigns, newest first by default. via GET /workflow-campaigns

api
bolna_get_workflow_campaigns_by_campaign_idREAD

Retrieves a campaign with a count of entries per status and per-code counts of upload validation failures. via GET /workflow-campaigns/{campaign_id}

api
bolna_get_workflow_campaigns_by_campaign_id_entriesREAD

Lists a campaign's entries, including `failed_validation` rows with their failure code in `validation_error`. via GET /workflow-campaigns/{campaign_id}/entries

api
bolna_get_workflow_campaigns_by_campaign_id_entries_templateREAD

Returns a one-line CSV header naming the fields the campaign's pinned version declares, in author order — the exact header an entries upload expects. Falls back to the four system fields when the version declares no schema. The CSV text is returned as {'raw': '<csv>'}. via GET /workflow-campaigns/{campaign_id}/entries/template

api
bolna_get_workflow_campaigns_by_campaign_id_executionsREAD

Lists a campaign's executions. Poll after starting a campaign to watch contacts progress. via GET /workflow-campaigns/{campaign_id}/executions

api
bolna_get_workflow_campaigns_by_campaign_id_reportREAD

Aggregated campaign report — execution counts by status, termination reasons, and a per-node funnel keyed by the node ids in your definition. via GET /workflow-campaigns/{campaign_id}/report

api
bolna_get_workflow_executions_by_execution_idREAD

The whole story of one contact's run — status, every node attempt with the edge it took, and the most recent timeline events. Poll until `status` is terminal (`completed`, `failed`, `cancelled` or `aborted`). via GET /workflow-executions/{execution_id}

api
bolna_get_workflow_node_typesREAD

Lists every node type with its configuration parameters, defaults and bounds, plus the available variable namespaces and effects. Node types without an executor are returned with `available` set to `false` rather than omitted. via GET /workflow-node-types

api
bolna_get_workflowsREAD

Lists your workflows, newest first. via GET /workflows

api
bolna_get_workflows_by_workflow_idREAD

Retrieves a workflow with its draft metadata and the metadata of every published version, including per-version campaign and outcome totals. via GET /workflows/{workflow_id}

api
bolna_get_workflows_by_workflow_id_draftREAD

Reads the stored draft definition and its current revision. Use it to resync the revision before a save. via GET /workflows/{workflow_id}/draft

api
bolna_get_workflows_by_workflow_id_versions_by_versionREAD

Retrieves the frozen definition of a published version. via GET /workflows/{workflow_id}/versions/{version}

api
bolna_patch_extraction_categories_by_category_idWRITE

Update an extraction category. Both fields are individually optional, but at least one of `name` or `model` must be present — an empty body is rejected. Renaming a category rewrites the `category` label on all of its dispositions in the same transaction, so extraction results and disposition responses stay consistent. Changing `model` switches the LLM used for the category's extraction pass on subsequent calls. via PATCH /extraction-categories/{category_id}

api
bolna_patch_sip_trunks_trunks_by_trunk_idWRITE

Partially update an existing SIP trunk. Only included fields are changed. Gateways and ip_identifiers arrays are fully replaced when provided. via PATCH /sip-trunks/trunks/{trunk_id}

api
bolna_patch_sub_accounts_by_sub_account_idWRITE

Patch update a sub-account. via PATCH /sub-accounts/{sub_account_id}

api
bolna_patch_v2_agent_by_agent_idWRITE

Patch update an agent. via PATCH /v2/agent/{agent_id}

api
bolna_patch_workflows_by_workflow_idWRITE

Renames a workflow. `name` is the only patchable field — the definition itself is edited through the draft endpoints. via PATCH /workflows/{workflow_id}

api
bolna_post_agent_by_agent_id_extraction_categoriesWRITE

Create an extraction category and attach it to the agent. Attaching a category gives the agent all of the category's dispositions; dispositions are added to the category via the Dispositions API using `category_id`. The category name must be unique among the agent's attached categories. The `model` applies to the category's entire extraction pass — one category is evaluated in one LLM call. via POST /agent/{agent_id}/extraction-categories

api
bolna_post_batches_by_batch_id_stopWRITE

Stop a running batch. via POST /batches/{batch_id}/stop

api
bolna_post_callWRITE

Initiate calls. Places a REAL outbound phone call from the agent to the recipient number and spends Bolna wallet credit (a call fails with status balance-low when the wallet is empty). via POST /call

api
bolna_post_call_by_execution_id_stopWRITE

Stop a queued or scheduled call. via POST /call/{execution_id}/stop

api
bolna_post_dispositionsWRITE

Create a new disposition and link it to an agent. `agent_id` is required and the disposition is automatically linked to that agent upon creation. via POST /dispositions/

api
bolna_post_dispositions_bulkWRITE

Atomically create and link multiple dispositions to an agent in a single request. Either all dispositions are created and linked, or none are. via POST /dispositions/bulk

api
bolna_post_extractionsWRITE

Create a new extraction template (Admin only). via POST /extractions/

api
bolna_post_inbound_setupWRITE

Add agent for inbound calls with optional IVR configuration. Real inbound calls to that number are then answered by the agent. via POST /inbound/setup

api
bolna_post_inbound_unlinkWRITE

Remove agent for inbound calls. via POST /inbound/unlink

api
bolna_post_phone_numbers_buyWRITE

Buy a phone number. Purchases a real phone number; the Bolna account is billed for it. via POST /phone-numbers/buy

api
bolna_post_providersWRITE

Add provider. via POST /providers

api
bolna_post_sip_trunks_trunksWRITE

Create a new SIP trunk and register it with Bolna's media layer. via POST /sip-trunks/trunks

api
bolna_post_sip_trunks_trunks_by_trunk_id_numbersWRITE

Add a DID phone number to a SIP trunk. via POST /sip-trunks/trunks/{trunk_id}/numbers

api
bolna_post_sub_accounts_createWRITE

Creates a new sub-account. via POST /sub-accounts/create

api
bolna_post_user_model_customWRITE

Add a custom LLM Model. via POST /user/model/custom

api
bolna_post_v2_agentWRITE

Creates a new agent. via POST /v2/agent

api
bolna_post_v2_agent_by_agent_id_dispositions_testWRITE

Run all dispositions linked to the specified agent against a provided transcript and return the grouped results. Useful for validating your disposition setup before going live. via POST /v2/agent/{agent_id}/dispositions/test

api
bolna_post_v2_agent_by_agent_id_stopWRITE

Stop all queued calls for a given agent_id. via POST /v2/agent/{agent_id}/stop

api
bolna_post_workflow_campaignsWRITE

Creates a campaign in `draft` status. A campaign pins one published version of one workflow at creation time — `version` `null` pins the latest published version — and the pin is immutable afterwards. via POST /workflow-campaigns

api
bolna_post_workflow_campaigns_by_campaign_id_abortWRITE

Aborts a campaign. Terminal — every execution stops before its next external action and cannot be resumed. via POST /workflow-campaigns/{campaign_id}:abort

api
bolna_post_workflow_campaigns_by_campaign_id_entriesWRITE

Bulk-uploads contacts as CSV rows or a JSON array. Columns must be system fields (`reference_id`, `mobile_number`, `name`, `email`) or fields the pinned version's start node declares — an undeclared column rejects the whole upload with `422 unknown_field` before anything is persisted. Rows are then validated individually; per-row failures land in the response's `failures` array while valid rows are accepted. Offered here as the JSON array form (the text/csv upload is not). via POST /workflow-campaigns/{campaign_id}/entries

api
bolna_post_workflow_campaigns_by_campaign_id_pauseWRITE

Pauses a `scheduled` or `running` campaign. No new work starts; an execution already waiting on a timer holds at its next dispatch and resumes with the campaign. via POST /workflow-campaigns/{campaign_id}:pause

api
bolna_post_workflow_campaigns_by_campaign_id_resumeWRITE

Resumes a `paused` campaign. Resumes dialing real contacts. via POST /workflow-campaigns/{campaign_id}:resume

api
bolna_post_workflow_campaigns_by_campaign_id_startWRITE

Starts dialing a batch campaign's pending entries. The campaign must be `draft` or `scheduled` and hold at least one pending entry. Idempotent — repeating the call is a no-op. Starts dialing REAL contacts and spends wallet credit. via POST /workflow-campaigns/{campaign_id}:start

api
bolna_post_workflow_executions_by_execution_id_cancelWRITE

Stops one execution before its next external action. Cancelling an already-terminal execution is a no-op that returns its current status. via POST /workflow-executions/{execution_id}:cancel

api
bolna_post_workflowsWRITE

Creates a new workflow with an empty draft at revision `0`. Save a definition with the [Save Draft API](/api-reference/workflows/save-draft), then validate and publish it. via POST /workflows

api
bolna_post_workflows_by_workflow_id_publishWRITE

Validates the draft and freezes it as an immutable published version, then opens a fresh draft at revision `0`. Campaigns and single runs always execute published versions, never drafts. via POST /workflows/{workflow_id}/publish

api
bolna_post_workflows_by_workflow_id_runWRITE

Runs one contact through the workflow's latest published version. Returns an execution you can poll with the [Get Execution API](/api-reference/workflow-executions/get). Fields declared by the start node may be passed flat at the top level or nested under `custom_fields`; a flat key wins on collision. Starts a real run: the workflow's nodes can place calls and send messages to the contact, spending wallet credit. via POST /workflows/{workflow_id}/run

api
bolna_post_workflows_by_workflow_id_validateWRITE

Validates the saved draft without mutating anything. Issues with `severity` `error` block publish; warnings do not. via POST /workflows/{workflow_id}/validate

api
bolna_put_dispositions_by_disposition_idWRITE

Update an existing disposition. All fields in the request body are optional — only fields you include are changed. When `agent_id` is provided (scoped mode), the API checks whether the disposition is exclusive to that agent: - If exclusive, it is edited in place and `200 OK` is returned. - If shared, a new private copy is created for this agent and the agent is re-linked to the copy; the original disposition is unchanged and `201 Created` is returned with the new ID. via PUT /dispositions/{disposition_id}

api
bolna_put_extractions_by_template_idWRITE

Update an extraction template (Admin only). via PUT /extractions/{template_id}

api
bolna_put_v2_agent_by_agent_idWRITE

Update an agent. via PUT /v2/agent/{agent_id}

api
bolna_put_workflows_by_workflow_id_draftWRITE

Saves the draft definition. `expected_revision` is a compare-and-set token — send the revision you last read; a stale value returns `409 revision_conflict` with the `current_revision`. Drafts store any well-formed JSON object; graph validation happens at validate and publish. via PUT /workflows/{workflow_id}/draft

api

Put Bolna behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.