Use cases · Replace Twilio
You built a phone company inside your product. Retire it.
Teams that built messaging on raw CPaaS own subaccount plumbing, opt-out bookkeeping, 10DLC orchestration, and webhook glue nobody wants to maintain. Handset is the application layer you were forced to write — multi-tenant, compliant, and billed on usage — with your send calls staying almost identical.
Tenants, not subaccounts
Your end customers are first-class: numbers, threads, hours, and opt-out lists hang off tenants natively instead of subaccount scaffolding you maintain.
Delete your compliance code
STOP/HELP keywords, send-time opt-out checks, and 10DLC campaign state machines move from your codebase to our platform.
Threading included
conversation_id on every message — the inbox view you hand-rolled becomes a GET.
Voice is already there
The 'someday' voice integration — routing, voicemail, transcripts — works the day you switch, no extra vendor.
// Before: Twilio + your own threading/opt-out/compliance code client.messages.create({ from, to, body }) // …plus 2,000 lines you maintain // After: the platform layer is the product await sendMessage({ body: { from, to, body } }); → threads, opt-outs, 10DLC, receipts: handled
Migrating? Design partners get white-glove 10DLC re-registration and a founder on the call. Number porting is on the near-term roadmap — tell us your inventory and we'll sequence it.
How it maps to the API
1 · Tenants & numbers
Map subaccounts to tenants
One import loop: create tenants, buy or (soon) port numbers into them.
Learn more2 · Messaging
Point your triggers at one endpoint
Your existing send calls become POST /v1/messages — same shape, less code around it.
Learn more3 · Compliance
Re-register campaigns by API
Brands and campaigns as objects with approval webhooks, per tenant.
Learn moreSound like your platform?
Three design-partner slots: free early access, white-glove 10DLC, and a founder on the call.