Skip to main content
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:

Get API key

All API requests require authentication using a API key:

Phone Numbers

Provision phone number

Provision a new local phone numberPOST /api/v1/phone/numbers

Release phone number

Release a phone number from your organizationDELETE /api/v1/phone/numbers/{phone_number_id}

List phone numbers

List all phone numbers for your organizationGET /api/v1/phone/numbers

Get phone number

Get a single phone number by IDGET /api/v1/phone/numbers/{phone_number_id}

Update phone number

Update incoming call action, forwarding target, WebSocket URL, or webhook URLPATCH /api/v1/phone/numbers/{phone_number_id}

Calls

Place call

Initiate an outbound call with bidirectional audio streamingPOST /api/v1/phone/place-call

List calls

List calls for an agent identity, newest firstGET /api/v1/phone/calls

Get call

Get a single call by IDGET /api/v1/phone/calls/{call_id}

List Voice AI tool activity

List safe, paginated tool activity for a callGET /api/v1/phone/calls/{call_id}/tool-invocations

Hang up call

End a live call by ID, from outside the callPOST /api/v1/phone/calls/{call_id}/hangup

Inkbox Voice AI configuration

List Voice AI voices

Discover supported voices, sample URLs, and current availabilityGET /api/v1/phone/hosted-agent-voices

Get Voice AI configuration

Read an identity’s Voice AI configurationGET /api/v1/phone/hosted-agent-config

Update Voice AI configuration

Replace an identity’s voice and instructionsPUT /api/v1/phone/hosted-agent-config

Set Voice AI authority mode

Set the default authority mode for future Voice AI callsPUT /api/v1/phone/hosted-agent-config/authority-mode

Incoming calls

Set incoming call action

Configure inbound answering, webhooks, rejection, or forwardingPUT /api/v1/phone/incoming-call-action

Get incoming call action

Read the inbound call configuration for an agent identityGET /api/v1/phone/incoming-call-action

Texts

Send text

Send an outbound SMS from one of your phone numbersPOST /api/v1/phone/numbers/{phone_number_id}/texts

List texts

List SMS and MMS messages for a phone numberGET /api/v1/phone/numbers/{phone_number_id}/texts

Get text

Get a single text message by IDGET /api/v1/phone/numbers/{phone_number_id}/texts/{text_id}

Update text

Mark as read or delete a text messagePATCH /api/v1/phone/numbers/{phone_number_id}/texts/{text_id}

Search texts

Full-text search across text messagesGET /api/v1/phone/numbers/{phone_number_id}/texts/search

List conversations

List conversation summaries with unread countsGET /api/v1/phone/numbers/{phone_number_id}/texts/conversations

Get conversation

Get all messages with a specific remote numberGET /api/v1/phone/numbers/{phone_number_id}/texts/conversations/{remote_number}

Update conversation

Bulk-update read state for all messages in a conversationPATCH /api/v1/phone/numbers/{phone_number_id}/texts/conversations/{remote_number}

Transcripts

List transcripts

List transcript segments for a call, ordered by sequenceGET /api/v1/phone/calls/{call_id}/transcripts

Search transcripts

Full-text search across transcripts for a phone numberGET /api/v1/phone/numbers/{phone_number_id}/search

Contact rules

Per-identity allow and block entries use the identity’s phone_filter_mode (blacklist by default, whitelist on demand) for incoming and outgoing SMS, calls, and iMessage. imessage_filter_mode is an alias for the same mode. 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; use the handle-keyed routes below.

List contact rules

List allow/block rules for an agent identityGET /api/v1/identities/{agent_handle}/phone-contact-rules

Create contact rule

Add an allow or block rule (E.164 exact match)POST /api/v1/identities/{agent_handle}/phone-contact-rules

Get contact rule

Fetch a single rule by IDGET /api/v1/identities/{agent_handle}/phone-contact-rules/{rule_id}

Update contact rule

Change a rule’s action (admin-only)PATCH /api/v1/identities/{agent_handle}/phone-contact-rules/{rule_id}

Delete contact rule

Delete a rule (admin-only)DELETE /api/v1/identities/{agent_handle}/phone-contact-rules/{rule_id}

List org phone contact rules

Org-wide aggregate list across every identity (admin-only)GET /api/v1/phone/contact-rules

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

List the consent rows for your organizationGET /api/v1/phone/sms-opt-ins

Get opt-in

Look up the consent state for one recipientGET /api/v1/phone/sms-opt-ins/{receiver_number}

Opt in recipient

Mark a recipient as opted in (requires active, customer-managed 10DLC campaign)POST /api/v1/phone/sms-opt-ins/{receiver_number}/opt-in

Opt out recipient

Mark a recipient as opted out (requires active, customer-managed 10DLC campaign)POST /api/v1/phone/sms-opt-ins/{receiver_number}/opt-out

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.
  • A bare date in end_datetime is inclusive of the entire day — end_datetime=2026-07-06 returns records through the last moment of the 6th.
  • A datetime with an explicit Z or offset (2026-07-06T15:30:00Z, 2026-07-06T11:30:00-04:00) is an exact instant; tz is ignored for that value.
  • A naive datetime (2026-07-01T12:00:00) is interpreted in tz (UTC when tz is omitted).
  • Supply only one side for an open-ended range. Ordering, pagination, and all other filters are unchanged.
  • Invalid input returns 422: start_datetime after end_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):

Additional resources