When to use it
Notifications & alerts
Order updates, OTP-style notices, appointment reminders — one API,
delivered through whichever provider is cheapest or required in each
country.
2-way customer conversations
A customer texts your number; your flow answers with an AI agent and
escalates to a human in the contact-center desktop when needed.
Provider redundancy
Per-prefix routing ladders: route +91 through your DLT route with a global
fallback, and fail over automatically when a provider errors.
Local aggregators
Wire a bespoke provider yourself: the generic HTTP provider covers simple
one-endpoint APIs from configuration, and custom manifests let you define
a full provider (auth, receipts, inbound) without waiting on us.
How it works
- Providers are manifests. Twilio, Vonage, Plivo, Bird, MSG91, Textlocal and AWS SNS ship built in; each is a declarative spec (auth, send template, response parser, receipt/inbound parsers, error map). Adding a provider is adding a manifest — the console’s credential form, capability badges and webhook URLs all derive from it.
- Sends are durable.
POST /api/sms/v1/messages(or the console) enqueues the message; a delivery pump picks the provider ladder for the destination, paces per-provider rate limits, retries with backoff, and fails over to the next provider on retryable errors. Status moves forward only:queued → sent → delivered / undelivered / failed. - Receipts and inbound are hosted webhooks. Each provider account gets a
pair of unguessable URLs to paste into the provider console. Delivery
receipts update message status and fire
sms.message.*webhooks to your endpoints; inbound messages open 2-way conversation threads. - Campaigns are paced blasts. Upload a CSV (first column
phone; other columns become{slots}in the message template), set a rate, and the campaign drains through the same pipeline — routing ladders, provider rate limits and delivery receipts included. Recipients who ever texted STOP are skipped automatically. - STOP / START are handled for you. A whole-message STOP-family keyword
on any inbound number records an opt-out that blocks every further send to
that recipient (campaign and transactional) and fires an
sms.optout.createdwebhook; START lifts it. The Opt-outs tab shows and manages the list. - Bring your own provider. Admins can upload a custom provider manifest
(the same declarative contract the built-ins use — auth style, send
template, response parsing, receipt/inbound mappings) under an
x-…id. It appears in the provider picker like any shipped provider; the send host must be literal https and passes the platform’s egress checks on save and on every send. - Conversations ride the chat engine. An inbound thread becomes a
headless chat conversation bound to the vector flow you attach to the
number — AI text agents, skill queues, human agents, transcripts and
chat.*events all included.
API
sms vertical):
sms.message.sent, sms.message.delivered, sms.message.undelivered,
sms.message.failed, sms.message.received, sms.optout.created,
sms.campaign.completed.
Honest limits
- MMS media on inbound messages is stored as provider URLs, not fetched.
- Providers without delivery-receipt webhooks (e.g. AWS SNS in this shape)
stop at
sent. - Campaign templates substitute
{column}slots from your CSV; there is no visual flow designer for campaigns yet — conversational flows belong to the inbound vector, not the blast.