Developers
API reference
One REST API at https://api.handset.dev. Authenticate with a bearer key; sk_test keys hit the simulated carrier, sk_live keys hit the real one. Mutating requests accept an Idempotency-Key header; lists paginate with cursors; errors share one typed envelope.
# Every request: bearer auth over HTTPS curl https://api.handset.dev/v1/tenants \ -H "Authorization: Bearer sk_test_…"
Tenants
Your customers. Every other resource hangs off a tenant.
| POST | /v1/tenants | Create a tenant |
| GET | /v1/tenants | List tenants (cursor-paginated) |
| GET | /v1/tenants/{id} | Retrieve a tenant |
| PATCH | /v1/tenants/{id} | Update a tenant |
| DELETE | /v1/tenants/{id} | Delete a tenant |
Phone numbers
Search, purchase, configure, and release real numbers.
| GET | /v1/phone_numbers/search | Search available numbers by area code |
| POST | /v1/phone_numbers | Purchase a number for a tenant |
| GET | /v1/phone_numbers | List numbers |
| GET | /v1/phone_numbers/{id} | Retrieve a number |
| DELETE | /v1/phone_numbers/{id} | Release a number |
| POST | /v1/e911_addresses | Register an emergency address |
| GET | /v1/e911_addresses/{id} | Retrieve an emergency address |
Messaging
Two-way SMS with threading and opt-out enforcement.
| POST | /v1/messages | Send a message (Idempotency-Key supported) |
| GET | /v1/messages | List messages |
| GET | /v1/messages/{id} | Retrieve a message |
| GET | /v1/conversations | List conversations |
| GET | /v1/conversations/{id} | Retrieve a conversation |
| GET | /v1/opt_outs | List opt-outs for a tenant |
Voice
Calls, routing, voicemail, and recordings.
| GET | /v1/calls | List calls |
| GET | /v1/calls/{id} | Retrieve a call and its timeline |
| GET | /v1/voicemails | List voicemails |
| GET | /v1/voicemails/{id} | Retrieve a voicemail with transcript |
| GET | /v1/recordings/{id} | Retrieve a recording |
| PATCH | /v1/tenants/{id}/routing_config | Set hours, greeting, and voicemail behavior |
| GET | /v1/tenants/{id}/routing_config | Retrieve routing configuration |
Compliance
10DLC brands and campaigns as API objects.
| POST | /v1/brands | Register a brand (EIN encrypted at rest) |
| GET | /v1/brands | List brands |
| GET | /v1/brands/{id} | Retrieve a brand (EIN masked) |
| POST | /v1/campaigns | Create a campaign under a vetted brand |
| GET | /v1/campaigns | List campaigns |
| GET | /v1/campaigns/{id} | Retrieve a campaign |
Webhook endpoints
Where your platform receives signed events.
| POST | /v1/webhook_endpoints | Create an endpoint (secret returned once) |
| GET | /v1/webhook_endpoints | List endpoints |
| GET | /v1/webhook_endpoints/{id} | Retrieve an endpoint |
| PATCH | /v1/webhook_endpoints/{id} | Update URL or subscribed events |
| DELETE | /v1/webhook_endpoints/{id} | Delete an endpoint |
Get keys and start building.
Early-access partners get live and test keys, plus a direct line to the team building the API.