Quick start
Create an account and get your API key from the Inkbox console:Get API key
- iMessage is opt-in per identity. Set
imessage_enabled: truewhen creating or updating an identity. - Standard shared-service conversations start with the human. Recipients connect to a shared identity by texting
connect @your-handleto the router number. - Organization-owned shared pools (Beta) are available only by request. Organizations with their own organization-owned shared iMessage pool can connect a recipient and submit an opening message without the router flow.
- A dedicated line can start conversations. An identity with an attached dedicated line can start new 1:1 conversations and group chats with 2-8 E.164 recipients. Keep the returned
conversation_idas the canonical group key. Group creation is asynchronous, and conversation reads reportgroup_creation_statusascreating,not_created, orready. Existing lists exclude groups unlessinclude_groups=true.
Dedicated lines
Dedicated lines belong to your organization and can be attached to an iMessage-enabled identity. Every dedicated line can start new 1:1 conversations and group chats. Shared service dynamically assigns a line only after someone connects to your agent. Dedicated lines can also receive 1:1 messages from non-phone sender addresses. Read these messages through the existing APIs andimessage.received webhooks. These conversations are receive-only; outbound recipients must still be E.164 phone numbers.
List dedicated lines
Response (200)
JSON
bash
Claim a dedicated line
Idempotency-Key header:
Request body
JSON
Response (201)
Returns one unattached dedicated-line object with the same schema as the list endpoint. Its response-onlytype field remains "dedicated_outbound" for compatibility.
JSON
Idempotency
- Retry the same logical claim with the same key to receive its original result.
- Reusing the key with different input returns
409. - Generate a new key only for a genuinely new claim.
bash
Error responses
Attach or detach an organization-owned line through
PATCH /api/v1/identities/{agent_handle}. Detaching does not release the line; there is no customer-facing line-release endpoint.
Router
Get router number
The active router number and the command humans text to connectGET
/api/v1/imessage/triage-numberMessaging capability
Check messaging capability
Check whether a phone number is currently reachable over iMessage, SMS, or RCSGET
/api/v1/imessage/check-messaging-capabilityMessages
Send message
Send 1:1 or group iMessagesPOST
/api/v1/imessage/messagesGet message
Read current delivery status, error fields, and reply relationshipsGET
/api/v1/imessage/messages/{message_id}Get a reply thread
Read the visible root and replies, oldest first, from any member messageGET
/api/v1/imessage/messages/{message_id}/threadList messages
List iMessages visible to the caller, newest firstGET
/api/v1/imessage/messagesUpload media
Upload a file and get a URL usable in media_urlsPOST
/api/v1/imessage/mediaConversations
Connect a recipient
Available only by request for organizations with their own organization-owned shared iMessage poolPOST
/api/v1/imessage/connectDisconnect a recipient
Disconnect by agent identity and recipient phone numberPOST
/api/v1/imessage/disconnectList conversations
List conversation summaries with latest-message previews and unread countsGET
/api/v1/imessage/conversationsGet conversation
Get a single conversation by IDGET
/api/v1/imessage/conversations/{conversation_id}Get conversation thread
Read one reply thread by its conversation and opaque thread IDGET
/api/v1/imessage/conversations/{conversation_id}/threads/{thread_id}List connections
List recipients currently connected to an agent identityGET
/api/v1/imessage/assignmentsRelease connection
Disconnect a recipient from an agent identityDELETE
/api/v1/imessage/assignments/{assignment_id}Mark conversation read
Send a read receipt and mark inbound messages readPOST
/api/v1/imessage/mark-readSend typing indicator
Show the typing bubble to the conversation’s recipientPOST
/api/v1/imessage/typingTapbacks
Send tapback
React to a message; a new tapback replaces your previous onePOST
/api/v1/imessage/reactionsRemove tapback
Take back a tapback your agent sentDELETE
/api/v1/imessage/reactions/{reaction_id}Contact rules
Per-identity allow and block entries share one phone policy for SMS/MMS, calls, and iMessage.imessage_filter_mode and phone_filter_mode set both defaults (blacklist initially); canonical phone_inbound_filter_mode and phone_outbound_filter_mode customize each direction. Rules cover inbound, outbound, or both (the create default). Shared-line connection setup requires both effective permissions without granting them; dedicated-line traffic checks its own direction. See the Contact rules reference and the iMessage guide.
List contact rules
List allow/block rules for an agent identityGET
/api/v1/imessage/identities/{agent_handle}/contact-rulesCreate contact rule
Add an allow or block rule (E.164 exact match)POST
/api/v1/imessage/identities/{agent_handle}/contact-rulesGet contact rule
Fetch a single rule by IDGET
/api/v1/imessage/identities/{agent_handle}/contact-rules/{rule_id}Update contact rule
Change a rule’s action (admin-only)PATCH
/api/v1/imessage/identities/{agent_handle}/contact-rules/{rule_id}Delete contact rule
Delete a rule (admin-only)DELETE
/api/v1/imessage/identities/{agent_handle}/contact-rules/{rule_id}List org iMessage contact rules
Org-wide aggregate list across every identity (admin-only)GET
/api/v1/imessage/contact-rulesWebhooks
Inbound events (imessage.received, imessage.reaction_received) and outbound delivery-lifecycle events (imessage.sent, imessage.delivered, imessage.delivery_failed) are delivered via the Webhook Subscriptions API — attach a subscription to the agent identity with the subset you want. See the iMessage webhooks reference for event types, payload format, and signature verification.
Filtering by date
Date filtering applies to two list endpoints — List messages (GET /messages) and List conversations (GET /conversations). These accept three optional query parameters that filter results by when each record was created (created_at, stored in UTC); other iMessage list endpoints (such as list connections and list contact rules) 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_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.
tz ignored):

