---
title: "Phone Text Event"
method: POST
path: "/phone-text"
tags: ["Webhooks"]
---

# Phone Text Event

`POST /phone-text` (webhook)

Fired for text-message lifecycle events on a phone number with an active text-event subscription. Covers inbound delivery (`text.received`) and outbound delivery state transitions (`text.sent`, `text.delivered`, `text.delivery_failed`, `text.delivery_unconfirmed`). The request body uses the standard `{event_type, timestamp, data}` envelope with `data.text_message`, `data.contacts`, and `data.agent_identities` (both lists, possibly empty). This is fire-and-forget: the response status is logged but does not affect text 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

- PhoneTextWebhookPayload
  - `id` string, required — Stable per-event id (evt_...); idempotency key, stable across replays.
  - `event_type` 'text.received' | 'text.sent' | 'text.delivered' | 'text.delivery_failed' | 'text.delivery_unconfirmed', required
  - `timestamp` string, date-time, required — ISO 8601 timestamp of when the event occurred.
  - `data` PhoneTextWebhookData, required
    - `text_message` WebhookTextMessage, required
      - `id` string, uuid, required
      - `direction` 'inbound' | 'outbound', required
      - `local_phone_number` string, required
      - `remote_phone_number` string, nullable
      - `text` string, nullable, required
      - `type` 'sms' | 'mms', required
      - `media` TextMediaItem[], nullable, required
        - `content_type` string, required
        - `size` integer, required
        - `url` string, required
      - `is_read` boolean, required
      - `delivery_status` 'queued' | 'sent' | 'delivered' | 'delivery_failed' | 'delivery_unconfirmed' | 'sending_failed' | 'blocked_spam_filter'
      - `origin` 'user_initiated' | 'auto_reply'
      - `error_code` string, nullable
      - `error_detail` string, nullable
      - `sent_at` string, date-time, nullable
      - `delivered_at` string, date-time, nullable
      - `failed_at` string, date-time, nullable
      - `conversation_id` string, uuid, nullable
      - `sender_phone_number` string, nullable
      - `recipients` WebhookRecipient[], nullable
        - `recipient_phone_number` string, required
        - `delivery_status` 'queued' | 'sent' | 'delivered' | 'delivery_failed' | 'delivery_unconfirmed' | 'sending_failed' | 'blocked_spam_filter'
        - `carrier` string, nullable
        - `line_type` string, nullable
        - `error_code` string, nullable
        - `error_detail` string, nullable
        - `sent_at` string, date-time, nullable
        - `delivered_at` string, date-time, nullable
        - `failed_at` string, date-time, nullable
      - `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
    - `recipient_phone_number` 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)
