Calls, leads and messages
Click-to-call, SMS and adding a lead that is dialled at once are available once your account
administrator has switched them on and made a sending key: see Sending for the setup and
every error a send can answer. WhatsApp messages are not available yet: they answer 403
tier_not_enabled for every account until DialerBee announces them in the
changelog. Adding a lead to a draft, ready or paused campaign works with leads:write.
Click-to-call
POST /v1/calls (scope calls:originate, a sending key) connects one of your agents with a customer, for example from a
"Call" button in your CRM.
curl -sS https://app.dialerbee.com/api/v1/calls \
-H "Authorization: Bearer $DIALERBEE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"to": "+12125550101", "agent_extension": "3901"}'
- DialerBee checks that the agent (by
agent_extensionoragent_email) belongs to your account and is signed in and ready, and holds the agent for this call (shown as ringing), so no other call reaches them meanwhile. Otherwise, or when the agent is already held for another call, the answer is 409agent_unavailableand nothing is dialled. - Every compliance check runs before the dial: Do-Not-Call, calling hours, caller ID ownership and
blocked countries. A refusal is 422
dial_refused(errors[0].codesays why),on_dncorblocked_country, nothing is dialled and the agent is free again at once. - DialerBee dials the customer from one of your own verified caller IDs (or the
caller_idyou name, which must be one of your verified numbers: any other number is 422dial_refusedwithcaller_id_not_registered, before anything is dialled) and joins the agent when the customer answers.
The answer is 201 with status: "dialing" and the call_id when the call record can be matched at
once (otherwise null: the call still appears in GET /v1/calls and in the call.completed webhook).
Retry only with the same Idempotency-Key: a new key places a new call.
Speed-to-lead
POST /v1/leads (scope leads:write) adds one lead the moment it arrives, for example from a web form.
It runs the same checks as an import (phone, field rules, duplicates, Do-Not-Call, blocked countries)
and answers with the same per-lead status.
campaign_idmay name a draft, ready, paused or running campaign. A lead in a running campaign, or withdial_now: true, is called by the dialler within seconds, so that request also needs the scopecalls:originate(403insufficient_scopeotherwise) and your account's click-to-call switch (403tier_not_enabledotherwise); nothing is written in either case. It counts against your click-to-call caps.sourcenames one of your lead sources (its code, for examplewebsite); it is kept on the lead as the custom fieldlead_source, so your agents see it.dial_now: trueon a running campaign puts the lead first in the dialling order fordial_within_seconds(30 to 3600, default 300): the next free agent's next call is to this lead, with every compliance check applied at dial time.dial_now.statusin the answer says what happened (queued,campaign_not_running,lead_not_accepted,unavailable).
POST /v1/whatsapp/messages (scope whatsapp:send) sends exactly one of text or an approved
template (name and its params) from your own WhatsApp number. Every message carries your own
client_reference; a second message with the same reference answers 409
duplicate_client_reference and nothing is sent again. A free
text outside the customer's 24-hour service window can be refused by WhatsApp: use a template there.
SMS
POST /v1/sms is Tier 2: it needs the scope messages:send (a sending key) and your
account's SMS switch (Tiers). The number goes through the same compliance checks as the
console first (Do-Not-Call, calling hours, consent, blocked countries, balance), and every message
carries your own client_reference: a repeat is refused and nothing is sent twice.