Early access · The business phone API

Phone infrastructure to grow your platform

Give your vertical SaaS compliant two‑way texting, inbound calling, voicemail, and real phone numbers — through one API, from your customers' first text to your millionth.

send-a-text.sh
# Threading, opt-outs, and 10DLC handled.
curl https://api.handset.dev/v1/messages \
  -H "Authorization: Bearer sk_live_…" \
  -d to="+14154136287" \
  -d body="Your technician is 15 minutes out."

{
  "id": "msg_01kzv9eb36…",
  "status": "queued", "mode": "live"
}

message.delivered

+1 415 413 6287 · just now

  • 10DLCregistered messaging
  • E911address provisioning
  • STOP/HELPCTIA keywords built in
  • HMACsigned webhooks
  • AES-256encrypted EINs at rest

A complete phone system for every business on your platform. Your customers already run their businesses inside your product — then step outside it to text and call their customers. Handset is the phone company behind your API: carrier contracts, 10DLC, CTIA keywords, E911, and multi‑tenant numbers, designed to work as one.

Messaging

/v1/messages

Two-way SMS that threads into conversations per tenant. STOP, HELP, and START handled automatically, opt-outs enforced at send time.

Bayview Dental+1 415 259 5084

Hi Maria — reminder: cleaning tomorrow at 9:30 AM. Reply C to confirm.

C — see you then!

conversation cnv_01kzv9… · delivered

Voice & voicemail

/v1/calls

Inbound calls routed by each tenant's business hours in their own timezone. Greetings, voicemail, recordings, transcripts.

Voicemailafter hours

0:16

+1 415 413 6287

“Hi, calling about a leaky faucet in the…”

Numbers

/v1/phone_numbers

Search, buy, and configure real numbers in one call — E911 included.

+1 415 555 0184Buy · $1/mo

+1 415 555 0271sms · voice

+1 415 555 0339sms · voice

Compliance

/v1/brands

10DLC brands and campaigns as API objects, not support tickets.

Brand · Ridge Plumbingvetted

Campaign · appointmentsapproved

EIN **-***6789 · encrypted

Webhooks

/v1/webhook_endpoints

Nine event types, HMAC-signed, retried until you acknowledge.

message.received200 OK

call.completed200 OK

voicemail.created200 OK

Embed a phone system in your platform. One account, many tenants — each of your customers gets their own numbers, conversations, opt‑out lists, and business hours, isolated by design and billed as one platform.

Start with tenants

Carrier infrastructure, without the carrier.

Ed25519‑verified carrier webhooks in, HMAC‑signed platform events out, a transactional queue in between. You never touch a SIP trunk — but the dial tone is real. Press it.

350 Hz + 440 Hz

The dial tone behind vertical SaaS

0

API

for messaging, voice, numbers, and compliance

0

event types

HMAC-signed webhooks, retried until acknowledged

0

endpoints

spec-first REST, typed SDKs on the way

0

modes

live and test on every account, from day one

Developer experience

Test mode is not an afterthought. Every account ships with parallel live and test keys. Test mode runs a simulated carrier: numbers are free, compliance approves instantly, and magic numbers let you rehearse failure before it happens in production.

sk_test — simulated carrier
# Magic number: simulate a failed delivery
curl https://api.handset.dev/v1/messages \
  -H "Authorization: Bearer sk_test_…" \
  -d to="+15005550001" -d body="…"

→ webhook: message.failed
  "failure_reason": "carrier_rejected"
sk_live — real carrier network
# Same code. Real number, real delivery.
curl https://api.handset.dev/v1/messages \
  -H "Authorization: Bearer sk_live_…" \
  -d to="+14154136287" -d body="…"

→ webhook: message.delivered
  status: "delivered"

Put a handset in your product.

We're onboarding a small group of vertical SaaS platforms. Tell us what your customers need to say, and to whom.