> ## Documentation Index
> Fetch the complete documentation index at: https://www.bolna.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Bolna community node for n8n

> Install the official n8n-nodes-bolna community node to make calls, run batch campaigns and workflows, manage agents, and trigger on call events directly from n8n.

Bolna publishes a verified [community node for n8n](https://n8n.io/integrations/bolna/) — [`n8n-nodes-bolna`](https://www.npmjs.com/package/n8n-nodes-bolna). Install it once and you get two native nodes in the n8n editor, no HTTP Request wiring required.

<CardGroup cols={2}>
  <Card title="Bolna" icon="phone-arrow-up-right">
    **Action node.** Make outbound calls, run batch campaigns, run workflows and workflow campaigns, and manage agents.
  </Card>

  <Card title="Bolna Trigger" icon="bolt">
    **Trigger node.** Starts your workflow when Bolna posts a call execution update, and registers its own webhook on the agent.
  </Card>
</CardGroup>

***

## Installation

<Steps>
  <Step title="Open Community Nodes" icon="gear">
    In n8n, go to **Settings → Community Nodes → Install**.
  </Step>

  <Step title="Install the package" icon="box">
    Enter `n8n-nodes-bolna` and confirm.

    Self-hosted or npm-based setups without the GUI installer: see n8n's [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/).
  </Step>

  <Step title="Add your credential" icon="key">
    Create a **Bolna API** credential with your API key from the Bolna dashboard under **Developers → API Keys**.

    See the [API quickstart](/docs/quickstarts/api) for generating keys.
  </Step>
</Steps>

***

## Bolna node operations

<AccordionGroup>
  <Accordion title="Call" icon="phone">
    | Operation | Bolna API                             |
    | --------- | ------------------------------------- |
    | Make Call | `POST /call`                          |
    | Get       | `GET /executions/{execution_id}`      |
    | Get Many  | `GET /v2/agent/{agent_id}/executions` |
  </Accordion>

  <Accordion title="Batch" icon="layer-group">
    | Operation | Bolna API                           |
    | --------- | ----------------------------------- |
    | Create    | `POST /batches`                     |
    | Schedule  | `POST /batches/{batch_id}/schedule` |
    | Get       | `GET /batches/{batch_id}`           |
    | Get Many  | `GET /batches/{agent_id}/all`       |

    **Create** reads the recipients CSV from an input binary field (default `data`). Wire up an upstream node that produces a CSV binary — **Read/Write Files**, **HTTP Request**, or **Spreadsheet File**.
  </Accordion>

  <Accordion title="Workflow" icon="diagram-project">
    | Operation     | Bolna API                                 |
    | ------------- | ----------------------------------------- |
    | Run           | `POST /workflows/{workflow_id}/run`       |
    | Get Execution | `GET /workflow-executions/{execution_id}` |
    | Get Many      | `GET /workflows`                          |
  </Accordion>

  <Accordion title="Workflow Campaign" icon="bullhorn">
    | Operation      | Bolna API                                        |
    | -------------- | ------------------------------------------------ |
    | Create         | `POST /workflow-campaigns`                       |
    | Upload Entries | `POST /workflow-campaigns/{campaign_id}/entries` |
    | Start          | `POST /workflow-campaigns/{campaign_id}:start`   |
    | Pause          | `POST /workflow-campaigns/{campaign_id}:pause`   |
    | Resume         | `POST /workflow-campaigns/{campaign_id}:resume`  |
    | Abort          | `POST /workflow-campaigns/{campaign_id}:abort`   |
    | Get            | `GET /workflow-campaigns/{campaign_id}`          |
    | Get Many       | `GET /workflow-campaigns`                        |

    **Upload Entries** accepts either a binary CSV or a JSON array of contact rows.
  </Accordion>

  <Accordion title="Agent" icon="robot">
    | Operation | Bolna API                    |
    | --------- | ---------------------------- |
    | Create    | `POST /v2/agent`             |
    | Get       | `GET /v2/agent/{agent_id}`   |
    | Get Many  | `GET /v2/agent/all`          |
    | Update    | `PATCH /v2/agent/{agent_id}` |

    **Create** builds a single-task conversation agent from three required fields: name, welcome message, and system prompt.

    * LLM, synthesizer, transcriber, and telephony choices live under **Additional Fields**.
    * **Additional Agent Config (JSON)** merges into `agent_config` for anything else — webhook URL, guardrails, multilingual config, API tools, routes.
    * The node does not expose Bolna's full nested agent schema as individual fields. For that, use the [Agent API](/docs/api-reference) directly.
  </Accordion>
</AccordionGroup>

***

## Bolna Trigger node

Bolna has no webhook-subscription API, but an agent's `webhook_url` can be set via `PATCH /v2/agent/{agent_id}`. The trigger uses exactly that:

<Steps>
  <Step title="Pick an agent" icon="robot">
    Select the agent whose call events should start this workflow.
  </Step>

  <Step title="Activate the workflow" icon="play">
    The trigger points that agent's `webhook_url` at its own URL, **overwriting whatever was configured before**.
  </Step>

  <Step title="Deactivate to clear" icon="stop">
    Deactivating the workflow resets the agent's `webhook_url` back to empty.
  </Step>
</Steps>

**Filtering events** — use the **Trigger On Statuses** field:

* Defaults to `completed`, since cost, duration, recording, and extracted-data fields aren't finalized until then.
* Leave it empty to receive every update Bolna sends, including in-progress pre-call webhooks fired by function tools.

<Warning>
  Your n8n instance must be reachable from the public internet for the trigger to receive events — a real deployment, or a tunnel like `ngrok` in development. Bolna's servers can't reach a bare `localhost` URL.
</Warning>

<Note>
  Because Bolna can't report back whether a webhook is already registered, the trigger re-registers on every activation instead of checking first. Harmless — it overwrites the same value.
</Note>

***

## Resources

<CardGroup cols={2}>
  <Card title="n8n integrations page" icon="link" href="https://n8n.io/integrations/bolna/">
    Bolna's listing on n8n's directory
  </Card>

  <Card title="npm package" icon="npm" href="https://www.npmjs.com/package/n8n-nodes-bolna">
    `n8n-nodes-bolna`
  </Card>

  <Card title="Source code" icon="github" href="https://github.com/bolna-ai/n8n-nodes-bolna">
    GitHub repository
  </Card>

  <Card title="Bolna API reference" icon="code" href="/docs/api-reference">
    The REST API this node wraps
  </Card>
</CardGroup>
