Skip to content
V2 (Legacy) API ReferenceGet started

Webhooks

Events
webhooks.events()
Function
ModelsExpand Collapse
class 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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
class MessagePayload: โ€ฆ

Message content nested within webhook events

id: Optional[str]

Message identifier

formatuuid
created_at: Optional[datetime]

When the message record was created

formatdate-time
delivered_at: Optional[datetime]

When the message was delivered

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
is_delivered: Optional[bool]

Whether the message has been delivered

is_read: Optional[bool]

Whether the message has been read

parts: Optional[List[Part]]

Message content parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

read_at: Optional[datetime]

When the message was read

formatdate-time
reply_to: Optional[ReplyTo]

Reference to the message this is replying to

message_id: Optional[str]

The ID of the message being replied to

formatuuid
part_index: Optional[int]

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

formatint32
minimum0
sent_at: Optional[datetime]

When the message was sent

formatdate-time
updated_at: Optional[datetime]

When the message record was last updated

formatdate-time
class ReactionEventBase: โ€ฆ
is_from_me: bool

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

reaction_type: 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.

One of the following:
"love"
"like"
"dislike"
"laugh"
"emphasize"
"question"
"custom"
"sticker"
chat_id: Optional[str]

Chat identifier (UUID)

custom_emoji: Optional[str]

The actual emoji when reaction_type is โ€œcustomโ€. Null for standard tapbacks.

Deprecatedfrom_: Optional[str]

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

from_handle: Optional[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
message_id: Optional[str]

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

part_index: Optional[int]

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

formatint32
minimum0
reacted_at: Optional[datetime]

When the reaction was added or removed

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
sticker: Optional[Sticker]

Sticker attachment details when reaction_type is โ€œstickerโ€. Null for non-sticker reactions.

file_name: Optional[str]

Filename of the sticker

height: Optional[int]

Sticker image height in pixels

mime_type: Optional[str]

MIME type of the sticker image

url: Optional[str]

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

formaturi
width: Optional[int]

Sticker image width in pixels

class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class SchemasMessageEffect: โ€ฆ

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class MessageSentWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageReceivedWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageReadWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageDeliveredWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageFailedWebhookEvent: โ€ฆ

Complete webhook payload for message.failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for message.failed webhook events. See WebhookErrorCode for the full error code reference.

code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
chat_id: Optional[str]

Chat identifier (UUID)

message_id: Optional[str]

Message identifier (UUID)

reason: Optional[str]

Human-readable description of the failure

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageEditedWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

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: str

Message identifier

formatuuid
chat: DataChat

Chat context

id: str

Chat identifier

formatuuid
is_group: bool

Whether this is a group chat

owner_handle: ChatHandle

The handle that owns this chat (your phone number)

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["outbound", "inbound"]

โ€œoutboundโ€ if you sent the original message, โ€œinboundโ€ if you received it

One of the following:
"outbound"
"inbound"
edited_at: datetime

When the edit occurred

formatdate-time
part: DataPart

The edited part

index: int

Zero-based index of the edited part within the message

text: str

New text content of the part

sender_handle: ChatHandle

The handle that sent (and edited) this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ReactionAddedWebhookEvent: โ€ฆ

Complete webhook payload for reaction.added events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

Payload for reaction.added webhook events

is_from_me: bool

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

reaction_type: 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.

One of the following:
"love"
"like"
"dislike"
"laugh"
"emphasize"
"question"
"custom"
"sticker"
chat_id: Optional[str]

Chat identifier (UUID)

custom_emoji: Optional[str]

The actual emoji when reaction_type is โ€œcustomโ€. Null for standard tapbacks.

Deprecatedfrom_: Optional[str]

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

from_handle: Optional[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
message_id: Optional[str]

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

part_index: Optional[int]

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

formatint32
minimum0
reacted_at: Optional[datetime]

When the reaction was added or removed

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
sticker: Optional[Sticker]

Sticker attachment details when reaction_type is โ€œstickerโ€. Null for non-sticker reactions.

file_name: Optional[str]

Filename of the sticker

height: Optional[int]

Sticker image height in pixels

mime_type: Optional[str]

MIME type of the sticker image

url: Optional[str]

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

formaturi
width: Optional[int]

Sticker image width in pixels

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ReactionRemovedWebhookEvent: โ€ฆ

Complete webhook payload for reaction.removed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

Payload for reaction.removed webhook events

is_from_me: bool

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

reaction_type: 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.

One of the following:
"love"
"like"
"dislike"
"laugh"
"emphasize"
"question"
"custom"
"sticker"
chat_id: Optional[str]

Chat identifier (UUID)

custom_emoji: Optional[str]

The actual emoji when reaction_type is โ€œcustomโ€. Null for standard tapbacks.

Deprecatedfrom_: Optional[str]

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

from_handle: Optional[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
message_id: Optional[str]

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

part_index: Optional[int]

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

formatint32
minimum0
reacted_at: Optional[datetime]

When the reaction was added or removed

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
sticker: Optional[Sticker]

Sticker attachment details when reaction_type is โ€œstickerโ€. Null for non-sticker reactions.

file_name: Optional[str]

Filename of the sticker

height: Optional[int]

Sticker image height in pixels

mime_type: Optional[str]

MIME type of the sticker image

url: Optional[str]

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

formaturi
width: Optional[int]

Sticker image width in pixels

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ParticipantAddedWebhookEvent: โ€ฆ

Complete webhook payload for participant.added events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for participant.added webhook events

Deprecatedhandle: str

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

added_at: Optional[datetime]

When the participant was added

formatdate-time
chat_id: Optional[str]

Chat identifier (UUID) of the group chat

participant: Optional[ChatHandle]

The added participant as a full handle object

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ParticipantRemovedWebhookEvent: โ€ฆ

Complete webhook payload for participant.removed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for participant.removed webhook events

Deprecatedhandle: str

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

chat_id: Optional[str]

Chat identifier (UUID) of the group chat

participant: Optional[ChatHandle]

The removed participant as a full handle object

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
removed_at: Optional[datetime]

When the participant was removed

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatCreatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.created events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

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

id: str

Unique identifier for the chat

formatuuid
created_at: datetime

When the chat was created

formatdate-time
display_name: Optional[str]

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

handles: List[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
is_group: bool

Whether this is a group chat

updated_at: datetime

When the chat was last updated

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupNameUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_name_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.group_name_updated webhook events

chat_id: str

Chat identifier (UUID) of the group chat

updated_at: datetime

When the update occurred

formatdate-time
changed_by_handle: Optional[ChatHandle]

The handle who made the change.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
new_value: Optional[str]

New group name (null if the name was removed)

old_value: Optional[str]

Previous group name (null if no previous name)

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupIconUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_icon_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.group_icon_updated webhook events

chat_id: str

Chat identifier (UUID) of the group chat

updated_at: datetime

When the update occurred

formatdate-time
changed_by_handle: Optional[ChatHandle]

The handle who made the change.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
new_value: Optional[str]

New icon URL (null if the icon was removed)

old_value: Optional[str]

Previous icon URL (null if no previous icon)

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupNameUpdateFailedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_name_update_failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for chat.group_name_update_failed webhook events. See WebhookErrorCode for the full error code reference.

chat_id: str

Chat identifier (UUID) of the group chat

error_code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupIconUpdateFailedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_icon_update_failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for chat.group_icon_update_failed webhook events. See WebhookErrorCode for the full error code reference.

chat_id: str

Chat identifier (UUID) of the group chat

error_code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatTypingIndicatorStartedWebhookEvent: โ€ฆ

Complete webhook payload for chat.typing_indicator.started events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.typing_indicator.started webhook events

chat_id: str

Chat identifier

formatuuid
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatTypingIndicatorStoppedWebhookEvent: โ€ฆ

Complete webhook payload for chat.typing_indicator.stopped events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.typing_indicator.stopped webhook events

chat_id: str

Chat identifier

formatuuid
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class PhoneNumberStatusUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for phone_number.status_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for phone_number.status_updated webhook events

changed_at: datetime

When the status change occurred

formatdate-time
new_status: Literal["ACTIVE", "FLAGGED"]

The new service status

One of the following:
"ACTIVE"
"FLAGGED"
phone_number: str

Phone number in E.164 format

previous_status: Literal["ACTIVE", "FLAGGED"]

The previous service status

One of the following:
"ACTIVE"
"FLAGGED"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: Literal["message.sent", "message.received", "message.read", 22 more]

The type of event

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

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

One of the following:
class MessageSentWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageReceivedWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageReadWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageDeliveredWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

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: str

Message identifier

formatuuid
chat: Chat

Chat information

id: str

Chat identifier

formatuuid
health_score: Optional[ChatHealthScore]

[BETA] Health assessment for a chat. Higher score is healthier. null when a score isnโ€™t available yet. Scoring may change during beta.

reason: str

Short summary of whatโ€™s affecting the score. Empty when the score is 100.

score: int

Health score from 0 to 100. Higher is healthier.

minimum0
maximum100
updated_at: datetime

When this health score was last computed.

formatdate-time
is_group: Optional[bool]

Whether this is a group chat

owner_handle: Optional[ChatHandle]

Your phone numberโ€™s handle. Always has is_me=true.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["inbound", "outbound"]

Message direction - โ€œoutboundโ€ if sent by you, โ€œinboundโ€ if received

One of the following:
"inbound"
"outbound"
parts: List[Part]

Message parts (text and/or media)

One of the following:
class SchemasTextPartResponse: โ€ฆ

A text message part

type: Literal["text"]

Indicates this is a text message part

value: str

The text content

text_decorations: Optional[List[TextDecoration]]

Text decorations applied to character ranges in the value

range: List[int]

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: Optional[Literal["big", "small", "shake", 5 more]]

Animated text effect to apply. Mutually exclusive with style.

One of the following:
"big"
"small"
"shake"
"nod"
"explode"
"ripple"
"bloom"
"jitter"
style: Optional[Literal["bold", "italic", "strikethrough", "underline"]]

Text style to apply. Mutually exclusive with animation.

One of the following:
"bold"
"italic"
"strikethrough"
"underline"
class SchemasMediaPartResponse: โ€ฆ

A media attachment part

id: str

Unique attachment identifier

formatuuid
filename: str

Original filename

mime_type: str

MIME type of the file

size_bytes: int

File size in bytes

type: Literal["media"]

Indicates this is a media attachment part

url: str

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

formaturi
class PartSchemasLinkPartResponse: โ€ฆ

A rich link preview part

type: Literal["link"]

Indicates this is a rich link preview part

value: str

The URL

sender_handle: ChatHandle

The handle that sent this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
delivered_at: Optional[datetime]

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

formatdate-time
effect: Optional[SchemasMessageEffect]

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

name: Optional[str]

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

type: Optional[Literal["screen", "bubble"]]

Effect category

One of the following:
"screen"
"bubble"
idempotency_key: Optional[str]

Idempotency key for deduplication of outbound messages.

preferred_service: Optional[Literal["iMessage", "SMS", "RCS", "auto"]]

Preferred messaging service type. Includes โ€œautoโ€ for default fallback behavior.

One of the following:
"iMessage"
"SMS"
"RCS"
"auto"
read_at: Optional[datetime]

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

formatdate-time
reply_to: Optional[ReplyTo]

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

message_id: Optional[str]

ID of the message being replied to

formatuuid
part_index: Optional[int]

Index of the part being replied to

formatint32
minimum0
sent_at: Optional[datetime]

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

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageFailedWebhookEvent: โ€ฆ

Complete webhook payload for message.failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for message.failed webhook events. See WebhookErrorCode for the full error code reference.

code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
chat_id: Optional[str]

Chat identifier (UUID)

message_id: Optional[str]

Message identifier (UUID)

reason: Optional[str]

Human-readable description of the failure

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class MessageEditedWebhookEvent: โ€ฆ

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

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

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: str

Message identifier

formatuuid
chat: DataChat

Chat context

id: str

Chat identifier

formatuuid
is_group: bool

Whether this is a group chat

owner_handle: ChatHandle

The handle that owns this chat (your phone number)

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
direction: Literal["outbound", "inbound"]

โ€œoutboundโ€ if you sent the original message, โ€œinboundโ€ if you received it

One of the following:
"outbound"
"inbound"
edited_at: datetime

When the edit occurred

formatdate-time
part: DataPart

The edited part

index: int

Zero-based index of the edited part within the message

text: str

New text content of the part

sender_handle: ChatHandle

The handle that sent (and edited) this message

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ReactionAddedWebhookEvent: โ€ฆ

Complete webhook payload for reaction.added events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

Payload for reaction.added webhook events

is_from_me: bool

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

reaction_type: 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.

One of the following:
"love"
"like"
"dislike"
"laugh"
"emphasize"
"question"
"custom"
"sticker"
chat_id: Optional[str]

Chat identifier (UUID)

custom_emoji: Optional[str]

The actual emoji when reaction_type is โ€œcustomโ€. Null for standard tapbacks.

Deprecatedfrom_: Optional[str]

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

from_handle: Optional[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
message_id: Optional[str]

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

part_index: Optional[int]

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

formatint32
minimum0
reacted_at: Optional[datetime]

When the reaction was added or removed

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
sticker: Optional[Sticker]

Sticker attachment details when reaction_type is โ€œstickerโ€. Null for non-sticker reactions.

file_name: Optional[str]

Filename of the sticker

height: Optional[int]

Sticker image height in pixels

mime_type: Optional[str]

MIME type of the sticker image

url: Optional[str]

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

formaturi
width: Optional[int]

Sticker image width in pixels

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ReactionRemovedWebhookEvent: โ€ฆ

Complete webhook payload for reaction.removed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time

Payload for reaction.removed webhook events

is_from_me: bool

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

reaction_type: 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.

One of the following:
"love"
"like"
"dislike"
"laugh"
"emphasize"
"question"
"custom"
"sticker"
chat_id: Optional[str]

Chat identifier (UUID)

custom_emoji: Optional[str]

The actual emoji when reaction_type is โ€œcustomโ€. Null for standard tapbacks.

Deprecatedfrom_: Optional[str]

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

from_handle: Optional[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
message_id: Optional[str]

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

part_index: Optional[int]

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

formatint32
minimum0
reacted_at: Optional[datetime]

When the reaction was added or removed

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
sticker: Optional[Sticker]

Sticker attachment details when reaction_type is โ€œstickerโ€. Null for non-sticker reactions.

file_name: Optional[str]

Filename of the sticker

height: Optional[int]

Sticker image height in pixels

mime_type: Optional[str]

MIME type of the sticker image

url: Optional[str]

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

formaturi
width: Optional[int]

Sticker image width in pixels

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ParticipantAddedWebhookEvent: โ€ฆ

Complete webhook payload for participant.added events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for participant.added webhook events

Deprecatedhandle: str

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

added_at: Optional[datetime]

When the participant was added

formatdate-time
chat_id: Optional[str]

Chat identifier (UUID) of the group chat

participant: Optional[ChatHandle]

The added participant as a full handle object

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ParticipantRemovedWebhookEvent: โ€ฆ

Complete webhook payload for participant.removed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for participant.removed webhook events

Deprecatedhandle: str

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

chat_id: Optional[str]

Chat identifier (UUID) of the group chat

participant: Optional[ChatHandle]

The removed participant as a full handle object

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
removed_at: Optional[datetime]

When the participant was removed

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatCreatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.created events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

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

id: str

Unique identifier for the chat

formatuuid
created_at: datetime

When the chat was created

formatdate-time
display_name: Optional[str]

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

handles: List[ChatHandle]

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

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
is_group: bool

Whether this is a group chat

updated_at: datetime

When the chat was last updated

formatdate-time
service: Optional[ServiceType]

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupNameUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_name_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.group_name_updated webhook events

chat_id: str

Chat identifier (UUID) of the group chat

updated_at: datetime

When the update occurred

formatdate-time
changed_by_handle: Optional[ChatHandle]

The handle who made the change.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
new_value: Optional[str]

New group name (null if the name was removed)

old_value: Optional[str]

Previous group name (null if no previous name)

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupIconUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_icon_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.group_icon_updated webhook events

chat_id: str

Chat identifier (UUID) of the group chat

updated_at: datetime

When the update occurred

formatdate-time
changed_by_handle: Optional[ChatHandle]

The handle who made the change.

id: str

Unique identifier for this handle

formatuuid
handle: str

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

joined_at: datetime

When this participant joined the chat

formatdate-time
service: ServiceType

Messaging service type

One of the following:
"iMessage"
"SMS"
"RCS"
is_me: Optional[bool]

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

left_at: Optional[datetime]

When they left (if applicable)

formatdate-time
status: Optional[Literal["active", "left", "removed"]]

Participant status

One of the following:
"active"
"left"
"removed"
new_value: Optional[str]

New icon URL (null if the icon was removed)

old_value: Optional[str]

Previous icon URL (null if no previous icon)

event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupNameUpdateFailedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_name_update_failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for chat.group_name_update_failed webhook events. See WebhookErrorCode for the full error code reference.

chat_id: str

Chat identifier (UUID) of the group chat

error_code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatGroupIconUpdateFailedWebhookEvent: โ€ฆ

Complete webhook payload for chat.group_icon_update_failed events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Error details for chat.group_icon_update_failed webhook events. See WebhookErrorCode for the full error code reference.

chat_id: str

Chat identifier (UUID) of the group chat

error_code: int

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

failed_at: datetime

When the failure was detected

formatdate-time
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatTypingIndicatorStartedWebhookEvent: โ€ฆ

Complete webhook payload for chat.typing_indicator.started events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.typing_indicator.started webhook events

chat_id: str

Chat identifier

formatuuid
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class ChatTypingIndicatorStoppedWebhookEvent: โ€ฆ

Complete webhook payload for chat.typing_indicator.stopped events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for chat.typing_indicator.stopped webhook events

chat_id: str

Chat identifier

formatuuid
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: 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.

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.

class PhoneNumberStatusUpdatedWebhookEvent: โ€ฆ

Complete webhook payload for phone_number.status_updated events

api_version: str

API version for the webhook payload format

created_at: datetime

When the event was created

formatdate-time
data: Data

Payload for phone_number.status_updated webhook events

changed_at: datetime

When the status change occurred

formatdate-time
new_status: Literal["ACTIVE", "FLAGGED"]

The new service status

One of the following:
"ACTIVE"
"FLAGGED"
phone_number: str

Phone number in E.164 format

previous_status: Literal["ACTIVE", "FLAGGED"]

The previous service status

One of the following:
"ACTIVE"
"FLAGGED"
event_id: str

Unique identifier for this event (for deduplication)

formatuuid
event_type: Literal["message.sent", "message.received", "message.read", 22 more]

The type of event

One of the following:
"message.sent"
"message.received"
"message.read"
"message.delivered"
"message.failed"
"message.edited"
"reaction.added"
"reaction.removed"
"participant.added"
"participant.removed"
"chat.created"
"chat.group_name_updated"
"chat.group_icon_updated"
"chat.group_name_update_failed"
"chat.group_icon_update_failed"
"chat.typing_indicator.started"
"chat.typing_indicator.stopped"
"phone_number.status_updated"
"call.initiated"
"call.ringing"
"call.answered"
"call.ended"
"call.failed"
"call.declined"
"call.no_answer"
partner_id: str

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

trace_id: str

Trace ID for debugging and correlation across systems.

webhook_version: str

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.