@adhirajhangal/n8n-nodes-vapi
v0.1.0
Published
n8n community node for Vapi. Manage AI voice assistants, fire outbound calls, and wire voice AI into any workflow.
Maintainers
Readme
n8n-nodes-vapi
An n8n community node for Vapi. Wire your AI phone agents directly into your n8n workflows without touching the API.
Built by someone who actually runs AI agency campaigns with this stuff.
What This Does
Adds a Vapi node to n8n with full support for:
| Resource | Operations | |---|---| | Assistant | Create, Get, Get Many, Update, Delete | | Call | Create Outbound, Get, Get Many, End | | Phone Number | Get, Get Many | | Squad | Create, Get, Get Many, Update, Delete |
The most common use case: fire an outbound call to a lead, pass metadata (like their name, company, CRM ID), and receive the transcript + outcome via webhook, all from an n8n workflow.
Installation
In n8n (Recommended)
- Open your n8n instance
- Go to Settings → Community Nodes
- Click Install
- Enter
@adhirajhangal/n8n-nodes-vapi - Click Install and restart n8n
Manual (self-hosted)
cd ~/.n8n/custom # or your custom nodes directory
npm install @adhirajhangal/n8n-nodes-vapi
# restart n8nCredentials
You'll need a Vapi API key.
- Go to dashboard.vapi.ai
- Click your account → API Keys
- Copy your Private Key (starts with the long string)
- In n8n, go to Credentials → New → search for Vapi API
- Paste the key and save
Your private key is what you use for server-side API calls. Don't confuse it with the public key (that's for client-side SDKs).
Usage Examples
Fire an Outbound Call
The most common workflow: trigger a call to a lead when something happens (form submitted, deal stage changes, etc.).
- Add the Vapi node
- Set Resource → Call, Operation → Create (Outbound)
- Fill in:
- Phone Number ID: your Vapi number (get it from dashboard → Phone Numbers)
- Customer Phone Number: the lead's number in E.164 format (
+14155550100) - Assistant → pick "Existing Assistant" and paste your assistant ID
- In Additional Fields, add Metadata with any data you want back on the webhook:
{ "leadId": "{{ $json.id }}", "campaign": "q2-outbound", "firstName": "{{ $json.firstName }}" }
Create an Assistant
Build an assistant programmatically, useful if you're spinning up agents per client.
- Resource → Assistant, Operation → Create
- Set the name, first message, and system prompt
- In Additional Fields, pick your LLM (gpt-4o-mini is the sweet spot for cost/quality) and voice provider
Get Call Transcript
After a call ends, pull the full transcript and outcome:
- Resource → Call, Operation → Get
- Pass the call ID (comes back from the webhook or from Create Call response)
- The response includes
transcript,recordingUrl,summary,cost, and more
Webhook Setup (Highly Recommended)
Vapi sends call events to a webhook URL you define, and that's how you get transcripts, outcomes, and custom function call results back into n8n.
- Add an n8n Webhook node to your workflow
- Copy the webhook URL
- When creating/updating your Vapi assistant, paste it into Webhook URL
- Vapi will POST to that URL on events:
call-started,call-ended,transcript,function-call, etc.
The call-ended event is the one you want, it has the full transcript and call outcome.
Tips From Real Campaigns
Use assistantOverrides for personalization without creating a new assistant per lead. Pass firstMessage and variableValues to customize what the agent says per call, saves you from managing hundreds of assistants.
Always pass metadata. When a call ends and the webhook fires, that metadata comes right back. Use it to link the call back to your CRM record, campaign, or whatever triggered it.
E.164 format or it'll 400. Phone numbers must be formatted as +[country code][number], no dashes, no spaces, no parentheses.
Vapi pagination is timestamp-based, not page-based. Use createdAtGt / createdAtLt to paginate through large call lists.
Squads are underused. If you have a complex flow (receptionist → qualifier → closer), use a Squad instead of trying to cram all that logic into one assistant's prompt.
Resources
Contributing
PRs welcome. If Vapi adds new endpoints or you hit a bug, open an issue.
License
MIT
