# Shared ## Domain Types ### Chat Handle - `ChatHandle object { id, handle, joined_at, 4 more }` - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` Participant status - `"active"` - `"left"` - `"removed"` ### Link Part Response - `LinkPartResponse object { reactions, type, value }` A rich link preview part - `reactions: array of Reaction` Reactions on this message part - `handle: ChatHandle` - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` Participant status - `"active"` - `"left"` - `"removed"` - `is_me: boolean` Whether this reaction is from the current user - `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. - `"love"` - `"like"` - `"dislike"` - `"laugh"` - `"emphasize"` - `"question"` - `"custom"` - `"sticker"` - `custom_emoji: optional string` Custom emoji if type is "custom", null otherwise - `sticker: optional object { file_name, height, mime_type, 2 more }` Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions. - `file_name: optional string` Filename of the sticker - `height: optional number` Sticker image height in pixels - `mime_type: optional string` MIME type of the sticker image - `url: optional string` Presigned URL for downloading the sticker image (expires in 1 hour). - `width: optional number` Sticker image width in pixels - `type: "link"` Indicates this is a rich link preview part - `"link"` - `value: string` The URL ### Media Part Response - `MediaPartResponse object { id, filename, mime_type, 4 more }` A media attachment part - `id: string` Unique attachment identifier - `filename: string` Original filename - `mime_type: string` MIME type of the file - `reactions: array of Reaction` Reactions on this message part - `handle: ChatHandle` - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` Participant status - `"active"` - `"left"` - `"removed"` - `is_me: boolean` Whether this reaction is from the current user - `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. - `"love"` - `"like"` - `"dislike"` - `"laugh"` - `"emphasize"` - `"question"` - `"custom"` - `"sticker"` - `custom_emoji: optional string` Custom emoji if type is "custom", null otherwise - `sticker: optional object { file_name, height, mime_type, 2 more }` Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions. - `file_name: optional string` Filename of the sticker - `height: optional number` Sticker image height in pixels - `mime_type: optional string` MIME type of the sticker image - `url: optional string` Presigned URL for downloading the sticker image (expires in 1 hour). - `width: optional number` Sticker image width in pixels - `size_bytes: number` File size in bytes - `type: "media"` Indicates this is a media attachment part - `"media"` - `url: string` Presigned URL for downloading the attachment (expires in 1 hour). ### Reaction - `Reaction object { handle, is_me, type, 2 more }` - `handle: ChatHandle` - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` Participant status - `"active"` - `"left"` - `"removed"` - `is_me: boolean` Whether this reaction is from the current user - `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. - `"love"` - `"like"` - `"dislike"` - `"laugh"` - `"emphasize"` - `"question"` - `"custom"` - `"sticker"` - `custom_emoji: optional string` Custom emoji if type is "custom", null otherwise - `sticker: optional object { file_name, height, mime_type, 2 more }` Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions. - `file_name: optional string` Filename of the sticker - `height: optional number` Sticker image height in pixels - `mime_type: optional string` MIME type of the sticker image - `url: optional string` Presigned URL for downloading the sticker image (expires in 1 hour). - `width: optional number` Sticker image width in pixels ### Reaction Type - `ReactionType = "love" or "like" or "dislike" or 5 more` 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. - `"love"` - `"like"` - `"dislike"` - `"laugh"` - `"emphasize"` - `"question"` - `"custom"` - `"sticker"` ### Service Type - `ServiceType = "iMessage" or "SMS" or "RCS"` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` ### Text Decoration - `TextDecoration object { range, animation, style }` - `range: array of number` 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 "big" or "small" or "shake" or 5 more` Animated text effect to apply. Mutually exclusive with `style`. - `"big"` - `"small"` - `"shake"` - `"nod"` - `"explode"` - `"ripple"` - `"bloom"` - `"jitter"` - `style: optional "bold" or "italic" or "strikethrough" or "underline"` Text style to apply. Mutually exclusive with `animation`. - `"bold"` - `"italic"` - `"strikethrough"` - `"underline"` ### Text Part Response - `TextPartResponse object { reactions, type, value, text_decorations }` A text message part - `reactions: array of Reaction` Reactions on this message part - `handle: ChatHandle` - `id: string` Unique identifier for this handle - `handle: string` Phone number (E.164) or email address of the participant - `joined_at: string` When this participant joined the chat - `service: ServiceType` Messaging service type - `"iMessage"` - `"SMS"` - `"RCS"` - `is_me: optional boolean` Whether this handle belongs to the sender (your phone number) - `left_at: optional string` When they left (if applicable) - `status: optional "active" or "left" or "removed"` Participant status - `"active"` - `"left"` - `"removed"` - `is_me: boolean` Whether this reaction is from the current user - `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. - `"love"` - `"like"` - `"dislike"` - `"laugh"` - `"emphasize"` - `"question"` - `"custom"` - `"sticker"` - `custom_emoji: optional string` Custom emoji if type is "custom", null otherwise - `sticker: optional object { file_name, height, mime_type, 2 more }` Sticker attachment details when reaction_type is "sticker". Null for non-sticker reactions. - `file_name: optional string` Filename of the sticker - `height: optional number` Sticker image height in pixels - `mime_type: optional string` MIME type of the sticker image - `url: optional string` Presigned URL for downloading the sticker image (expires in 1 hour). - `width: optional number` Sticker image width in pixels - `type: "text"` Indicates this is a text message part - `"text"` - `value: string` The text content - `text_decorations: optional array of TextDecoration` Text decorations applied to character ranges in the value - `range: array of number` 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 "big" or "small" or "shake" or 5 more` Animated text effect to apply. Mutually exclusive with `style`. - `"big"` - `"small"` - `"shake"` - `"nod"` - `"explode"` - `"ripple"` - `"bloom"` - `"jitter"` - `style: optional "bold" or "italic" or "strikethrough" or "underline"` Text style to apply. Mutually exclusive with `animation`. - `"bold"` - `"italic"` - `"strikethrough"` - `"underline"`