---
title: "iMessage Event"
method: POST
path: "/imessage"
tags: ["Webhooks"]
---

# iMessage Event

`POST /imessage` (webhook)

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-Signature` — `sha256={HMAC-SHA256 hex digest}` over `{request_id}.{timestamp}.{raw_body}`.

## Payload

- IMessageWebhookPayload
  - `id` string, 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
  - `timestamp` string, date-time, required — ISO 8601 timestamp of when the event occurred.
  - `data` IMessageWebhookData, required
    - `message` WebhookIMessageMessage
      - `provider_message_handle` string, nullable
      - `id` string, uuid, required
      - `conversation_id` string, uuid, required
      - `assignment_id` string, uuid, nullable, required
      - `direction` 'inbound' | 'outbound', required
      - `remote_number` string, nullable, required
      - `sender_number` string, nullable
      - `participants` string[], nullable
      - `is_group` boolean
      - `content` string, nullable
      - `message_type` 'message' | 'carousel', required
      - `service` 'imessage' | 'sms' | 'rcs', required
      - `send_style` 'celebration' | 'shooting_star' | 'fireworks' | 'lasers' | 'love' | 'confetti' | 'balloons' | 'spotlight' | 'echo' | 'invisible' | 'gentle' | 'loud' | 'slam'
      - `media` IMessageMediaItem[], nullable
        - `content_type` string, nullable
        - `size` integer, nullable
        - `url` string, required
      - `was_downgraded` boolean, nullable
      - `status` 'registered' | 'pending' | 'queued' | 'accepted' | 'sent' | 'delivered' | 'declined' | 'error' | 'received'
      - `error_code` string, nullable
      - `error_message` string, nullable
      - `error_reason` string, nullable
      - `error_detail` string, nullable
      - `is_read` boolean, required
      - `is_blocked` boolean
      - `recipients` IMessageRecipientResponse[], nullable
        - `remote_number` string, required
        - `delivery_status` 'registered' | 'pending' | 'queued' | 'accepted' | 'sent' | 'delivered' | 'declined' | 'error' | 'received'
        - `service` 'imessage' | 'sms' | 'rcs'
        - `error_code` string, nullable
        - `error_message` string, nullable
        - `error_reason` string, nullable
        - `error_detail` string, nullable
        - `sent_at` string, date-time, nullable
        - `delivered_at` string, date-time, nullable
        - `failed_at` string, date-time, nullable
      - `reactions` IMessageMessageReaction[], nullable
        - `id` string, uuid, required
        - `direction` 'inbound' | 'outbound', required
        - `reaction` 'love' | 'like' | 'dislike' | 'laugh' | 'emphasize' | 'question' | 'eyes' | 'custom', required
        - `custom_emoji` string, nullable
        - `remote_number` string, required
        - `part_index` integer
        - `created_at` string, date-time, required
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `reaction` IMessageReactionResponse
      - `provider_message_handle` string, nullable
      - `id` string, uuid, required
      - `conversation_id` string, uuid, required
      - `assignment_id` string, uuid, nullable, required
      - `target_message_id` string, uuid, required
      - `direction` 'inbound' | 'outbound', required
      - `reaction` 'love' | 'like' | 'dislike' | 'laugh' | 'emphasize' | 'question' | 'eyes' | 'custom', required
      - `custom_emoji` string, nullable
      - `remote_number` string, required
      - `part_index` integer
      - `created_at` string, date-time, required
      - `updated_at` string, date-time, required
    - `contacts` WebhookContact[]
      - `id` string, uuid, required
      - `name` string, nullable, required
      - `memories` string[]
    - `agent_identities` WebhookAgentIdentity[]
      - `id` string, uuid, required
      - `agent_handle` string, required
      - `display_name` string, nullable

## Acknowledgement `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/inkbox/apis/inkbox-api.md) · [All operations](https://skmtc.dev/inkbox/apis/inkbox-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/inkbox/inkbox-api/revisions/31f357e7e6f8/schema)
