Skip to content
Inkbox

Inkbox

DocsPricingBlogContact
GuidesAPI ReferenceChangelog

Ctrl K

GuidesAPI ReferenceChangelog

Jump to

Conversations

A conversation is one stable iMessage thread owned by an agent identity. Shared and dedicated inbound conversations are 1:1 and start when a human messages the agent. A dedicated outbound number can also start 1:1 conversations and group chats. Conversations persist as history after a 1:1 connection is released or a dedicated number is detached.

For 1:1 conversations, assignment_status reflects the current connection: "active" means the recipient is connected right now, and "released" means they disconnected. Group conversations instead return null assignment_id, assignment_status, and remote_number, plus is_group: true, a best-known participants list, and group_creation_status.


List conversations GET

GET /conversations

List conversation summaries ordered by most recent message, with latest-message preview and unread count.

Query parameters

ParameterTypeDefaultDescription
agent_identity_idUUID-Narrow to one identity. Ignored for identity-scoped API keys, which always see their own identity
include_groupsbooleanfalseInclude group conversations. Groups are excluded before pagination when false
limitinteger50Number of results (1-200)
offsetinteger0Pagination offset
is_blockedboolean-Filter by blocked state of the underlying messages. true summarizes blocked rows only, false non-blocked rows only, and omitting it applies the caller's default visibility
start_datetimestring-Only conversations created on or after this date/time
end_datetimestring-Only conversations created on or before this date/time; a bare date includes the whole day
tzstringUTCIANA zone for interpreting zone-less start_datetime/end_datetime values. Defaults to UTC

Identity-scoped API keys never see blocked rows in conversation summaries. With is_blocked=false, previews, ordering, unread counts, and totals are computed from non-blocked rows only.

start_datetime, end_datetime, and tz filter on the conversation's created_at — when the conversation was created, not its latest-message time. This list is ordered by most recent message, but the date filter is on creation time. Previews, unread counts, totals, and ordering still describe the full conversation — they are not sliced to the window. Both bounds are optional and non-breaking — omit them for unchanged behavior. See Filtering by date.

Response (200)

JSONJSON

Error responses

StatusDescription
400agent_identity_id names an identity that is not enabled for iMessage
403Identity-scoped key passed an agent_identity_id other than its own
404agent_identity_id not found, or not visible to the caller

Get conversation GET

GET /conversations/{conversation_id}

Get a single 1:1 or group conversation by ID. Known group UUIDs work directly even though group list results are opt-in. To read the messages in it, use GET /messages?conversation_id=....

Path parameters

ParameterTypeDescription
conversation_idUUIDUnique identifier of the conversation

Query parameters

ParameterTypeDescription
agent_identity_idUUIDOptional identity assertion — returns 404 if the conversation belongs to a different identity

Response (200)

JSONJSON

For a group, group_creation_status is "creating" while the first send is establishing the group, "not_created" before creation or after a definitive creation failure, and "ready" after the group is established. A failed creation attempt remains in the same conversation's message history; send another message using its conversation_id to retry. See Group creation lifecycle.

Error responses

StatusDescription
404Conversation not found, belongs to another organization, or belongs to a different identity than asserted

Conversation projections GET

The bounded projection list follows the same compatibility rule: GET /conversation-projections defaults to include_groups=false, and GET /conversation-projections?include_groups=true opts groups in before pagination. GET /conversation-projections/{conversation_id} reads a known group directly.

Projection conversation objects add the same participants and is_group fields and return null assignment/recipient fields for groups. They do not include group_creation_status. MCP conversation reads use this projection surface; MCP can read opted-in groups but cannot send or perform group actions in V1.


List connections GET

GET /assignments

List active iMessage connections, newest first — one row per recipient currently connected to an agent identity through the router. Released connections are not returned; use assignment_status on conversation reads to detect a disconnect after the fact.

Query parameters

ParameterTypeDefaultDescription
agent_identity_idUUID-Narrow to one identity. Ignored for identity-scoped API keys, which always see their own identity
limitinteger50Number of results (1-200)
offsetinteger0Pagination offset

Response (200)

JSONJSON

Error responses

StatusDescription
403Identity-scoped key passed an agent_identity_id other than its own
404agent_identity_id not found, or not visible to the caller

Mark conversation read POST

POST /mark-read

Send a read receipt to the human — they see "Read" under their latest message — and mark the conversation's inbound messages as read.

Request body

FieldTypeRequiredDescription
conversation_idUUIDYesThe conversation to mark read

Request example

JSONJSON

Response (200)

JSONJSON

updated_count: 0 means no inbound messages needed updating; the read receipt is still sent.

Error responses

StatusDescription
400The conversation's identity is not enabled for iMessage
403The conversation's recipient is blocked by a contact rule
404Conversation not found, or not visible to the caller
409The recipient has disconnected, or the conversation is a group and read receipts are not supported for groups
502Upstream delivery failure — safe to retry

Send typing indicator POST

POST /typing

Show the typing bubble to a 1:1 conversation's recipient — useful while your agent prepares a longer reply. The indicator clears on its own or when the next message arrives. Group conversations do not support typing indicators.

Request body

FieldTypeRequiredDescription
conversation_idUUIDYesThe conversation whose recipient should see the typing bubble

Response (200)

JSONJSON

Error responses

StatusDescription
400The conversation's identity is not enabled for iMessage
403The conversation's recipient is blocked by a contact rule
404Conversation not found, or not visible to the caller
409The recipient has disconnected, or the conversation is a group and typing indicators are not supported for groups
502Upstream delivery failure — safe to retry

Conversation object

FieldTypeDescription
idstring (UUID)Stable conversation key for reads, replies, and supported actions
assignment_idstring (UUID) | nullThe 1:1 connection carrying the conversation; null for groups
assignment_statusstring | null"active" or "released" for 1:1 conversations; null for groups
remote_numberstring | nullHuman's E.164 phone number for a 1:1 conversation; null for groups
participantsstring[]One E.164 phone number for a 1:1 conversation, or the append-only best-known participant history for a group
is_groupbooleanWhether this is an iMessage group chat
group_creation_statusstring | nullGroup creation lifecycle: "creating", "not_created", or "ready"; null for 1:1 conversations
created_atstring (ISO 8601)Creation timestamp
updated_atstring (ISO 8601)Last update timestamp

Conversation summary object

Returned by List conversations; adds latest-message preview fields:

FieldTypeDescription
latest_textstring | nullLatest message body preview
latest_message_atstring (ISO 8601) | nullLatest message timestamp
latest_directionstring | nullDirection of the latest message
latest_has_mediabooleanWhether the latest message carries media
unread_countintegerUnread inbound message count in the summarized view
total_countintegerTotal message count in the summarized view

Group summaries use the same nullable assignment/remote fields and participants, is_group, and group_creation_status fields as the conversation object. Groups appear only when include_groups=true.

Connection object

Returned by List connections. The pool line carrying the connection is managed by Inkbox and never appears in API responses.

FieldTypeDescription
idstring (UUID)Connection ID — matches assignment_id on conversations
remote_numberstringThe connected human's phone number (E.164)
agent_identity_idstring (UUID)The agent identity the human is connected to
organization_idstringOwning organization
statusstringAlways "active" on returned rows — released connections are not listed
released_atstring (ISO 8601) | nullWhen the connection was released; null while active
created_atstring (ISO 8601)When the human connected
updated_atstring (ISO 8601)Last update timestamp

Inkbox

Copyright © 2026 Inkbox

This site is protected by reCAPTCHA.

Google Privacy Policy and Terms of Service apply.

Website

Inkbox

Copyright © 2026 Inkbox

This site is protected by reCAPTCHA.

Google Privacy Policy and Terms of Service apply.

Website

Y CombinatorBacked by Y Combinator
Conversations