Receive iMessage via API
How inbound replies reach your application. When a customer answers, SendiMessage records the message, updates the conversation, and posts a signed webhook to your endpoint.
Inbound lifecycle
Where replies show up
Inbound messages appear in GET /v2/messages with direction "in" and status RECEIVED, and in their conversation thread. The receive webhook notifies your endpoint the moment a reply arrives. Inbound STOP-family keywords set the sender's opt-out state automatically.
The event
{"id": "evt_01j6x6z9k3f8v9m2n4p5q6r7s8","type": "receive","created_at": "2026-08-21T09:07:35+00:00","data": {"message": {"message_handle": "msg_01j6x6z6k3f8v9m2n4p5q6r7s8","direction": "inbound","from": "+14155550123","to": "+15555550100","text": "Can we move it to 3 PM?","channel": "imessage","status": "received","line_handle": "line_01j6x6yak3f8v9m2n4p5q6r7s8"}}}
Verify SendiMessage-Signature against the raw body before trusting the payload, then read data.message.text and data.message.from.
How are replies grouped?
By conversation — one thread per line and counterpart. You can page a thread's history over the API to reconstruct context for your app, CRM, or agent.
Verify and consume events
The webhook reference includes signature-verification examples in Node.js and Python.