Skip to main content
The Chert Messaging API is a tenant-scoped HTTP API for iMessage. Use it when your product already has a UI and you want Chert to handle lines, delivery, replies, and conversation state.
Chert may route a tenant through different managed delivery infrastructure, but the public API contract stays the same. These docs only cover endpoints Chert supports through the shared API surface.

The model

ObjectWhat it means
TenantYour isolated workspace. Authenticated by bearer token or HMAC signature.
Phone numberA Chert-managed sender line assigned to your tenant’s project.
ChatA 1:1 or group conversation id used with chat-scoped routes such as /chats/{id}/messages. Chat-scoped sends use the chat’s current sender line.
MessageOne outbound or inbound item in a chat. Message-scoped routes such as /messages/{id}/react use the message id, not the chat id.
EventDurable reply/delivery record delivered by webhook, polling, or SSE.

Route ids

Route family{id} means
/api/v1/chats/{id}/...chat_id
/api/v1/messages/{id}/...message_id

Common flows

GoalAPI path
Send one text message fastPOST /api/v1/send
Send a one-time location pinPOST /api/v1/locations
Build a conversation UIPOST /api/v1/chats, then POST /api/v1/chats/{id}/messages
Create a groupPOST /api/v1/chats with 2-31 recipients in to
Look up one messageGET /api/v1/messages/{id}
Send a filePOST /api/v1/attachments, PUT upload_url, then send a media part
Send multiple imagesUpload attachments, then send them through a chat message with parallel_attachments: true
React to a messagePOST /api/v1/messages/{id}/react
Receive replies in productionPOST /api/v1/webhook-subscriptions
Develop without a public webhookGET /api/v1/events/stream

Supported today

CapabilityNotes
1:1 text sendsUse /send for the shortest path or /chats for first-class conversation objects.
Follow-up messagesUse /chats/{id}/messages; the body must be { "message": { "parts": [...] } }.
Rich link previewsUse a rich_link part: { "type": "rich_link", "url": "https://..." }.
One-time location pinsUse /locations with latitude and longitude when enabled on the selected sender line. This is not ongoing Live Location sharing.
AttachmentsUpload first, then reference attachment_id in a media part. Create group chats with text first; send media and rich links through /chats/{id}/messages after the group exists.
Multiple-image attachmentsSend multiple uploaded images through /chats/{id}/messages with parallel_attachments: true. It can render as one grouped iMessage on supported Apple devices.
Group chatsCreate with 2-31 recipients. Use text for the first group message; participant management requires a pinned group chat.
TapbacksSix standard iMessage reactions: love, like, dislike, laugh, emphasize, question.
Typing indicatorBest-effort on existing pinned chats. Treat it as a UI signal, not a delivery guarantee.
Webhooks and eventsmessage.received is the recommended real-time inbound event. Legacy lead_reply remains available.

Where to go next

GoalRead
First sendQuickstart
Copy common flowsUsage examples
AuthAuthentication
Conversation APICreate a chat
Group chatsCreate a group
AttachmentsAttachments
RepliesReceiving replies
ErrorsErrors