BetaThe V4 API is in beta — endpoints and functionality may change.
Messagesv2

Get a message

GET/chats/{chatId}/messages/{messageId}

Get details for a specific message.

Path parameters

chatIdRequiredstring

Chat 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.

messageIdRequiredstring

Unique 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

AuthorizationRequiredstring

Your API key, sent as a bearer token: Authorization: Bearer <api_key>. Editing this stays in sync with the API key box on the right.

Bearer

Returns

message_idoptionalstring
chat_idoptionalstring
directionoptionalstring
"inbound""outbound"
internal_idoptionalstring | null

Organization phone number (from-number) used for this message

contactoptionalobject | null
contact_idoptionalstring
nameoptionalstring | null
identifieroptionalstring

The contact's phone number or email

senderoptionalstring | null

Sender's phone number or email for inbound group messages. Null for outbound messages and 1-1 chats.

textoptionalstring | null
attachmentsoptionalobject[]
reactionsoptionalReaction[]

Reactions on this message (tapbacks and emoji reactions)

Array of Reaction

reactionoptionalstring

The reaction value. Classic tapbacks: love, like, dislike, laugh, emphasize, question. Emoji reactions: the emoji character (e.g. 😂, 👍).

is_addedoptionalboolean

Whether the reaction is currently active (true) or was removed (false)

time_sentoptionalinteger

Timestamp when the reaction was sent (ms)

senderoptionalstring | null

Phone number or email of who sent the reaction. Null when the reaction was sent by you (outbound).

time_sentoptionalinteger
time_deliveredoptionalinteger | null
statusoptionalstring
"pending""queued""sent""delivered""failed""cancellation_requested""cancelled"
protocoloptionalstring
"imessage""sms""rcs""non-imessage"
erroroptionalstring | null
reply_tooptionalReplyToInfo

Present only on inline-reply messages. Omitted entirely for top-level messages.

message_idRequiredstring | null

The 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 | null

The 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_indexRequiredinteger

Which part of the parent was replied to. 0 for the common single-part case.

Response codes

200Message details
400Invalid request parameters
401Authentication required or invalid
404Resource not found

Sends a live request with your values and shows the real response below. Your key is stored only in this browser.

Request
curl -X GET https://api.blooio.com/v2/api/chats/chat_a1b2c3d4/messages/msg_abc123def456 \  -H "Authorization: Bearer bl_live_..."
Response objectexample
{  "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  }}