Package Information
Documentation
n8n-nodes-vapi
This is an n8n community node for VAPI — the developer platform for building voice AI agents.
Create and manage voice assistants, make outbound phone calls, handle inbound call webhooks, and automate your entire voice AI pipeline directly from n8n.
n8n is a fair-code licensed workflow automation platform.
Table of Contents
Installation
Community Nodes (Recommended)
- Open your n8n instance
- Go to Settings > Community Nodes
- Select Install
- Enter
n8n-nodes-vapiin the input field - Agree to the risks and click Install
Manual Installation
# Navigate to your n8n user directory (usually ~/.n8n)
cd ~/.n8n
# Install the package
npm install n8n-nodes-vapi
# Restart n8n
Docker
If you're running n8n with Docker, add this to your Dockerfile:
RUN cd /usr/local/lib/node_modules/n8n && npm install n8n-nodes-vapi
Or mount as a volume with a custom package.json that includes the dependency.
Credentials
You need a VAPI API Key to use this node.
How to get your API Key
- Go to dashboard.vapi.ai
- Navigate to Organization Settings (or your profile)
- Copy your API Key (Private Key)
Configure in n8n
- In any VAPI node, click on Credentials > Create New
- Enter your API Key
- Click Save
- The credential will automatically be tested by listing your assistants
Nodes
This package includes two nodes:
VAPI Node
The main node for interacting with the VAPI API. Supports full CRUD operations on assistants, calls, phone numbers, and squads.
| Resource | Available Operations |
|---|---|
| Assistant | Create, Get, Get Many, Update, Delete |
| Call | Create Outbound, Create Web Call, Get, Get Many, Delete |
| Phone Number | Get, Get Many, Delete |
| Squad | Get, Get Many, Delete |
VAPI Trigger Node
A webhook trigger node that receives events from VAPI's Server URL. Use this to react to call events in real-time.
| Event Filter | Description |
|---|---|
| All Events | Triggers on any webhook event |
| Assistant Request | VAPI needs assistant configuration dynamically |
| End of Call Report | A call has ended — includes transcript, cost, duration |
| Function Call | The assistant is calling a custom function |
| Hang | A hang event was detected during the call |
| Speech Update | Speech status changed (started/stopped speaking) |
| Status Update | Call status changed (ringing, in-progress, ended) |
| Tool Calls | The assistant invoked one or more tools |
| Transcript | Real-time transcript update |
| Transfer Destination Request | A call transfer was requested |
Operations Reference
Assistant
Create
Creates a new voice assistant.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Name | string | Yes | Name of the assistant |
| First Message | string | No | What the assistant says when the call starts |
| System Prompt | string | No | Instructions for the assistant LLM |
| LLM Provider | select | No | OpenAI, Anthropic, Google, Custom LLM |
| LLM Model | select | No | gpt-4o, gpt-4o-mini, claude-3.5-sonnet, etc. |
| TTS Provider | select | No | ElevenLabs, Azure, Deepgram, OpenAI, etc. |
| Voice ID | string | No | Voice ID from the TTS provider |
| Max Duration (s) | number | No | Maximum call duration in seconds |
| Silence Timeout (s) | number | No | Silence threshold before ending the call |
| End Call Message | string | No | Message to say before ending |
| Server URL | string | No | Webhook URL for this assistant's events |
Get
Retrieves a single assistant by its ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Assistant ID | string | Yes | The unique ID of the assistant |
Get Many
Lists all assistants in your account.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Limit | number | No | Max results to return (default: 50, max: 100) |
Update
Updates an existing assistant.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Assistant ID | string | Yes | The unique ID of the assistant |
| Name | string | No | New name |
| First Message | string | No | New first message |
| System Prompt | string | No | New system prompt |
| Server URL | string | No | New webhook URL |
Delete
Deletes an assistant by ID.
Call
Create (Outbound)
Creates an outbound phone call using a VAPI phone number.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Phone Number ID | string | Yes | Your VAPI phone number ID |
| Customer Phone Number | string | Yes | Target number in E.164 format (e.g. +5511999999999) |
| Assistant Configuration | select | Yes | "Use Existing Assistant" or "Inline (Transient)" |
| Assistant ID | string | Conditional | Required if using existing assistant |
| First Message | string | Conditional | Required if using inline assistant |
| System Prompt | string | Conditional | Required if using inline assistant |
| Customer Name | string | No | Name of the customer (context) |
| Max Duration (s) | number | No | Max call duration |
| Server URL | string | No | Webhook URL for this call |
| Squad ID | string | No | Use a squad instead of single assistant |
| Metadata (JSON) | json | No | Custom metadata for the call |
| Assistant Overrides (JSON) | json | No | Override assistant settings for this call |
Create (Web)
Creates a web-based call (browser-to-browser or browser-to-phone).
Same parameters as Outbound but without Phone Number ID and Customer Phone Number.
Get
Retrieves a call by ID. Returns full details including transcript, cost breakdown, messages, duration, and status.
Get Many
Lists calls with optional filters.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Limit | number | No | Max results (default: 50) |
| Assistant ID | string | No | Filter by assistant |
| Phone Number ID | string | No | Filter by phone number |
Delete
Deletes a call record by ID.
Phone Number
Get
Retrieves a phone number by ID.
Get Many
Lists all phone numbers in your account.
| Parameter | Type | Required | Description |
|---|---|---|---|
| Limit | number | No | Max results (default: 50) |
Delete
Deletes a phone number by ID.
Squad
Get
Retrieves a squad by ID.
Get Many
Lists all squads in your account.
Delete
Deletes a squad by ID.
Usage Examples
Example 1 — Outbound Call from a Webhook
Trigger a phone call when an external event occurs (e.g. form submission, CRM update).
[Webhook] → [VAPI: Call > Create Outbound]
- Add a Webhook node as the trigger
- Add a VAPI node with:
- Resource: Call
- Operation: Create (Outbound)
- Phone Number ID: your VAPI phone number
- Customer Phone Number:
{{ $json.phone }} - Assistant Configuration: Use Existing Assistant
- Assistant ID: your assistant ID
Example 2 — Create an Assistant with Custom Prompt
Dynamically create assistants based on data from another system.
[Trigger] → [VAPI: Assistant > Create]
- Add any trigger node
- Add a VAPI node with:
- Resource: Assistant
- Operation: Create
- Name:
{{ $json.agentName }} - System Prompt:
{{ $json.instructions }} - First Message:
Hello! How can I help you today?
Example 3 — Receive End of Call Reports
Process call reports after each call ends (e.g., save to database, send notification).
[VAPI Trigger: End of Call Report] → [IF: call.cost > 0.5] → [Slack: Send Message]
- Add a VAPI Trigger node
- Event Filter: End of Call Report
- Copy the webhook URL from the node
- Set this URL as the Server URL in your VAPI assistant or call configuration
- Connect downstream nodes to process the report data
The trigger receives data including:
message.call— full call object with status, duration, costmessage.transcript— complete conversation transcriptmessage.summary— AI-generated summary of the callmessage.recordingUrl— URL of the call recording
Example 4 — Handle Function Calls from the Assistant
Let your voice assistant trigger n8n workflows (e.g., look up order status, book appointments).
[VAPI Trigger: Function Call] → [Switch: functionName] → [HTTP Request: CRM API] → [Respond to Webhook]
- Add a VAPI Trigger node
- Event Filter: Function Call
- Use a Switch node to route based on
{{ $json.message.functionCall.name }} - Process the function (query database, call API, etc.)
- Use Respond to Webhook to return the result back to VAPI
Compatibility
| Requirement | Version |
|---|---|
| n8n | >= 0.200.0 |
| Node.js | >= 18.0.0 |
Tested with n8n versions 1.x.