Webhooks

iMessage Event

Fired for iMessage events on an agent identity with an active iMessage subscription. Covers inbound delivery (imessage.received) and inbound tapbacks (imessage.reaction_received) routed through the shared-number assignment table. The request body uses the standard {event_type, timestamp, data} envelope with data.message or data.reaction. Pool numbers are intentionally omitted from the payload; agents address iMessage by identity/conversation, not by the shared pool line. This is fire-and-forget: the response status is logged but does not affect iMessage processing.

If your organization has a signing key, every webhook includes three headers:

  • X-Inkbox-Request-ID — UUID for deduplication.
  • X-Inkbox-Timestamp — Unix timestamp in seconds.
  • X-Inkbox-Signaturesha256={HMAC-SHA256 hex digest} over {request_id}.{timestamp}.{raw_body}.
postWebhook/imessage

Payload

idstring required

Stable per-event id (evt_...); idempotency key, stable across replays.

event_type'imessage.received' | 'imessage.reaction_received' | 'imessage.sent' | 'imessage.delivered' | 'imessage.delivery_failed' required
timestampstring date-time required

ISO 8601 timestamp of when the event occurred.

Response

Successful Response

{"stackTrail":"webhooks:/imessage:post:responses:200:content:application/json:schema","oasType":"schema","type":"unknown"}

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.