# Webhooks

## 

`client.Webhooks.Events(ctx) error`

**** ``

### Example

```go
package main

import (
  "context"

  "github.com/linq-team/linq-go"
  "github.com/linq-team/linq-go/option"
)

func main() {
  client := linqgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  err := client.Webhooks.Events(context.TODO())
  if err != nil {
    panic(err.Error())
  }
}
```

## Domain Types

### Message Event V2

- `type MessageEventV2 struct{…}`

  Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

  This schema is used for message.sent, message.received, message.delivered, and message.read
  events when the subscription URL includes `?version=2026-02-03`.

  Key differences from V1 (2025-01-01):

  - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
  - `sender_handle`: Full handle object for the sender
  - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
  - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

  Timestamps indicate the message state:

  - `message.sent`: sent_at set, delivered_at=null, read_at=null
  - `message.received`: sent_at set, delivered_at=null, read_at=null
  - `message.delivered`: sent_at set, delivered_at set, read_at=null
  - `message.read`: sent_at set, delivered_at set, read_at set

  - `ID string`

    Message identifier

  - `Chat MessageEventV2Chat`

    Chat information

    - `ID string`

      Chat identifier

    - `HealthStatus MessageEventV2ChatHealthStatus`

      **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

      Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

      See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

      - `DocURL string`

        Deep-link to the relevant section of the Chat Health guide for this status.

      - `Status string`

        Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

        - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

        - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

        - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

        - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

      - `UpdatedAt Time`

        When this status last changed.

    - `IsGroup bool`

      Whether this is a group chat

    - `OwnerHandle ChatHandle`

      Your phone number's handle. Always has is_me=true.

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

  - `Direction MessageEventV2Direction`

    Message direction - "outbound" if sent by you, "inbound" if received

    - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

    - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

  - `Parts []MessageEventV2PartUnion`

    Message parts (text and/or media)

    - `type SchemasTextPartResponse struct{…}`

      A text message part

      - `Type SchemasTextPartResponseType`

        Indicates this is a text message part

        - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

      - `Value string`

        The text content

      - `TextDecorations []TextDecoration`

        Text decorations applied to character ranges in the value

        - `Range []int64`

          Character range `[start, end)` in the `value` string where the decoration applies.
          `start` is inclusive, `end` is exclusive.
          *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

        - `Animation TextDecorationAnimation`

          Animated text effect to apply. Mutually exclusive with `style`.

          - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

          - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

          - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

          - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

          - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

          - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

          - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

          - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

        - `Style TextDecorationStyle`

          Text style to apply. Mutually exclusive with `animation`.

          - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

          - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

          - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

          - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

    - `type SchemasMediaPartResponse struct{…}`

      A media attachment part

      - `ID string`

        Unique attachment identifier

      - `Filename string`

        Original filename

      - `MimeType string`

        MIME type of the file

      - `SizeBytes int64`

        File size in bytes

      - `Type SchemasMediaPartResponseType`

        Indicates this is a media attachment part

        - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

      - `URL string`

        Presigned URL for downloading the attachment (expires in 1 hour).

    - `type MessageEventV2PartLink struct{…}`

      A rich link preview part

      - `Type Link`

        Indicates this is a rich link preview part

        - `const LinkLink Link = "link"`

      - `Value string`

        The URL

  - `SenderHandle ChatHandle`

    The handle that sent this message

  - `Service ServiceType`

    Messaging service type

  - `DeliveredAt Time`

    When the message was delivered. Null if not yet delivered.

  - `Effect SchemasMessageEffect`

    iMessage effect applied to a message (screen or bubble animation)

    - `Name string`

      Effect name (confetti, fireworks, slam, gentle, etc.)

    - `Type SchemasMessageEffectType`

      Effect category

      - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

      - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

  - `IdempotencyKey string`

    Idempotency key for deduplication of outbound messages.

  - `PreferredService MessageEventV2PreferredService`

    Preferred messaging service type. Includes "auto" for default fallback behavior.

    - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

    - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

    - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

    - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

  - `ReadAt Time`

    When the message was read. Null if not yet read.

  - `ReplyTo MessageEventV2ReplyTo`

    Reference to the message this is replying to (for threaded replies)

    - `MessageID string`

      ID of the message being replied to

    - `PartIndex int64`

      Index of the part being replied to

  - `SentAt Time`

    When the message was sent. Null if not yet sent.

### Message Payload

- `type MessagePayload struct{…}`

  Message content nested within webhook events

  - `ID string`

    Message identifier

  - `CreatedAt Time`

    When the message record was created

  - `DeliveredAt Time`

    When the message was delivered

  - `Effect SchemasMessageEffect`

    iMessage effect applied to a message (screen or bubble animation)

    - `Name string`

      Effect name (confetti, fireworks, slam, gentle, etc.)

    - `Type SchemasMessageEffectType`

      Effect category

      - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

      - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

  - `IsDelivered bool`

    Whether the message has been delivered

  - `IsRead bool`

    Whether the message has been read

  - `Parts []MessagePayloadPartUnion`

    Message content parts (text and/or media)

    - `type SchemasTextPartResponse struct{…}`

      A text message part

      - `Type SchemasTextPartResponseType`

        Indicates this is a text message part

        - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

      - `Value string`

        The text content

      - `TextDecorations []TextDecoration`

        Text decorations applied to character ranges in the value

        - `Range []int64`

          Character range `[start, end)` in the `value` string where the decoration applies.
          `start` is inclusive, `end` is exclusive.
          *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

        - `Animation TextDecorationAnimation`

          Animated text effect to apply. Mutually exclusive with `style`.

          - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

          - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

          - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

          - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

          - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

          - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

          - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

          - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

        - `Style TextDecorationStyle`

          Text style to apply. Mutually exclusive with `animation`.

          - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

          - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

          - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

          - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

    - `type SchemasMediaPartResponse struct{…}`

      A media attachment part

      - `ID string`

        Unique attachment identifier

      - `Filename string`

        Original filename

      - `MimeType string`

        MIME type of the file

      - `SizeBytes int64`

        File size in bytes

      - `Type SchemasMediaPartResponseType`

        Indicates this is a media attachment part

        - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

      - `URL string`

        Presigned URL for downloading the attachment (expires in 1 hour).

    - `MessagePayloadPartSchemasLinkPartResponse`

      - `Type string`

        Indicates this is a rich link preview part

        - `const MessagePayloadPartSchemasLinkPartResponseTypeLink MessagePayloadPartSchemasLinkPartResponseType = "link"`

      - `Value string`

        The URL

  - `ReadAt Time`

    When the message was read

  - `ReplyTo MessagePayloadReplyTo`

    Reference to the message this is replying to

    - `MessageID string`

      The ID of the message being replied to

    - `PartIndex int64`

      Index of the message part being replied to (0-based)

  - `SentAt Time`

    When the message was sent

  - `UpdatedAt Time`

    When the message record was last updated

### Reaction Event Base

- `type ReactionEventBase struct{…}`

  - `IsFromMe bool`

    Whether this reaction was from the owner of the phone number (true) or from someone else (false)

  - `ReactionType ReactionType`

    Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
    Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
    Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

    - `const ReactionTypeLove ReactionType = "love"`

    - `const ReactionTypeLike ReactionType = "like"`

    - `const ReactionTypeDislike ReactionType = "dislike"`

    - `const ReactionTypeLaugh ReactionType = "laugh"`

    - `const ReactionTypeEmphasize ReactionType = "emphasize"`

    - `const ReactionTypeQuestion ReactionType = "question"`

    - `const ReactionTypeCustom ReactionType = "custom"`

    - `const ReactionTypeSticker ReactionType = "sticker"`

  - `ChatID string`

    Chat identifier (UUID)

  - `CustomEmoji string`

    The actual emoji when reaction_type is "custom". Null for standard tapbacks.

  - `From string`

    DEPRECATED: Use from_handle instead. Phone number or email address of the person who added/removed the reaction.

  - `FromHandle ChatHandle`

    The person who added/removed the reaction as a full handle object

    - `ID string`

      Unique identifier for this handle

    - `Handle string`

      Phone number (E.164) or email address of the participant

    - `JoinedAt Time`

      When this participant joined the chat

    - `Service ServiceType`

      Messaging service type

      - `const ServiceTypeiMessage ServiceType = "iMessage"`

      - `const ServiceTypeSMS ServiceType = "SMS"`

      - `const ServiceTypeRCS ServiceType = "RCS"`

    - `IsMe bool`

      Whether this handle belongs to the sender (your phone number)

    - `LeftAt Time`

      When they left (if applicable)

    - `Status ChatHandleStatus`

      Participant status

      - `const ChatHandleStatusActive ChatHandleStatus = "active"`

      - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

      - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

  - `MessageID string`

    Message identifier (UUID) that the reaction was added to or removed from

  - `PartIndex int64`

    Index of the message part that was reacted to (0-based)

  - `ReactedAt Time`

    When the reaction was added or removed

  - `Service ServiceType`

    Messaging service type

  - `Sticker ReactionEventBaseSticker`

    Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

    - `FileName string`

      Filename of the sticker

    - `Height int64`

      Sticker image height in pixels

    - `MimeType string`

      MIME type of the sticker image

    - `URL string`

      Presigned URL for downloading the sticker image (expires in 1 hour).

    - `Width int64`

      Sticker image width in pixels

### Schemas Media Part Response

- `type SchemasMediaPartResponse struct{…}`

  A media attachment part

  - `ID string`

    Unique attachment identifier

  - `Filename string`

    Original filename

  - `MimeType string`

    MIME type of the file

  - `SizeBytes int64`

    File size in bytes

  - `Type SchemasMediaPartResponseType`

    Indicates this is a media attachment part

    - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

  - `URL string`

    Presigned URL for downloading the attachment (expires in 1 hour).

### Schemas Message Effect

- `type SchemasMessageEffect struct{…}`

  iMessage effect applied to a message (screen or bubble animation)

  - `Name string`

    Effect name (confetti, fireworks, slam, gentle, etc.)

  - `Type SchemasMessageEffectType`

    Effect category

    - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

    - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

### Schemas Text Part Response

- `type SchemasTextPartResponse struct{…}`

  A text message part

  - `Type SchemasTextPartResponseType`

    Indicates this is a text message part

    - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

  - `Value string`

    The text content

  - `TextDecorations []TextDecoration`

    Text decorations applied to character ranges in the value

    - `Range []int64`

      Character range `[start, end)` in the `value` string where the decoration applies.
      `start` is inclusive, `end` is exclusive.
      *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

    - `Animation TextDecorationAnimation`

      Animated text effect to apply. Mutually exclusive with `style`.

      - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

      - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

      - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

      - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

      - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

      - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

      - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

      - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

    - `Style TextDecorationStyle`

      Text style to apply. Mutually exclusive with `animation`.

      - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

      - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

      - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

      - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

### Message Sent Webhook Event

- `type MessageSentWebhookEvent struct{…}`

  Complete webhook payload for message.sent events (2026-02-03 format)

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageEventV2`

    Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

    This schema is used for message.sent, message.received, message.delivered, and message.read
    events when the subscription URL includes `?version=2026-02-03`.

    Key differences from V1 (2025-01-01):

    - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
    - `sender_handle`: Full handle object for the sender
    - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
    - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

    Timestamps indicate the message state:

    - `message.sent`: sent_at set, delivered_at=null, read_at=null
    - `message.received`: sent_at set, delivered_at=null, read_at=null
    - `message.delivered`: sent_at set, delivered_at set, read_at=null
    - `message.read`: sent_at set, delivered_at set, read_at set

    - `ID string`

      Message identifier

    - `Chat MessageEventV2Chat`

      Chat information

      - `ID string`

        Chat identifier

      - `HealthStatus MessageEventV2ChatHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

          - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

          - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

          - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `OwnerHandle ChatHandle`

        Your phone number's handle. Always has is_me=true.

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

          - `const ServiceTypeiMessage ServiceType = "iMessage"`

          - `const ServiceTypeSMS ServiceType = "SMS"`

          - `const ServiceTypeRCS ServiceType = "RCS"`

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

          - `const ChatHandleStatusActive ChatHandleStatus = "active"`

          - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

          - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `Direction MessageEventV2Direction`

      Message direction - "outbound" if sent by you, "inbound" if received

      - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

      - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

    - `Parts []MessageEventV2PartUnion`

      Message parts (text and/or media)

      - `type SchemasTextPartResponse struct{…}`

        A text message part

        - `Type SchemasTextPartResponseType`

          Indicates this is a text message part

          - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

        - `Value string`

          The text content

        - `TextDecorations []TextDecoration`

          Text decorations applied to character ranges in the value

          - `Range []int64`

            Character range `[start, end)` in the `value` string where the decoration applies.
            `start` is inclusive, `end` is exclusive.
            *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

          - `Animation TextDecorationAnimation`

            Animated text effect to apply. Mutually exclusive with `style`.

            - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

            - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

            - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

            - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

            - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

            - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

            - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

            - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

          - `Style TextDecorationStyle`

            Text style to apply. Mutually exclusive with `animation`.

            - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

            - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

            - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

            - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

      - `type SchemasMediaPartResponse struct{…}`

        A media attachment part

        - `ID string`

          Unique attachment identifier

        - `Filename string`

          Original filename

        - `MimeType string`

          MIME type of the file

        - `SizeBytes int64`

          File size in bytes

        - `Type SchemasMediaPartResponseType`

          Indicates this is a media attachment part

          - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

        - `URL string`

          Presigned URL for downloading the attachment (expires in 1 hour).

      - `type MessageEventV2PartLink struct{…}`

        A rich link preview part

        - `Type Link`

          Indicates this is a rich link preview part

          - `const LinkLink Link = "link"`

        - `Value string`

          The URL

    - `SenderHandle ChatHandle`

      The handle that sent this message

    - `Service ServiceType`

      Messaging service type

    - `DeliveredAt Time`

      When the message was delivered. Null if not yet delivered.

    - `Effect SchemasMessageEffect`

      iMessage effect applied to a message (screen or bubble animation)

      - `Name string`

        Effect name (confetti, fireworks, slam, gentle, etc.)

      - `Type SchemasMessageEffectType`

        Effect category

        - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

        - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

    - `IdempotencyKey string`

      Idempotency key for deduplication of outbound messages.

    - `PreferredService MessageEventV2PreferredService`

      Preferred messaging service type. Includes "auto" for default fallback behavior.

      - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

      - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

      - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

      - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

    - `ReadAt Time`

      When the message was read. Null if not yet read.

    - `ReplyTo MessageEventV2ReplyTo`

      Reference to the message this is replying to (for threaded replies)

      - `MessageID string`

        ID of the message being replied to

      - `PartIndex int64`

        Index of the part being replied to

    - `SentAt Time`

      When the message was sent. Null if not yet sent.

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Message Received Webhook Event

- `type MessageReceivedWebhookEvent struct{…}`

  Complete webhook payload for message.received events (2026-02-03 format)

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageEventV2`

    Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

    This schema is used for message.sent, message.received, message.delivered, and message.read
    events when the subscription URL includes `?version=2026-02-03`.

    Key differences from V1 (2025-01-01):

    - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
    - `sender_handle`: Full handle object for the sender
    - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
    - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

    Timestamps indicate the message state:

    - `message.sent`: sent_at set, delivered_at=null, read_at=null
    - `message.received`: sent_at set, delivered_at=null, read_at=null
    - `message.delivered`: sent_at set, delivered_at set, read_at=null
    - `message.read`: sent_at set, delivered_at set, read_at set

    - `ID string`

      Message identifier

    - `Chat MessageEventV2Chat`

      Chat information

      - `ID string`

        Chat identifier

      - `HealthStatus MessageEventV2ChatHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

          - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

          - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

          - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `OwnerHandle ChatHandle`

        Your phone number's handle. Always has is_me=true.

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

          - `const ServiceTypeiMessage ServiceType = "iMessage"`

          - `const ServiceTypeSMS ServiceType = "SMS"`

          - `const ServiceTypeRCS ServiceType = "RCS"`

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

          - `const ChatHandleStatusActive ChatHandleStatus = "active"`

          - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

          - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `Direction MessageEventV2Direction`

      Message direction - "outbound" if sent by you, "inbound" if received

      - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

      - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

    - `Parts []MessageEventV2PartUnion`

      Message parts (text and/or media)

      - `type SchemasTextPartResponse struct{…}`

        A text message part

        - `Type SchemasTextPartResponseType`

          Indicates this is a text message part

          - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

        - `Value string`

          The text content

        - `TextDecorations []TextDecoration`

          Text decorations applied to character ranges in the value

          - `Range []int64`

            Character range `[start, end)` in the `value` string where the decoration applies.
            `start` is inclusive, `end` is exclusive.
            *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

          - `Animation TextDecorationAnimation`

            Animated text effect to apply. Mutually exclusive with `style`.

            - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

            - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

            - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

            - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

            - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

            - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

            - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

            - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

          - `Style TextDecorationStyle`

            Text style to apply. Mutually exclusive with `animation`.

            - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

            - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

            - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

            - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

      - `type SchemasMediaPartResponse struct{…}`

        A media attachment part

        - `ID string`

          Unique attachment identifier

        - `Filename string`

          Original filename

        - `MimeType string`

          MIME type of the file

        - `SizeBytes int64`

          File size in bytes

        - `Type SchemasMediaPartResponseType`

          Indicates this is a media attachment part

          - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

        - `URL string`

          Presigned URL for downloading the attachment (expires in 1 hour).

      - `type MessageEventV2PartLink struct{…}`

        A rich link preview part

        - `Type Link`

          Indicates this is a rich link preview part

          - `const LinkLink Link = "link"`

        - `Value string`

          The URL

    - `SenderHandle ChatHandle`

      The handle that sent this message

    - `Service ServiceType`

      Messaging service type

    - `DeliveredAt Time`

      When the message was delivered. Null if not yet delivered.

    - `Effect SchemasMessageEffect`

      iMessage effect applied to a message (screen or bubble animation)

      - `Name string`

        Effect name (confetti, fireworks, slam, gentle, etc.)

      - `Type SchemasMessageEffectType`

        Effect category

        - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

        - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

    - `IdempotencyKey string`

      Idempotency key for deduplication of outbound messages.

    - `PreferredService MessageEventV2PreferredService`

      Preferred messaging service type. Includes "auto" for default fallback behavior.

      - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

      - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

      - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

      - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

    - `ReadAt Time`

      When the message was read. Null if not yet read.

    - `ReplyTo MessageEventV2ReplyTo`

      Reference to the message this is replying to (for threaded replies)

      - `MessageID string`

        ID of the message being replied to

      - `PartIndex int64`

        Index of the part being replied to

    - `SentAt Time`

      When the message was sent. Null if not yet sent.

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Message Read Webhook Event

- `type MessageReadWebhookEvent struct{…}`

  Complete webhook payload for message.read events (2026-02-03 format)

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageEventV2`

    Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

    This schema is used for message.sent, message.received, message.delivered, and message.read
    events when the subscription URL includes `?version=2026-02-03`.

    Key differences from V1 (2025-01-01):

    - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
    - `sender_handle`: Full handle object for the sender
    - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
    - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

    Timestamps indicate the message state:

    - `message.sent`: sent_at set, delivered_at=null, read_at=null
    - `message.received`: sent_at set, delivered_at=null, read_at=null
    - `message.delivered`: sent_at set, delivered_at set, read_at=null
    - `message.read`: sent_at set, delivered_at set, read_at set

    - `ID string`

      Message identifier

    - `Chat MessageEventV2Chat`

      Chat information

      - `ID string`

        Chat identifier

      - `HealthStatus MessageEventV2ChatHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

          - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

          - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

          - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `OwnerHandle ChatHandle`

        Your phone number's handle. Always has is_me=true.

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

          - `const ServiceTypeiMessage ServiceType = "iMessage"`

          - `const ServiceTypeSMS ServiceType = "SMS"`

          - `const ServiceTypeRCS ServiceType = "RCS"`

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

          - `const ChatHandleStatusActive ChatHandleStatus = "active"`

          - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

          - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `Direction MessageEventV2Direction`

      Message direction - "outbound" if sent by you, "inbound" if received

      - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

      - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

    - `Parts []MessageEventV2PartUnion`

      Message parts (text and/or media)

      - `type SchemasTextPartResponse struct{…}`

        A text message part

        - `Type SchemasTextPartResponseType`

          Indicates this is a text message part

          - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

        - `Value string`

          The text content

        - `TextDecorations []TextDecoration`

          Text decorations applied to character ranges in the value

          - `Range []int64`

            Character range `[start, end)` in the `value` string where the decoration applies.
            `start` is inclusive, `end` is exclusive.
            *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

          - `Animation TextDecorationAnimation`

            Animated text effect to apply. Mutually exclusive with `style`.

            - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

            - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

            - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

            - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

            - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

            - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

            - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

            - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

          - `Style TextDecorationStyle`

            Text style to apply. Mutually exclusive with `animation`.

            - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

            - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

            - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

            - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

      - `type SchemasMediaPartResponse struct{…}`

        A media attachment part

        - `ID string`

          Unique attachment identifier

        - `Filename string`

          Original filename

        - `MimeType string`

          MIME type of the file

        - `SizeBytes int64`

          File size in bytes

        - `Type SchemasMediaPartResponseType`

          Indicates this is a media attachment part

          - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

        - `URL string`

          Presigned URL for downloading the attachment (expires in 1 hour).

      - `type MessageEventV2PartLink struct{…}`

        A rich link preview part

        - `Type Link`

          Indicates this is a rich link preview part

          - `const LinkLink Link = "link"`

        - `Value string`

          The URL

    - `SenderHandle ChatHandle`

      The handle that sent this message

    - `Service ServiceType`

      Messaging service type

    - `DeliveredAt Time`

      When the message was delivered. Null if not yet delivered.

    - `Effect SchemasMessageEffect`

      iMessage effect applied to a message (screen or bubble animation)

      - `Name string`

        Effect name (confetti, fireworks, slam, gentle, etc.)

      - `Type SchemasMessageEffectType`

        Effect category

        - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

        - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

    - `IdempotencyKey string`

      Idempotency key for deduplication of outbound messages.

    - `PreferredService MessageEventV2PreferredService`

      Preferred messaging service type. Includes "auto" for default fallback behavior.

      - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

      - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

      - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

      - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

    - `ReadAt Time`

      When the message was read. Null if not yet read.

    - `ReplyTo MessageEventV2ReplyTo`

      Reference to the message this is replying to (for threaded replies)

      - `MessageID string`

        ID of the message being replied to

      - `PartIndex int64`

        Index of the part being replied to

    - `SentAt Time`

      When the message was sent. Null if not yet sent.

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Message Delivered Webhook Event

- `type MessageDeliveredWebhookEvent struct{…}`

  Complete webhook payload for message.delivered events (2026-02-03 format)

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageEventV2`

    Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

    This schema is used for message.sent, message.received, message.delivered, and message.read
    events when the subscription URL includes `?version=2026-02-03`.

    Key differences from V1 (2025-01-01):

    - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
    - `sender_handle`: Full handle object for the sender
    - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
    - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

    Timestamps indicate the message state:

    - `message.sent`: sent_at set, delivered_at=null, read_at=null
    - `message.received`: sent_at set, delivered_at=null, read_at=null
    - `message.delivered`: sent_at set, delivered_at set, read_at=null
    - `message.read`: sent_at set, delivered_at set, read_at set

    - `ID string`

      Message identifier

    - `Chat MessageEventV2Chat`

      Chat information

      - `ID string`

        Chat identifier

      - `HealthStatus MessageEventV2ChatHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

          - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

          - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

          - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `OwnerHandle ChatHandle`

        Your phone number's handle. Always has is_me=true.

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

          - `const ServiceTypeiMessage ServiceType = "iMessage"`

          - `const ServiceTypeSMS ServiceType = "SMS"`

          - `const ServiceTypeRCS ServiceType = "RCS"`

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

          - `const ChatHandleStatusActive ChatHandleStatus = "active"`

          - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

          - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `Direction MessageEventV2Direction`

      Message direction - "outbound" if sent by you, "inbound" if received

      - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

      - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

    - `Parts []MessageEventV2PartUnion`

      Message parts (text and/or media)

      - `type SchemasTextPartResponse struct{…}`

        A text message part

        - `Type SchemasTextPartResponseType`

          Indicates this is a text message part

          - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

        - `Value string`

          The text content

        - `TextDecorations []TextDecoration`

          Text decorations applied to character ranges in the value

          - `Range []int64`

            Character range `[start, end)` in the `value` string where the decoration applies.
            `start` is inclusive, `end` is exclusive.
            *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

          - `Animation TextDecorationAnimation`

            Animated text effect to apply. Mutually exclusive with `style`.

            - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

            - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

            - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

            - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

            - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

            - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

            - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

            - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

          - `Style TextDecorationStyle`

            Text style to apply. Mutually exclusive with `animation`.

            - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

            - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

            - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

            - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

      - `type SchemasMediaPartResponse struct{…}`

        A media attachment part

        - `ID string`

          Unique attachment identifier

        - `Filename string`

          Original filename

        - `MimeType string`

          MIME type of the file

        - `SizeBytes int64`

          File size in bytes

        - `Type SchemasMediaPartResponseType`

          Indicates this is a media attachment part

          - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

        - `URL string`

          Presigned URL for downloading the attachment (expires in 1 hour).

      - `type MessageEventV2PartLink struct{…}`

        A rich link preview part

        - `Type Link`

          Indicates this is a rich link preview part

          - `const LinkLink Link = "link"`

        - `Value string`

          The URL

    - `SenderHandle ChatHandle`

      The handle that sent this message

    - `Service ServiceType`

      Messaging service type

    - `DeliveredAt Time`

      When the message was delivered. Null if not yet delivered.

    - `Effect SchemasMessageEffect`

      iMessage effect applied to a message (screen or bubble animation)

      - `Name string`

        Effect name (confetti, fireworks, slam, gentle, etc.)

      - `Type SchemasMessageEffectType`

        Effect category

        - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

        - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

    - `IdempotencyKey string`

      Idempotency key for deduplication of outbound messages.

    - `PreferredService MessageEventV2PreferredService`

      Preferred messaging service type. Includes "auto" for default fallback behavior.

      - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

      - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

      - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

      - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

    - `ReadAt Time`

      When the message was read. Null if not yet read.

    - `ReplyTo MessageEventV2ReplyTo`

      Reference to the message this is replying to (for threaded replies)

      - `MessageID string`

        ID of the message being replied to

      - `PartIndex int64`

        Index of the part being replied to

    - `SentAt Time`

      When the message was sent. Null if not yet sent.

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Message Failed Webhook Event

- `type MessageFailedWebhookEvent struct{…}`

  Complete webhook payload for message.failed events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageFailedWebhookEventData`

    Error details for message.failed webhook events.
    See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

    - `Code int64`

      Error codes in webhook failure events (3007, 4001).

    - `FailedAt Time`

      When the failure was detected

    - `ChatID string`

      Chat identifier (UUID)

    - `MessageID string`

      Message identifier (UUID)

    - `Reason string`

      Human-readable description of the failure

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Message Edited Webhook Event

- `type MessageEditedWebhookEvent struct{…}`

  Complete webhook payload for message.edited events (2026-02-03 format only)

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data MessageEditedWebhookEventData`

    Payload for `message.edited` events (2026-02-03 format).

    Describes which part of a message was edited and when. Only text parts can be edited.
    Only available for subscriptions using `webhook_version: "2026-02-03"`.

    - `ID string`

      Message identifier

    - `Chat MessageEditedWebhookEventDataChat`

      Chat context

      - `ID string`

        Chat identifier

      - `HealthStatus MessageEditedWebhookEventDataChatHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const MessageEditedWebhookEventDataChatHealthStatusStatusHealthy MessageEditedWebhookEventDataChatHealthStatusStatus = "HEALTHY"`

          - `const MessageEditedWebhookEventDataChatHealthStatusStatusAtRisk MessageEditedWebhookEventDataChatHealthStatusStatus = "AT_RISK"`

          - `const MessageEditedWebhookEventDataChatHealthStatusStatusCritical MessageEditedWebhookEventDataChatHealthStatusStatus = "CRITICAL"`

          - `const MessageEditedWebhookEventDataChatHealthStatusStatusOptedOut MessageEditedWebhookEventDataChatHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `OwnerHandle ChatHandle`

        The handle that owns this chat (your phone number)

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

          - `const ServiceTypeiMessage ServiceType = "iMessage"`

          - `const ServiceTypeSMS ServiceType = "SMS"`

          - `const ServiceTypeRCS ServiceType = "RCS"`

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

          - `const ChatHandleStatusActive ChatHandleStatus = "active"`

          - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

          - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `Direction string`

      "outbound" if you sent the original message, "inbound" if you received it

      - `const MessageEditedWebhookEventDataDirectionOutbound MessageEditedWebhookEventDataDirection = "outbound"`

      - `const MessageEditedWebhookEventDataDirectionInbound MessageEditedWebhookEventDataDirection = "inbound"`

    - `EditedAt Time`

      When the edit occurred

    - `Part MessageEditedWebhookEventDataPart`

      The edited part

      - `Index int64`

        Zero-based index of the edited part within the message

      - `Text string`

        New text content of the part

    - `SenderHandle ChatHandle`

      The handle that sent (and edited) this message

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Reaction Added Webhook Event

- `type ReactionAddedWebhookEvent struct{…}`

  Complete webhook payload for reaction.added events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ReactionEventBase`

    Payload for reaction.added webhook events

    - `IsFromMe bool`

      Whether this reaction was from the owner of the phone number (true) or from someone else (false)

    - `ReactionType ReactionType`

      Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
      Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
      Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

      - `const ReactionTypeLove ReactionType = "love"`

      - `const ReactionTypeLike ReactionType = "like"`

      - `const ReactionTypeDislike ReactionType = "dislike"`

      - `const ReactionTypeLaugh ReactionType = "laugh"`

      - `const ReactionTypeEmphasize ReactionType = "emphasize"`

      - `const ReactionTypeQuestion ReactionType = "question"`

      - `const ReactionTypeCustom ReactionType = "custom"`

      - `const ReactionTypeSticker ReactionType = "sticker"`

    - `ChatID string`

      Chat identifier (UUID)

    - `CustomEmoji string`

      The actual emoji when reaction_type is "custom". Null for standard tapbacks.

    - `From string`

      DEPRECATED: Use from_handle instead. Phone number or email address of the person who added/removed the reaction.

    - `FromHandle ChatHandle`

      The person who added/removed the reaction as a full handle object

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `MessageID string`

      Message identifier (UUID) that the reaction was added to or removed from

    - `PartIndex int64`

      Index of the message part that was reacted to (0-based)

    - `ReactedAt Time`

      When the reaction was added or removed

    - `Service ServiceType`

      Messaging service type

    - `Sticker ReactionEventBaseSticker`

      Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

      - `FileName string`

        Filename of the sticker

      - `Height int64`

        Sticker image height in pixels

      - `MimeType string`

        MIME type of the sticker image

      - `URL string`

        Presigned URL for downloading the sticker image (expires in 1 hour).

      - `Width int64`

        Sticker image width in pixels

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Reaction Removed Webhook Event

- `type ReactionRemovedWebhookEvent struct{…}`

  Complete webhook payload for reaction.removed events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ReactionEventBase`

    Payload for reaction.removed webhook events

    - `IsFromMe bool`

      Whether this reaction was from the owner of the phone number (true) or from someone else (false)

    - `ReactionType ReactionType`

      Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
      Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
      Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

      - `const ReactionTypeLove ReactionType = "love"`

      - `const ReactionTypeLike ReactionType = "like"`

      - `const ReactionTypeDislike ReactionType = "dislike"`

      - `const ReactionTypeLaugh ReactionType = "laugh"`

      - `const ReactionTypeEmphasize ReactionType = "emphasize"`

      - `const ReactionTypeQuestion ReactionType = "question"`

      - `const ReactionTypeCustom ReactionType = "custom"`

      - `const ReactionTypeSticker ReactionType = "sticker"`

    - `ChatID string`

      Chat identifier (UUID)

    - `CustomEmoji string`

      The actual emoji when reaction_type is "custom". Null for standard tapbacks.

    - `From string`

      DEPRECATED: Use from_handle instead. Phone number or email address of the person who added/removed the reaction.

    - `FromHandle ChatHandle`

      The person who added/removed the reaction as a full handle object

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `MessageID string`

      Message identifier (UUID) that the reaction was added to or removed from

    - `PartIndex int64`

      Index of the message part that was reacted to (0-based)

    - `ReactedAt Time`

      When the reaction was added or removed

    - `Service ServiceType`

      Messaging service type

    - `Sticker ReactionEventBaseSticker`

      Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

      - `FileName string`

        Filename of the sticker

      - `Height int64`

        Sticker image height in pixels

      - `MimeType string`

        MIME type of the sticker image

      - `URL string`

        Presigned URL for downloading the sticker image (expires in 1 hour).

      - `Width int64`

        Sticker image width in pixels

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Participant Added Webhook Event

- `type ParticipantAddedWebhookEvent struct{…}`

  Complete webhook payload for participant.added events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ParticipantAddedWebhookEventData`

    Payload for participant.added webhook events

    - `Handle string`

      DEPRECATED: Use participant instead. Handle (phone number or email address) of the added participant.

    - `AddedAt Time`

      When the participant was added

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `Participant ChatHandle`

      The added participant as a full handle object

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Participant Removed Webhook Event

- `type ParticipantRemovedWebhookEvent struct{…}`

  Complete webhook payload for participant.removed events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ParticipantRemovedWebhookEventData`

    Payload for participant.removed webhook events

    - `Handle string`

      DEPRECATED: Use participant instead. Handle (phone number or email address) of the removed participant.

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `Participant ChatHandle`

      The removed participant as a full handle object

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `RemovedAt Time`

      When the participant was removed

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Created Webhook Event

- `type ChatCreatedWebhookEvent struct{…}`

  Complete webhook payload for chat.created events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatCreatedWebhookEventData`

    Payload for chat.created webhook events. Matches GET /v3/chats/{chatId} response.

    - `ID string`

      Unique identifier for the chat

    - `CreatedAt Time`

      When the chat was created

    - `DisplayName string`

      Display name for the chat. Defaults to a comma-separated list of recipient handles. Can be updated for group chats.

    - `Handles []ChatHandle`

      List of chat participants with full handle details. Always contains at least two handles (your phone number and the other participant).

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `HealthStatus ChatCreatedWebhookEventDataHealthStatus`

      **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

      Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

      See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

      - `DocURL string`

        Deep-link to the relevant section of the Chat Health guide for this status.

      - `Status string`

        Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

        - `const ChatCreatedWebhookEventDataHealthStatusStatusHealthy ChatCreatedWebhookEventDataHealthStatusStatus = "HEALTHY"`

        - `const ChatCreatedWebhookEventDataHealthStatusStatusAtRisk ChatCreatedWebhookEventDataHealthStatusStatus = "AT_RISK"`

        - `const ChatCreatedWebhookEventDataHealthStatusStatusCritical ChatCreatedWebhookEventDataHealthStatusStatus = "CRITICAL"`

        - `const ChatCreatedWebhookEventDataHealthStatusStatusOptedOut ChatCreatedWebhookEventDataHealthStatusStatus = "OPTED_OUT"`

      - `UpdatedAt Time`

        When this status last changed.

    - `IsGroup bool`

      Whether this is a group chat

    - `UpdatedAt Time`

      When the chat was last updated

    - `Service ServiceType`

      Messaging service type

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Group Name Updated Webhook Event

- `type ChatGroupNameUpdatedWebhookEvent struct{…}`

  Complete webhook payload for chat.group_name_updated events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatGroupNameUpdatedWebhookEventData`

    Payload for chat.group_name_updated webhook events

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `UpdatedAt Time`

      When the update occurred

    - `ChangedByHandle ChatHandle`

      The handle who made the change.

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `NewValue string`

      New group name (null if the name was removed)

    - `OldValue string`

      Previous group name (null if no previous name)

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Group Icon Updated Webhook Event

- `type ChatGroupIconUpdatedWebhookEvent struct{…}`

  Complete webhook payload for chat.group_icon_updated events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatGroupIconUpdatedWebhookEventData`

    Payload for chat.group_icon_updated webhook events

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `UpdatedAt Time`

      When the update occurred

    - `ChangedByHandle ChatHandle`

      The handle who made the change.

      - `ID string`

        Unique identifier for this handle

      - `Handle string`

        Phone number (E.164) or email address of the participant

      - `JoinedAt Time`

        When this participant joined the chat

      - `Service ServiceType`

        Messaging service type

        - `const ServiceTypeiMessage ServiceType = "iMessage"`

        - `const ServiceTypeSMS ServiceType = "SMS"`

        - `const ServiceTypeRCS ServiceType = "RCS"`

      - `IsMe bool`

        Whether this handle belongs to the sender (your phone number)

      - `LeftAt Time`

        When they left (if applicable)

      - `Status ChatHandleStatus`

        Participant status

        - `const ChatHandleStatusActive ChatHandleStatus = "active"`

        - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

        - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

    - `NewValue string`

      New icon URL (null if the icon was removed)

    - `OldValue string`

      Previous icon URL (null if no previous icon)

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Group Name Update Failed Webhook Event

- `type ChatGroupNameUpdateFailedWebhookEvent struct{…}`

  Complete webhook payload for chat.group_name_update_failed events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatGroupNameUpdateFailedWebhookEventData`

    Error details for chat.group_name_update_failed webhook events.
    See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `ErrorCode int64`

      Error codes in webhook failure events (3007, 4001).

    - `FailedAt Time`

      When the failure was detected

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Group Icon Update Failed Webhook Event

- `type ChatGroupIconUpdateFailedWebhookEvent struct{…}`

  Complete webhook payload for chat.group_icon_update_failed events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatGroupIconUpdateFailedWebhookEventData`

    Error details for chat.group_icon_update_failed webhook events.
    See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

    - `ChatID string`

      Chat identifier (UUID) of the group chat

    - `ErrorCode int64`

      Error codes in webhook failure events (3007, 4001).

    - `FailedAt Time`

      When the failure was detected

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Typing Indicator Started Webhook Event

- `type ChatTypingIndicatorStartedWebhookEvent struct{…}`

  Complete webhook payload for chat.typing_indicator.started events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatTypingIndicatorStartedWebhookEventData`

    Payload for chat.typing_indicator.started webhook events

    - `ChatID string`

      Chat identifier

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Chat Typing Indicator Stopped Webhook Event

- `type ChatTypingIndicatorStoppedWebhookEvent struct{…}`

  Complete webhook payload for chat.typing_indicator.stopped events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data ChatTypingIndicatorStoppedWebhookEventData`

    Payload for chat.typing_indicator.stopped webhook events

    - `ChatID string`

      Chat identifier

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType WebhookEventType`

    Valid webhook event types that can be subscribed to.

    **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
    Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

    - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

    - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

    - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

    - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

    - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

    - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

    - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

    - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

    - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

    - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

    - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

    - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

    - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

    - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

    - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

    - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

    - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

    - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

    - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

    - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

    - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

    - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

    - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

    - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Phone Number Status Updated Webhook Event

- `type PhoneNumberStatusUpdatedWebhookEvent struct{…}`

  Complete webhook payload for phone_number.status_updated events

  - `APIVersion string`

    API version for the webhook payload format

  - `CreatedAt Time`

    When the event was created

  - `Data PhoneNumberStatusUpdatedWebhookEventData`

    Payload for phone_number.status_updated webhook events

    - `ChangedAt Time`

      When the status change occurred

    - `NewHealthStatus string`

      The new line health status

      - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusHealthy PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "HEALTHY"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusAtRisk PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "AT_RISK"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusCritical PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "CRITICAL"`

    - `NewStatus string`

      The new service status

      - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusActive PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "ACTIVE"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "FLAGGED"`

    - `PhoneNumber string`

      Phone number in E.164 format

    - `PreviousHealthStatus string`

      The previous line health status

      - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusHealthy PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "HEALTHY"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusAtRisk PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "AT_RISK"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusCritical PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "CRITICAL"`

    - `PreviousStatus string`

      The previous service status

      - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousStatusActive PhoneNumberStatusUpdatedWebhookEventDataPreviousStatus = "ACTIVE"`

      - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataPreviousStatus = "FLAGGED"`

  - `EventID string`

    Unique identifier for this event (for deduplication)

  - `EventType PhoneNumberStatusUpdatedWebhookEventEventType`

    The type of event

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageSent PhoneNumberStatusUpdatedWebhookEventEventType = "message.sent"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageReceived PhoneNumberStatusUpdatedWebhookEventEventType = "message.received"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageRead PhoneNumberStatusUpdatedWebhookEventEventType = "message.read"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageDelivered PhoneNumberStatusUpdatedWebhookEventEventType = "message.delivered"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageFailed PhoneNumberStatusUpdatedWebhookEventEventType = "message.failed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageEdited PhoneNumberStatusUpdatedWebhookEventEventType = "message.edited"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeReactionAdded PhoneNumberStatusUpdatedWebhookEventEventType = "reaction.added"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeReactionRemoved PhoneNumberStatusUpdatedWebhookEventEventType = "reaction.removed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeParticipantAdded PhoneNumberStatusUpdatedWebhookEventEventType = "participant.added"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeParticipantRemoved PhoneNumberStatusUpdatedWebhookEventEventType = "participant.removed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatCreated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.created"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupNameUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_name_updated"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupIconUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_icon_updated"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupNameUpdateFailed PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_name_update_failed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupIconUpdateFailed PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_icon_update_failed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatTypingIndicatorStarted PhoneNumberStatusUpdatedWebhookEventEventType = "chat.typing_indicator.started"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatTypingIndicatorStopped PhoneNumberStatusUpdatedWebhookEventEventType = "chat.typing_indicator.stopped"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypePhoneNumberStatusUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "phone_number.status_updated"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallInitiated PhoneNumberStatusUpdatedWebhookEventEventType = "call.initiated"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallRinging PhoneNumberStatusUpdatedWebhookEventEventType = "call.ringing"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallAnswered PhoneNumberStatusUpdatedWebhookEventEventType = "call.answered"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallEnded PhoneNumberStatusUpdatedWebhookEventEventType = "call.ended"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallFailed PhoneNumberStatusUpdatedWebhookEventEventType = "call.failed"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallDeclined PhoneNumberStatusUpdatedWebhookEventEventType = "call.declined"`

    - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallNoAnswer PhoneNumberStatusUpdatedWebhookEventEventType = "call.no_answer"`

  - `PartnerID string`

    Partner identifier. Present on all webhooks for cross-referencing.

  - `TraceID string`

    Trace ID for debugging and correlation across systems.

  - `WebhookVersion string`

    Date-based webhook payload version.
    Determined by the `?version=` query parameter in your webhook subscription URL.
    If no version parameter is specified, defaults based on subscription creation date.

### Events Webhook Event

- `type EventsWebhookEventUnion interface{…}`

  Complete webhook payload for message.sent events (2026-02-03 format)

  - `type MessageSentWebhookEvent struct{…}`

    Complete webhook payload for message.sent events (2026-02-03 format)

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageEventV2`

      Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

      This schema is used for message.sent, message.received, message.delivered, and message.read
      events when the subscription URL includes `?version=2026-02-03`.

      Key differences from V1 (2025-01-01):

      - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
      - `sender_handle`: Full handle object for the sender
      - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
      - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

      Timestamps indicate the message state:

      - `message.sent`: sent_at set, delivered_at=null, read_at=null
      - `message.received`: sent_at set, delivered_at=null, read_at=null
      - `message.delivered`: sent_at set, delivered_at set, read_at=null
      - `message.read`: sent_at set, delivered_at set, read_at set

      - `ID string`

        Message identifier

      - `Chat MessageEventV2Chat`

        Chat information

        - `ID string`

          Chat identifier

        - `HealthStatus MessageEventV2ChatHealthStatus`

          **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

          Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

          See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

          - `DocURL string`

            Deep-link to the relevant section of the Chat Health guide for this status.

          - `Status string`

            Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

            - `const MessageEventV2ChatHealthStatusStatusHealthy MessageEventV2ChatHealthStatusStatus = "HEALTHY"`

            - `const MessageEventV2ChatHealthStatusStatusAtRisk MessageEventV2ChatHealthStatusStatus = "AT_RISK"`

            - `const MessageEventV2ChatHealthStatusStatusCritical MessageEventV2ChatHealthStatusStatus = "CRITICAL"`

            - `const MessageEventV2ChatHealthStatusStatusOptedOut MessageEventV2ChatHealthStatusStatus = "OPTED_OUT"`

          - `UpdatedAt Time`

            When this status last changed.

        - `IsGroup bool`

          Whether this is a group chat

        - `OwnerHandle ChatHandle`

          Your phone number's handle. Always has is_me=true.

          - `ID string`

            Unique identifier for this handle

          - `Handle string`

            Phone number (E.164) or email address of the participant

          - `JoinedAt Time`

            When this participant joined the chat

          - `Service ServiceType`

            Messaging service type

            - `const ServiceTypeiMessage ServiceType = "iMessage"`

            - `const ServiceTypeSMS ServiceType = "SMS"`

            - `const ServiceTypeRCS ServiceType = "RCS"`

          - `IsMe bool`

            Whether this handle belongs to the sender (your phone number)

          - `LeftAt Time`

            When they left (if applicable)

          - `Status ChatHandleStatus`

            Participant status

            - `const ChatHandleStatusActive ChatHandleStatus = "active"`

            - `const ChatHandleStatusLeft ChatHandleStatus = "left"`

            - `const ChatHandleStatusRemoved ChatHandleStatus = "removed"`

      - `Direction MessageEventV2Direction`

        Message direction - "outbound" if sent by you, "inbound" if received

        - `const MessageEventV2DirectionInbound MessageEventV2Direction = "inbound"`

        - `const MessageEventV2DirectionOutbound MessageEventV2Direction = "outbound"`

      - `Parts []MessageEventV2PartUnion`

        Message parts (text and/or media)

        - `type SchemasTextPartResponse struct{…}`

          A text message part

          - `Type SchemasTextPartResponseType`

            Indicates this is a text message part

            - `const SchemasTextPartResponseTypeText SchemasTextPartResponseType = "text"`

          - `Value string`

            The text content

          - `TextDecorations []TextDecoration`

            Text decorations applied to character ranges in the value

            - `Range []int64`

              Character range `[start, end)` in the `value` string where the decoration applies.
              `start` is inclusive, `end` is exclusive.
              *Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.*

            - `Animation TextDecorationAnimation`

              Animated text effect to apply. Mutually exclusive with `style`.

              - `const TextDecorationAnimationBig TextDecorationAnimation = "big"`

              - `const TextDecorationAnimationSmall TextDecorationAnimation = "small"`

              - `const TextDecorationAnimationShake TextDecorationAnimation = "shake"`

              - `const TextDecorationAnimationNod TextDecorationAnimation = "nod"`

              - `const TextDecorationAnimationExplode TextDecorationAnimation = "explode"`

              - `const TextDecorationAnimationRipple TextDecorationAnimation = "ripple"`

              - `const TextDecorationAnimationBloom TextDecorationAnimation = "bloom"`

              - `const TextDecorationAnimationJitter TextDecorationAnimation = "jitter"`

            - `Style TextDecorationStyle`

              Text style to apply. Mutually exclusive with `animation`.

              - `const TextDecorationStyleBold TextDecorationStyle = "bold"`

              - `const TextDecorationStyleItalic TextDecorationStyle = "italic"`

              - `const TextDecorationStyleStrikethrough TextDecorationStyle = "strikethrough"`

              - `const TextDecorationStyleUnderline TextDecorationStyle = "underline"`

        - `type SchemasMediaPartResponse struct{…}`

          A media attachment part

          - `ID string`

            Unique attachment identifier

          - `Filename string`

            Original filename

          - `MimeType string`

            MIME type of the file

          - `SizeBytes int64`

            File size in bytes

          - `Type SchemasMediaPartResponseType`

            Indicates this is a media attachment part

            - `const SchemasMediaPartResponseTypeMedia SchemasMediaPartResponseType = "media"`

          - `URL string`

            Presigned URL for downloading the attachment (expires in 1 hour).

        - `type MessageEventV2PartLink struct{…}`

          A rich link preview part

          - `Type Link`

            Indicates this is a rich link preview part

            - `const LinkLink Link = "link"`

          - `Value string`

            The URL

      - `SenderHandle ChatHandle`

        The handle that sent this message

      - `Service ServiceType`

        Messaging service type

      - `DeliveredAt Time`

        When the message was delivered. Null if not yet delivered.

      - `Effect SchemasMessageEffect`

        iMessage effect applied to a message (screen or bubble animation)

        - `Name string`

          Effect name (confetti, fireworks, slam, gentle, etc.)

        - `Type SchemasMessageEffectType`

          Effect category

          - `const SchemasMessageEffectTypeScreen SchemasMessageEffectType = "screen"`

          - `const SchemasMessageEffectTypeBubble SchemasMessageEffectType = "bubble"`

      - `IdempotencyKey string`

        Idempotency key for deduplication of outbound messages.

      - `PreferredService MessageEventV2PreferredService`

        Preferred messaging service type. Includes "auto" for default fallback behavior.

        - `const MessageEventV2PreferredServiceiMessage MessageEventV2PreferredService = "iMessage"`

        - `const MessageEventV2PreferredServiceSMS MessageEventV2PreferredService = "SMS"`

        - `const MessageEventV2PreferredServiceRCS MessageEventV2PreferredService = "RCS"`

        - `const MessageEventV2PreferredServiceAuto MessageEventV2PreferredService = "auto"`

      - `ReadAt Time`

        When the message was read. Null if not yet read.

      - `ReplyTo MessageEventV2ReplyTo`

        Reference to the message this is replying to (for threaded replies)

        - `MessageID string`

          ID of the message being replied to

        - `PartIndex int64`

          Index of the part being replied to

      - `SentAt Time`

        When the message was sent. Null if not yet sent.

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

      - `const WebhookEventTypeMessageSent WebhookEventType = "message.sent"`

      - `const WebhookEventTypeMessageReceived WebhookEventType = "message.received"`

      - `const WebhookEventTypeMessageRead WebhookEventType = "message.read"`

      - `const WebhookEventTypeMessageDelivered WebhookEventType = "message.delivered"`

      - `const WebhookEventTypeMessageFailed WebhookEventType = "message.failed"`

      - `const WebhookEventTypeMessageEdited WebhookEventType = "message.edited"`

      - `const WebhookEventTypeReactionAdded WebhookEventType = "reaction.added"`

      - `const WebhookEventTypeReactionRemoved WebhookEventType = "reaction.removed"`

      - `const WebhookEventTypeParticipantAdded WebhookEventType = "participant.added"`

      - `const WebhookEventTypeParticipantRemoved WebhookEventType = "participant.removed"`

      - `const WebhookEventTypeChatCreated WebhookEventType = "chat.created"`

      - `const WebhookEventTypeChatGroupNameUpdated WebhookEventType = "chat.group_name_updated"`

      - `const WebhookEventTypeChatGroupIconUpdated WebhookEventType = "chat.group_icon_updated"`

      - `const WebhookEventTypeChatGroupNameUpdateFailed WebhookEventType = "chat.group_name_update_failed"`

      - `const WebhookEventTypeChatGroupIconUpdateFailed WebhookEventType = "chat.group_icon_update_failed"`

      - `const WebhookEventTypeChatTypingIndicatorStarted WebhookEventType = "chat.typing_indicator.started"`

      - `const WebhookEventTypeChatTypingIndicatorStopped WebhookEventType = "chat.typing_indicator.stopped"`

      - `const WebhookEventTypePhoneNumberStatusUpdated WebhookEventType = "phone_number.status_updated"`

      - `const WebhookEventTypeCallInitiated WebhookEventType = "call.initiated"`

      - `const WebhookEventTypeCallRinging WebhookEventType = "call.ringing"`

      - `const WebhookEventTypeCallAnswered WebhookEventType = "call.answered"`

      - `const WebhookEventTypeCallEnded WebhookEventType = "call.ended"`

      - `const WebhookEventTypeCallFailed WebhookEventType = "call.failed"`

      - `const WebhookEventTypeCallDeclined WebhookEventType = "call.declined"`

      - `const WebhookEventTypeCallNoAnswer WebhookEventType = "call.no_answer"`

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type MessageReceivedWebhookEvent struct{…}`

    Complete webhook payload for message.received events (2026-02-03 format)

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageEventV2`

      Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

      This schema is used for message.sent, message.received, message.delivered, and message.read
      events when the subscription URL includes `?version=2026-02-03`.

      Key differences from V1 (2025-01-01):

      - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
      - `sender_handle`: Full handle object for the sender
      - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
      - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

      Timestamps indicate the message state:

      - `message.sent`: sent_at set, delivered_at=null, read_at=null
      - `message.received`: sent_at set, delivered_at=null, read_at=null
      - `message.delivered`: sent_at set, delivered_at set, read_at=null
      - `message.read`: sent_at set, delivered_at set, read_at set

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type MessageReadWebhookEvent struct{…}`

    Complete webhook payload for message.read events (2026-02-03 format)

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageEventV2`

      Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

      This schema is used for message.sent, message.received, message.delivered, and message.read
      events when the subscription URL includes `?version=2026-02-03`.

      Key differences from V1 (2025-01-01):

      - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
      - `sender_handle`: Full handle object for the sender
      - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
      - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

      Timestamps indicate the message state:

      - `message.sent`: sent_at set, delivered_at=null, read_at=null
      - `message.received`: sent_at set, delivered_at=null, read_at=null
      - `message.delivered`: sent_at set, delivered_at set, read_at=null
      - `message.read`: sent_at set, delivered_at set, read_at set

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type MessageDeliveredWebhookEvent struct{…}`

    Complete webhook payload for message.delivered events (2026-02-03 format)

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageEventV2`

      Unified payload for message webhooks when using `webhook_version: "2026-02-03"`.

      This schema is used for message.sent, message.received, message.delivered, and message.read
      events when the subscription URL includes `?version=2026-02-03`.

      Key differences from V1 (2025-01-01):

      - `direction`: "inbound" or "outbound" instead of `is_from_me` boolean
      - `sender_handle`: Full handle object for the sender
      - `chat`: Nested object with `id`, `is_group`, and `owner_handle`
      - Message fields (`id`, `parts`, `effect`, etc.) are at the top level, not nested in `message`

      Timestamps indicate the message state:

      - `message.sent`: sent_at set, delivered_at=null, read_at=null
      - `message.received`: sent_at set, delivered_at=null, read_at=null
      - `message.delivered`: sent_at set, delivered_at set, read_at=null
      - `message.read`: sent_at set, delivered_at set, read_at set

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type MessageFailedWebhookEvent struct{…}`

    Complete webhook payload for message.failed events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageFailedWebhookEventData`

      Error details for message.failed webhook events.
      See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

      - `Code int64`

        Error codes in webhook failure events (3007, 4001).

      - `FailedAt Time`

        When the failure was detected

      - `ChatID string`

        Chat identifier (UUID)

      - `MessageID string`

        Message identifier (UUID)

      - `Reason string`

        Human-readable description of the failure

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type MessageEditedWebhookEvent struct{…}`

    Complete webhook payload for message.edited events (2026-02-03 format only)

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data MessageEditedWebhookEventData`

      Payload for `message.edited` events (2026-02-03 format).

      Describes which part of a message was edited and when. Only text parts can be edited.
      Only available for subscriptions using `webhook_version: "2026-02-03"`.

      - `ID string`

        Message identifier

      - `Chat MessageEditedWebhookEventDataChat`

        Chat context

        - `ID string`

          Chat identifier

        - `HealthStatus MessageEditedWebhookEventDataChatHealthStatus`

          **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

          Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

          See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

          - `DocURL string`

            Deep-link to the relevant section of the Chat Health guide for this status.

          - `Status string`

            Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

            - `const MessageEditedWebhookEventDataChatHealthStatusStatusHealthy MessageEditedWebhookEventDataChatHealthStatusStatus = "HEALTHY"`

            - `const MessageEditedWebhookEventDataChatHealthStatusStatusAtRisk MessageEditedWebhookEventDataChatHealthStatusStatus = "AT_RISK"`

            - `const MessageEditedWebhookEventDataChatHealthStatusStatusCritical MessageEditedWebhookEventDataChatHealthStatusStatus = "CRITICAL"`

            - `const MessageEditedWebhookEventDataChatHealthStatusStatusOptedOut MessageEditedWebhookEventDataChatHealthStatusStatus = "OPTED_OUT"`

          - `UpdatedAt Time`

            When this status last changed.

        - `IsGroup bool`

          Whether this is a group chat

        - `OwnerHandle ChatHandle`

          The handle that owns this chat (your phone number)

      - `Direction string`

        "outbound" if you sent the original message, "inbound" if you received it

        - `const MessageEditedWebhookEventDataDirectionOutbound MessageEditedWebhookEventDataDirection = "outbound"`

        - `const MessageEditedWebhookEventDataDirectionInbound MessageEditedWebhookEventDataDirection = "inbound"`

      - `EditedAt Time`

        When the edit occurred

      - `Part MessageEditedWebhookEventDataPart`

        The edited part

        - `Index int64`

          Zero-based index of the edited part within the message

        - `Text string`

          New text content of the part

      - `SenderHandle ChatHandle`

        The handle that sent (and edited) this message

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ReactionAddedWebhookEvent struct{…}`

    Complete webhook payload for reaction.added events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ReactionEventBase`

      Payload for reaction.added webhook events

      - `IsFromMe bool`

        Whether this reaction was from the owner of the phone number (true) or from someone else (false)

      - `ReactionType ReactionType`

        Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
        Custom emoji reactions have type "custom" with the actual emoji in the custom_emoji field.
        Sticker reactions have type "sticker" with sticker attachment details in the sticker field.

        - `const ReactionTypeLove ReactionType = "love"`

        - `const ReactionTypeLike ReactionType = "like"`

        - `const ReactionTypeDislike ReactionType = "dislike"`

        - `const ReactionTypeLaugh ReactionType = "laugh"`

        - `const ReactionTypeEmphasize ReactionType = "emphasize"`

        - `const ReactionTypeQuestion ReactionType = "question"`

        - `const ReactionTypeCustom ReactionType = "custom"`

        - `const ReactionTypeSticker ReactionType = "sticker"`

      - `ChatID string`

        Chat identifier (UUID)

      - `CustomEmoji string`

        The actual emoji when reaction_type is "custom". Null for standard tapbacks.

      - `From string`

        DEPRECATED: Use from_handle instead. Phone number or email address of the person who added/removed the reaction.

      - `FromHandle ChatHandle`

        The person who added/removed the reaction as a full handle object

      - `MessageID string`

        Message identifier (UUID) that the reaction was added to or removed from

      - `PartIndex int64`

        Index of the message part that was reacted to (0-based)

      - `ReactedAt Time`

        When the reaction was added or removed

      - `Service ServiceType`

        Messaging service type

      - `Sticker ReactionEventBaseSticker`

        Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions.

        - `FileName string`

          Filename of the sticker

        - `Height int64`

          Sticker image height in pixels

        - `MimeType string`

          MIME type of the sticker image

        - `URL string`

          Presigned URL for downloading the sticker image (expires in 1 hour).

        - `Width int64`

          Sticker image width in pixels

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ReactionRemovedWebhookEvent struct{…}`

    Complete webhook payload for reaction.removed events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ReactionEventBase`

      Payload for reaction.removed webhook events

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ParticipantAddedWebhookEvent struct{…}`

    Complete webhook payload for participant.added events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ParticipantAddedWebhookEventData`

      Payload for participant.added webhook events

      - `Handle string`

        DEPRECATED: Use participant instead. Handle (phone number or email address) of the added participant.

      - `AddedAt Time`

        When the participant was added

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `Participant ChatHandle`

        The added participant as a full handle object

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ParticipantRemovedWebhookEvent struct{…}`

    Complete webhook payload for participant.removed events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ParticipantRemovedWebhookEventData`

      Payload for participant.removed webhook events

      - `Handle string`

        DEPRECATED: Use participant instead. Handle (phone number or email address) of the removed participant.

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `Participant ChatHandle`

        The removed participant as a full handle object

      - `RemovedAt Time`

        When the participant was removed

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatCreatedWebhookEvent struct{…}`

    Complete webhook payload for chat.created events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatCreatedWebhookEventData`

      Payload for chat.created webhook events. Matches GET /v3/chats/{chatId} response.

      - `ID string`

        Unique identifier for the chat

      - `CreatedAt Time`

        When the chat was created

      - `DisplayName string`

        Display name for the chat. Defaults to a comma-separated list of recipient handles. Can be updated for group chats.

      - `Handles []ChatHandle`

        List of chat participants with full handle details. Always contains at least two handles (your phone number and the other participant).

        - `ID string`

          Unique identifier for this handle

        - `Handle string`

          Phone number (E.164) or email address of the participant

        - `JoinedAt Time`

          When this participant joined the chat

        - `Service ServiceType`

          Messaging service type

        - `IsMe bool`

          Whether this handle belongs to the sender (your phone number)

        - `LeftAt Time`

          When they left (if applicable)

        - `Status ChatHandleStatus`

          Participant status

      - `HealthStatus ChatCreatedWebhookEventDataHealthStatus`

        **[BETA]** Current health for a chat. Always present — chats start at `HEALTHY` and may shift based on engagement and delivery signals on the conversation. Many `AT_RISK` or `CRITICAL` chats on a single line increase the risk of line flagging.

        Switch on `status` to gate sends or surface line health in your UI — the enum is the long-term contract. Each status carries a `doc_url` that deep-links to the relevant section of the Chat Health guide.

        See the [Chat Health guide](/guides/chats/chat-health) for what each status means and how to react.

        - `DocURL string`

          Deep-link to the relevant section of the Chat Health guide for this status.

        - `Status string`

          Current health bucket for the chat. See the [Chat Health guide](/guides/chats/chat-health) for what each value means and how to react. `doc_url` deep-links to the relevant section.

          - `const ChatCreatedWebhookEventDataHealthStatusStatusHealthy ChatCreatedWebhookEventDataHealthStatusStatus = "HEALTHY"`

          - `const ChatCreatedWebhookEventDataHealthStatusStatusAtRisk ChatCreatedWebhookEventDataHealthStatusStatus = "AT_RISK"`

          - `const ChatCreatedWebhookEventDataHealthStatusStatusCritical ChatCreatedWebhookEventDataHealthStatusStatus = "CRITICAL"`

          - `const ChatCreatedWebhookEventDataHealthStatusStatusOptedOut ChatCreatedWebhookEventDataHealthStatusStatus = "OPTED_OUT"`

        - `UpdatedAt Time`

          When this status last changed.

      - `IsGroup bool`

        Whether this is a group chat

      - `UpdatedAt Time`

        When the chat was last updated

      - `Service ServiceType`

        Messaging service type

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatGroupNameUpdatedWebhookEvent struct{…}`

    Complete webhook payload for chat.group_name_updated events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatGroupNameUpdatedWebhookEventData`

      Payload for chat.group_name_updated webhook events

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `UpdatedAt Time`

        When the update occurred

      - `ChangedByHandle ChatHandle`

        The handle who made the change.

      - `NewValue string`

        New group name (null if the name was removed)

      - `OldValue string`

        Previous group name (null if no previous name)

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatGroupIconUpdatedWebhookEvent struct{…}`

    Complete webhook payload for chat.group_icon_updated events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatGroupIconUpdatedWebhookEventData`

      Payload for chat.group_icon_updated webhook events

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `UpdatedAt Time`

        When the update occurred

      - `ChangedByHandle ChatHandle`

        The handle who made the change.

      - `NewValue string`

        New icon URL (null if the icon was removed)

      - `OldValue string`

        Previous icon URL (null if no previous icon)

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatGroupNameUpdateFailedWebhookEvent struct{…}`

    Complete webhook payload for chat.group_name_update_failed events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatGroupNameUpdateFailedWebhookEventData`

      Error details for chat.group_name_update_failed webhook events.
      See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `ErrorCode int64`

        Error codes in webhook failure events (3007, 4001).

      - `FailedAt Time`

        When the failure was detected

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatGroupIconUpdateFailedWebhookEvent struct{…}`

    Complete webhook payload for chat.group_icon_update_failed events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatGroupIconUpdateFailedWebhookEventData`

      Error details for chat.group_icon_update_failed webhook events.
      See [WebhookErrorCode](#/components/schemas/WebhookErrorCode) for the full error code reference.

      - `ChatID string`

        Chat identifier (UUID) of the group chat

      - `ErrorCode int64`

        Error codes in webhook failure events (3007, 4001).

      - `FailedAt Time`

        When the failure was detected

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatTypingIndicatorStartedWebhookEvent struct{…}`

    Complete webhook payload for chat.typing_indicator.started events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatTypingIndicatorStartedWebhookEventData`

      Payload for chat.typing_indicator.started webhook events

      - `ChatID string`

        Chat identifier

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type ChatTypingIndicatorStoppedWebhookEvent struct{…}`

    Complete webhook payload for chat.typing_indicator.stopped events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data ChatTypingIndicatorStoppedWebhookEventData`

      Payload for chat.typing_indicator.stopped webhook events

      - `ChatID string`

        Chat identifier

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType WebhookEventType`

      Valid webhook event types that can be subscribed to.

      **Note:** `message.edited` is only delivered to subscriptions using `webhook_version: "2026-02-03"`.
      Subscribing to this event on a v2025 subscription will not produce any deliveries.

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.

  - `type PhoneNumberStatusUpdatedWebhookEvent struct{…}`

    Complete webhook payload for phone_number.status_updated events

    - `APIVersion string`

      API version for the webhook payload format

    - `CreatedAt Time`

      When the event was created

    - `Data PhoneNumberStatusUpdatedWebhookEventData`

      Payload for phone_number.status_updated webhook events

      - `ChangedAt Time`

        When the status change occurred

      - `NewHealthStatus string`

        The new line health status

        - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusHealthy PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "HEALTHY"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusAtRisk PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "AT_RISK"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatusCritical PhoneNumberStatusUpdatedWebhookEventDataNewHealthStatus = "CRITICAL"`

      - `NewStatus string`

        The new service status

        - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusActive PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "ACTIVE"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "FLAGGED"`

      - `PhoneNumber string`

        Phone number in E.164 format

      - `PreviousHealthStatus string`

        The previous line health status

        - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusHealthy PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "HEALTHY"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusAtRisk PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "AT_RISK"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatusCritical PhoneNumberStatusUpdatedWebhookEventDataPreviousHealthStatus = "CRITICAL"`

      - `PreviousStatus string`

        The previous service status

        - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousStatusActive PhoneNumberStatusUpdatedWebhookEventDataPreviousStatus = "ACTIVE"`

        - `const PhoneNumberStatusUpdatedWebhookEventDataPreviousStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataPreviousStatus = "FLAGGED"`

    - `EventID string`

      Unique identifier for this event (for deduplication)

    - `EventType PhoneNumberStatusUpdatedWebhookEventEventType`

      The type of event

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageSent PhoneNumberStatusUpdatedWebhookEventEventType = "message.sent"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageReceived PhoneNumberStatusUpdatedWebhookEventEventType = "message.received"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageRead PhoneNumberStatusUpdatedWebhookEventEventType = "message.read"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageDelivered PhoneNumberStatusUpdatedWebhookEventEventType = "message.delivered"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageFailed PhoneNumberStatusUpdatedWebhookEventEventType = "message.failed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeMessageEdited PhoneNumberStatusUpdatedWebhookEventEventType = "message.edited"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeReactionAdded PhoneNumberStatusUpdatedWebhookEventEventType = "reaction.added"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeReactionRemoved PhoneNumberStatusUpdatedWebhookEventEventType = "reaction.removed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeParticipantAdded PhoneNumberStatusUpdatedWebhookEventEventType = "participant.added"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeParticipantRemoved PhoneNumberStatusUpdatedWebhookEventEventType = "participant.removed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatCreated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.created"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupNameUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_name_updated"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupIconUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_icon_updated"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupNameUpdateFailed PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_name_update_failed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatGroupIconUpdateFailed PhoneNumberStatusUpdatedWebhookEventEventType = "chat.group_icon_update_failed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatTypingIndicatorStarted PhoneNumberStatusUpdatedWebhookEventEventType = "chat.typing_indicator.started"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeChatTypingIndicatorStopped PhoneNumberStatusUpdatedWebhookEventEventType = "chat.typing_indicator.stopped"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypePhoneNumberStatusUpdated PhoneNumberStatusUpdatedWebhookEventEventType = "phone_number.status_updated"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallInitiated PhoneNumberStatusUpdatedWebhookEventEventType = "call.initiated"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallRinging PhoneNumberStatusUpdatedWebhookEventEventType = "call.ringing"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallAnswered PhoneNumberStatusUpdatedWebhookEventEventType = "call.answered"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallEnded PhoneNumberStatusUpdatedWebhookEventEventType = "call.ended"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallFailed PhoneNumberStatusUpdatedWebhookEventEventType = "call.failed"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallDeclined PhoneNumberStatusUpdatedWebhookEventEventType = "call.declined"`

      - `const PhoneNumberStatusUpdatedWebhookEventEventTypeCallNoAnswer PhoneNumberStatusUpdatedWebhookEventEventType = "call.no_answer"`

    - `PartnerID string`

      Partner identifier. Present on all webhooks for cross-referencing.

    - `TraceID string`

      Trace ID for debugging and correlation across systems.

    - `WebhookVersion string`

      Date-based webhook payload version.
      Determined by the `?version=` query parameter in your webhook subscription URL.
      If no version parameter is specified, defaults based on subscription creation date.
