Get a message
/chats/{chatId}/messages/{messageId}Get details for a specific message.
Path parameters
chatIdRequiredstringChat identifier. Can be: (1) phone number in E.164 format (e.g., +15551234567), (2) email address, (3) group ID (grp_xxxx), or (4) comma-separated list of phone numbers/emails for multi-recipient group chats (e.g., +15551234567,+15559876543). All values should be URL-encoded.
messageIdRequiredstringUnique identifier of the message, prefixed with msg_ (e.g. msg_abc123def456). Returned in the response when you send a message and in inbound message webhooks.
Headers
AuthorizationRequiredstringYour API key, sent as a bearer token: Authorization: Bearer <api_key>. Editing this stays in sync with the API key box on the right.
Returns
message_idoptionalstringchat_idoptionalstringdirectionoptionalstring"inbound""outbound"internal_idoptionalstring | nullOrganization phone number (from-number) used for this message
contactoptionalobject | null
contactoptionalobject | nullcontact_idoptionalstringnameoptionalstring | nullidentifieroptionalstringThe contact's phone number or email
senderoptionalstring | nullSender's phone number or email for inbound group messages. Null for outbound messages and 1-1 chats.
textoptionalstring | nullattachmentsoptionalobject[]reactionsoptionalReaction[]Reactions on this message (tapbacks and emoji reactions)
reactionsoptionalReaction[]Reactions on this message (tapbacks and emoji reactions)
Array of Reaction
reactionoptionalstringThe reaction value. Classic tapbacks: love, like, dislike, laugh, emphasize, question. Emoji reactions: the emoji character (e.g. 😂, 👍).
is_addedoptionalbooleanWhether the reaction is currently active (true) or was removed (false)
time_sentoptionalintegerTimestamp when the reaction was sent (ms)
senderoptionalstring | nullPhone number or email of who sent the reaction. Null when the reaction was sent by you (outbound).
time_sentoptionalintegertime_deliveredoptionalinteger | nullstatusoptionalstring"pending""queued""sent""delivered""failed""cancellation_requested""cancelled"protocoloptionalstring"imessage""sms""rcs""non-imessage"erroroptionalstring | nullreply_tooptionalReplyToInfoPresent only on inline-reply messages. Omitted entirely for top-level messages.
reply_tooptionalReplyToInfoPresent only on inline-reply messages. Omitted entirely for top-level messages.
message_idRequiredstring | nullThe Blooio message_id of the parent message. NULL when the parent isn't in our messages table (e.g., the original was sent from outside Blooio's pipeline).
guidRequiredstring | nullThe raw iMessage GUID of the parent. Always populated on real inline replies; the on-device record-of-truth identifier that survives even when message_id cannot be resolved.
part_indexRequiredintegerWhich part of the parent was replied to. 0 for the common single-part case.
Response codes
Sends a live request with your values and shows the real response below. Your key is stored only in this browser.
curl -X GET https://api.blooio.com/v2/api/chats/chat_a1b2c3d4/messages/msg_abc123def456 \ -H "Authorization: Bearer bl_live_..."{ "message_id": "msg_a1b2c3d4", "chat_id": "chat_a1b2c3d4", "direction": "inbound", "internal_id": "obj_a1b2c3d4", "contact": { "contact_id": "ct_a1b2c3d4", "name": "Jane Doe", "identifier": "+15551234567" }, "sender": "string", "text": "Hello from Blooio!", "attachments": [ {} ], "reactions": [ { "reaction": "string", "is_added": true, "time_sent": 0, "sender": "string" } ], "time_sent": 0, "time_delivered": 0, "status": "pending", "protocol": "imessage", "error": "string", "reply_to": { "message_id": "msg_a1b2c3d4", "guid": "obj_a1b2c3d4", "part_index": 0 }}