Phone API
API-first telephony service for AI agents. Provision phone numbers, place and receive calls with bidirectional audio streaming, receive and manage SMS/MMS text messages, retrieve transcripts, and subscribe to events via webhooks.
API base URL:
Quick start
Create an account and get your API key from the Inkbox console:
All API requests require authentication using a API key:
Phone Numbers
Provision phone number
POSTProvision a new local phone number
Release phone number
DELETERelease a phone number from your organization
List phone numbers
GETList all phone numbers for your organization
Get phone number
GETGet a single phone number by ID
Update phone number
PATCHUpdate incoming call action, WebSocket URL, or webhook URL
Calls
Place call
POSTInitiate an outbound call with bidirectional audio streaming
List calls
GETList calls for an agent identity, newest first
Get call
GETGet a single call by ID
List Voice AI tool activity
GETList safe, paginated tool activity for a call
Hang up call
POSTEnd a live call by ID, from outside the call
Inkbox Voice AI configuration
Get Voice AI configuration
GETRead an identity's Voice AI configuration
Update Voice AI configuration
PUTReplace an identity's voice, model, and instructions
Set Voice AI authority mode
PUTSet the default authority mode for future Voice AI calls
Incoming calls
Set incoming call action
PUTConfigure inbound call handling for an agent identity
Get incoming call action
GETRead the inbound call configuration for an agent identity
Texts
Send text
POSTSend an outbound SMS from one of your phone numbers
List texts
GETList SMS and MMS messages for a phone number
Get text
GETGet a single text message by ID
Update text
PATCHMark as read or delete a text message
Search texts
GETFull-text search across text messages
List conversations
GETList conversation summaries with unread counts
Get conversation
GETGet all messages with a specific remote number
Update conversation
PATCHBulk-update read state for all messages in a conversation
Transcripts
List transcripts
GETList transcript segments for a call, ordered by sequence
Search transcripts
GETFull-text search across transcripts for a phone number
Contact rules
Per-identity allow and block rules interpreted against the identity's phone_filter_mode (blacklist by default, whitelist on demand), covering inbound calls and texts. See the Contact rules reference and the Phone guide for semantics. The legacy per-number routes under /numbers/{phone_number_id}/contact-rules are deprecated — migrate to the handle-keyed routes below.
List contact rules
GETList allow/block rules for an agent identity
Create contact rule
POSTAdd an allow or block rule (E.164 exact match)
Get contact rule
GETFetch a single rule by ID
Update contact rule
PATCHChange a rule's action (admin-only)
Delete contact rule
DELETEDelete a rule (admin-only)
List org phone contact rules
GETOrg-wide aggregate list across every identity (admin-only)
SMS opt-ins
Per-recipient SMS consent state for your organization. Reads are open to admin-scoped API key holders and callers from the Inkbox Console; writes require your org to be on its own active, customer-managed 10DLC campaign. See the SMS opt-ins reference for the full schema and the customer-campaign gate.
List opt-ins
GETList the consent rows for your organization
Get opt-in
GETLook up the consent state for one recipient
Opt in recipient
POSTMark a recipient as opted in (requires active, customer-managed 10DLC campaign)
Opt out recipient
POSTMark a recipient as opted out (requires active, customer-managed 10DLC campaign)
Webhooks
Text events (text.*) are delivered via the Webhook Subscriptions API — attach a subscription to the phone number with the subset you want. The call-lifecycle event (call.ended) is delivered the same way, via a subscription on the agent identity. The incoming-call event stays on the phone number resource: set incoming_call_webhook_url via PATCH /numbers/{phone_number_id} because the response body controls call routing. See the Webhooks guide for event types, payload format, and signature verification.
Filtering by date
Date filtering applies to the comms list endpoints — List calls (GET /calls, and the deprecated GET /numbers/{phone_number_id}/calls alias), List texts (GET /numbers/{phone_number_id}/texts), and List conversations (GET /numbers/{phone_number_id}/texts/conversations). These accept three optional query parameters that filter results by when each record was created (created_at, stored in UTC); other phone list endpoints (such as list phone numbers and list transcripts) do not support them. All three are optional and fully backwards-compatible — omit them and the endpoint behaves exactly as before, with no filtering applied.
| Parameter | Type | Default | Description |
|---|---|---|---|
start_datetime | string | — | Inclusive lower bound. A bare date (2026-07-01) starts at 00:00 of that day; a datetime with a Z or offset is used as an exact instant |
end_datetime | string | — | Upper bound, inclusive. A bare date (2026-07-06) covers the whole day; a datetime with a Z or offset is an exact instant, and records created at exactly that instant are included |
tz | string | UTC | IANA time zone (e.g. America/New_York) used to interpret zone-less values. Defaults to UTC |
- A bare date in
end_datetimeis inclusive of the entire day —end_datetime=2026-07-06returns records through the last moment of the 6th. - A datetime with an explicit
Zor offset (2026-07-06T15:30:00Z,2026-07-06T11:30:00-04:00) is an exact instant;tzis ignored for that value. - A naive datetime (
2026-07-01T12:00:00) is interpreted intz(UTC whentzis omitted). - Supply only one side for an open-ended range. Ordering, pagination, and all other filters are unchanged.
- Invalid input returns
422:start_datetimeafterend_datetime, an unparseable date, or an unknown time zone.
A bare-date range (interpreted in UTC):
Interpret those bare dates in a specific zone:
Filter from an exact instant (tz ignored):