Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-bluesales
An n8n community node for BlueSales — AI voice calling agents ("Blues") that answer your phone, qualify leads, and book appointments.
This package ships two nodes:
| Node | Type | What it does |
|---|---|---|
| BlueSales | Action | Full CRUD over every BlueSales API resource, plus initiating live calls |
| BlueSales Trigger | Polling trigger | Starts a workflow when a call completes, a lead is added, or a Blue is created |
Installation · Credentials · Operations · Example workflows · Publishing
Installation
From the n8n UI (self-hosted)
- Go to Settings → Community Nodes → Install.
- Enter
n8n-nodes-bluesales. - Agree to the risks prompt and select Install.
Manually (self-hosted)
cd ~/.n8n
npm install n8n-nodes-bluesales
# restart n8n
Local development
git clone https://github.com/bluesales-ai/n8n-nodes-bluesales.git
cd n8n-nodes-bluesales
npm install
npm run build
npm link
# in your n8n custom-extensions folder
mkdir -p ~/.n8n/custom && cd ~/.n8n/custom
npm init -y # only the first time
npm link n8n-nodes-bluesales
# then start n8n
n8n start
npm run dev recompiles on change; restart n8n to pick up new builds.
Credentials
Create an API key in the BlueSales dashboard under Dashboard → API → Create API Key. Keys start with bsk_.
In n8n, add a BlueSales API credential:
| Field | Value |
|---|---|
| API Key | your bsk_… key |
| Base URL | https://api-v2.bluesales.ai/functions/v1 (only change for a self-hosted backend) |
The key is sent as an X-API-Key header on every request.
Permissions
BlueSales API keys are scoped. A key needs the matching permission for each operation, or the API answers 403 Missing permission: …:
| Resource | Permissions |
|---|---|
| Blue | blues:read, blues:write, blues:delete |
| Business Profile | business_profiles:read, business_profiles:write, business_profiles:delete |
| Brain | brains:read, brains:write, brains:delete |
| Product/Service | products_services:read, products_services:write, products_services:delete |
| Lead List | lead_lists:read, lead_lists:write, lead_lists:delete |
| Lead | leads:read, leads:write, leads:delete |
| Phone Number | phone_numbers:read, phone_numbers:write |
| Call | calls:read, calls:write |
| Calendar | calendar:read, calendar:write |
| Compliance | compliance:read, compliance:write |
| Voice | (none — shared catalogue) |
The credential's Test button calls
GET /api/voices, which has no permission gate, so the test passes for any valid key regardless of how narrowly it is scoped.
Operations
Blue
A Blue is an AI voice agent. Every Blue needs a business profile; outbound Blues additionally use a product/service and a lead list.
| Operation | API call |
|---|---|
| Create | POST /api/blues |
| Get | GET /api/blues/{id} |
| Get Many | GET /api/blues — filter by type (inbound/outbound) and role |
| Update | PATCH /api/blues/{id} |
| Delete | DELETE /api/blues/{id} |
Create exposes the full agent configuration: voice type and voice ID, opening line, who speaks first, background sound, keypad access, voicemail, persona (Blue Identity), purpose, call transfer (always/smart + destination number), email notifications, and the outbound calling window (days, timezone, start/end time).
Business Profile can be Use Existing (pick from a dropdown) or Create Inline — the latter creates the profile in the same request and needs business_profiles:write.
Roles depend on type:
- Inbound —
receptionist,front_desk,hotline,concierge,custom_agent - Outbound —
appointment_booking,sales,custom_campaign
Brain
A brain is the knowledge base a Blue answers from.
| Operation | API call |
|---|---|
| Create | POST /api/brains |
| Get | GET /api/brains/{id} — includes the status field |
| Get Many | GET /api/brains |
| Update | PATCH /api/brains/{id} |
| Delete | DELETE /api/brains/{id} |
| Upload File | POST /api/brains/{id}/upload |
| Train | POST /api/brains/{id}/ingest |
Upload File takes a binary field from the incoming item (default data) — PDF, TXT or CSV — base64-encodes it and starts ingestion.
Ingestion is asynchronous. After Create (with text or a website), Upload File, or Train, poll Get until status is active:
BlueSales (Brain → Upload File)
→ Wait (30s)
→ BlueSales (Brain → Get)
→ If {{ $json.status === 'active' }} → done
→ loop back to Wait
Business Profile / Product-Service / Lead List / Lead
Standard Create · Get · Get Many · Update · Delete against /api/business-profiles, /api/products-services, /api/lead-lists and /api/leads.
Product/Service Create requires product_name, description, type (product/service), genre (b2b/b2c), price and category. Optional fields cover min/max price and whether the Blue may negotiate.
Lead Create requires a lead list and a phone number in E.164 format; everything else (name, company, job title, email, address, timezone, LinkedIn…) is optional.
Phone Number
| Operation | API call |
|---|---|
| Get / Get Many | GET /api/phone-numbers[/{id}] |
| Import | POST /api/phone-numbers |
Import brings a number you already own in Twilio into BlueSales. It verifies the number against your Twilio account and registers it with the voice provider. Buying new numbers is dashboard-only.
Call
| Operation | API call |
|---|---|
| Initiate | POST /api/calls |
| Get | GET /api/calls/{id} — transcript, summary, duration, outcome |
| Get Many | GET /api/calls — filter by Blue, period, success, and free-text search |
| Get Recording | GET /api/calls/{id}/recording — returns a presigned URL and its expiry |
Initiate places a call immediately. Beyond the required name and number, Additional Customer Fields become variables the Blue can use in the conversation.
Get Recording returns a short-lived URL. Fetch it in the same run (e.g. with an HTTP Request node) rather than storing it.
Calendar
| Operation | Endpoint |
|---|---|
| Get Available Slots | GET /api-get-calendar-slots — output is one item per free slot |
| Create Event | POST /api-create-calendar-event |
| Register Connection | POST /api-register-calendar-connection |
API access must be enabled on the calendar connection in the BlueSales dashboard.
Register Connection with provider webhook is the bring-your-own-calendar path: BlueSales POSTs {action: "create_event", calendar_id, title, start_time, end_time, …} to your URL whenever a Blue books. Point it at an n8n Webhook node to run your own booking logic.
Compliance
Get and Update the account-level GDPR / HIPAA / CPRA settings at /api/compliance.
Voice
| Operation | API call |
|---|---|
| Get | GET /api/voices/{id} |
| Get Many | GET /api/voices — filter by type, gender, accent, and a name search |
Voices are a shared, read-only catalogue, so there is no create, update or delete, and no
permission is needed on the API key. The Voice field on the Blue resource is a dropdown
fed by this endpoint; use the voice id as voice_id when creating or updating a Blue.
Trigger node
BlueSales Trigger polls on the schedule you set on the node.
| Event | Watches |
|---|---|
| Call Completed | New rows in the call log — optionally filtered by Blue and by success |
| Lead Created | New leads — optionally filtered by lead list |
| Blue Created | Newly created Blues |
The first poll only records a watermark, so activating a workflow never replays history. Each later poll emits records newer than the previous poll, oldest first. A manual execution returns the single newest record so you can map fields.
The trigger inspects the 100 newest records per poll. If you expect more than that between polls, poll more often.
Example workflows
examples/ contains importable workflow JSON:
call-completed-to-slack.json— Call Completed trigger → filter unsuccessful calls → format the summary.csv-to-lead-list-and-call.json— create a lead list, import leads from incoming items, then have a Blue call each one.provision-inbound-blue.json— business profile → brain (with text) → wait for training → create an inbound receptionist Blue on a phone number.
Import with Workflows → Import from File, then select your BlueSales credential on each node.
Compatibility
Tested against n8n 1.82+ and the BlueSales API v2. Requires Node.js 20.15 or newer.