# 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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `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"` - `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 - `NewStatus string` The new service status - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusActive PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "ACTIVE"` - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "FLAGGED"` - `PhoneNumber string` Phone number in E.164 format - `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 - `HealthScore MessageEventV2ChatHealthScore` **[BETA]** Health assessment for a chat. Higher `score` is healthier. `null` when a score isn't available yet. Scoring may change during beta. - `Reason string` Short summary of what's affecting the score. Empty when the score is 100. - `Score int64` Health score from 0 to 100. Higher is healthier. - `UpdatedAt Time` When this health score was last computed. - `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 - `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 - `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 - `NewStatus string` The new service status - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusActive PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "ACTIVE"` - `const PhoneNumberStatusUpdatedWebhookEventDataNewStatusFlagged PhoneNumberStatusUpdatedWebhookEventDataNewStatus = "FLAGGED"` - `PhoneNumber string` Phone number in E.164 format - `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.