Four channels, one set of records. Voice and SMS are provisioned and routed here; email broadcast and live chat sit alongside them. What a caller or texter experiences is defined by a routing record — ivr_routing for calls, sms_routing for texts — and both are edited in the same IVR surface.
Phone and voice
Numbers
/phone/numbersJWT/phone/numbers/:phoneIdJWT/phone/availableJWT/phone/numbersJWT/phone/numbers/addJWT/phone/numbers/:phoneIdJWT/phone/numbers/:phoneIdJWTavailable searches the provider's inventory; numbers purchases from it. numbers/add registers a number you already own instead of buying one.
/phone/setupJWT/phone/verifyJWT/phone/migration/statusJWTA number can also be nominated for org-wide duty:
/phone/systemJWT/phone/systemJWT/phone/systemJWT/phone/sms-numberJWT/phone/sms-numberJWT/phone/sms-numberJWTPointing a number at a flow
/phone/numbers/:phoneId/routingJWTThe body is { mode: 'voice' | 'ivr' }, and the mode decides which webhook the provider calls:
| Mode | Provider posts to | Behavior |
|---|---|---|
voice | /connect/webhook/twilio/voice | Direct dial to a user, group or client |
ivr | /connect/webhook/twilio/ivr-menu | Runs the IVR flow on the matching ivr_routing |
Both webhook endpoints are public — the provider is not authenticated as a user — and return TwiML. Inbound calls match an ivr_routing whose phoneNumbers contains the called number and whose enabled is true; priority (0–100, higher first) breaks ties.
Four ways to answer
routingType on the record picks one:
| Type | What the caller gets |
|---|---|
forward | Rings a forwarding group, with an optional greeting first |
ai-assistant | An AI receptionist converses, then transfers |
simple_menu | A DTMF menu — press 1 for sales — with retries and a catch-all |
automation_flow | A full automation with IVR actions, for conditional logic and payments |
The AI assistant reads the same menus and forwardingGroups as simple_menu: option labels become intents, and each menu's aiInstructions adds routing guidance. Configure routing once and switch routingType without rebuilding it.
Forwarding groups
Where calls ring. Defined once on the record, referenced by id from menu options, transfer rules and fallbacks.
| Strategy | Behavior |
|---|---|
simultaneous | Ring every target at once, first to answer wins |
sequential | Ring targets one at a time, in order |
round-robin | Rotate who rings first, with the counter persisted between calls |
Targets are typed phone (E.164), agent, queue or sip. When nobody answers, fallback decides: voicemail, ai-assistant, automation or hangup. Optional whisper announces the caller to whoever picks up, and screening makes them press a key to accept.
Hours and misses
businessHours selects a different menu or automation per period through menuAssignments / automationAssignments (normalHours, afterHours, holiday). Precedence is off days > holidays > office hours > normal-hours fallback.
missedCallActions fire together when nobody answers — sms back to the caller (with cooldownMinutes), email to a team, lead creation, automation, or a webhook.
Softphone
/phone/tokenJWT/phone/user-phonesJWT/phone/voice/appJWT/phone/voice/appJWT/phone/voice/voicesJWT/phone/voice/register-deviceJWT/phone/voice/heartbeatJWT/phone/voice/unregister-deviceJWT/phone/voice/devicesJWTtoken mints the client credential a browser or mobile softphone dials with. Registered devices must heartbeat to stay in the presence list, which is what makes agent targets ring.
Datatypes: ivr_routing, sms_routing, phone, call, call_log, message.
SMS
Registration
US long codes must clear A2P 10DLC before they can send.
/phone/numbers/sms-status/:phoneIdJWT/phone/numbers/:phoneId/sms-requirementsJWT/phone/numbers/register-sms/:phoneIdJWT/phone/a2p/brandJWTsms-requirements tells you what the carrier still wants; sms-status tracks the verification.
Inbound routing
An sms_routing record is the SMS counterpart to ivr_routing. Its core is responseFlows, selected by flowAssignments on the same business-hours logic as voice. Each flow can carry an autoReply (with cooldownMinutes), its own keywords, an AI assistant, and forwarding.
Keywords match before the flow runs:
| Field | Values |
|---|---|
matchType | exact, contains, startsWith, regex |
action | auto-reply, go-to-flow, fill-form, forward-sms, ai-assistant, trigger-automation, create-lead, add-tag, opt-out, opt-in |
Opt-out
On by default. STOP, UNSUBSCRIBE, CANCEL, END and QUIT opt a sender out; START, SUBSCRIBE and YES opt them back in. Both lists and both confirmation messages are overridable per record — but leaving opt-out off is a compliance problem, not a feature.
Bulk and transactional email runs through broadcast, with sender domains verified first.
/broadcast/:id/sendJWT/broadcast/:id/cancelJWT/broadcast/:id/duplicateJWT/broadcast/:id/reportJWT/broadcast/:id/statsJWT/broadcast/domains/registerJWT/broadcast/domains/register-emailJWT/broadcast/domains/auto-configureJWT/broadcast/domains/status/:domainJWT/broadcast/domains/email-status/:emailJWT/broadcast/domains/register/:domainJWT/broadcast/validate/domain/:domainJWT/broadcast/validate/email/:emailJWT/broadcast/healthJWT/broadcast/health/:accountId/checkJWT/broadcast/activityJWT/broadcast/sentJWT/broadcast/statsJWThealth is the deliverability view — a warm domain that starts bouncing shows up here before your open rates do.
Datatypes: email_broadcast, email_account, email_account_health, broadcast_delivery, messagetemplate, subscriber.
Chat
/chat/agents/onlineJWT/chat/agents/:email/presenceJWT/chat/agents/:email/statusJWT/chat/customers/onlineJWT/chat/customers/:email/journeyJWT/chat/presence/statsJWT/chat/queueJWT/chat/queueJWT/chat/queue/statsJWT/chat/queue/position/:chatIdJWT/chat/queue/:chatIdJWT/chat/sessionsJWT/chat/config/:chatIdJWT/chat/live/:chatId/:userIdJWT/chat/upload/:chatId/:userIdJWT/chat/ice-serversJWTice-servers supplies the STUN/TURN configuration for voice and video escalation out of a chat.
Provider connections
Channels are bound to vendors through Connect, which holds the credentials and receives the callbacks — Twilio for voice and SMS, Mailgun, SendGrid and SES for email, WhatsApp for messaging. See Connect.
Related
- IVR — phone menus as automations
- Communications — stored call, SMS and voicemail history
- Phone, SMS & IVR — the same thing from the admin UI
- Service rates — what numbers, calls and SMS cost