textoptionalstring | nullMessage text content
/webhooks/{webhookId}/logsList delivery logs for a specific webhook.
webhookIdRequiredstringUnique identifier of the webhook subscription, prefixed with wh_ (e.g. wh_abc123def456). Returned when you create or list webhooks.
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.
limitoptionalintegerMaximum number of items to return in a single response. Must be between 1 and 200; defaults to 50. Use together with offset to page through large result sets.
offsetoptionalintegerNumber of items to skip before returning results. Combine with limit for page-based pagination (e.g. offset=50&limit=50 returns the second page). Defaults to 0.
sortoptionalstringSort order by attempted time
"asc""desc"statusoptionalintegerFilter by exact HTTP status code
min_statusoptionalintegerMinimum HTTP status code
max_statusoptionalintegerMaximum HTTP status code
logsoptionalWebhookLog[]Array of WebhookLog
event_idoptionalstringscopeoptionalstring"api""integration""org"attempted_timeoptionalintegerresponse_received_atoptionalinteger | nullwebhook_urloptionalstringevent_bodyoptionalWebhookEventPayloadWebhook event payload. Structure varies by event type. All message events include group information when applicable.
eventoptionalstringEvent type (e.g., message.received, message.sent, message.delivered, message.failed, message.read)
message_idoptionalstringUnique message identifier
external_idoptionalstringRecipient identifier (phone number, email, or group ID)
statusoptionalstringMessage status carried by the event. queued / pending = accepted, not yet handed off; sent = handed to Apple/the carrier; delivered = a delivery receipt was received; read = a read receipt was received (iMessage, when the recipient has read receipts on); failed = delivery failed (see error_code / error_message); received = an inbound message arrived.
"queued""pending""sent""delivered""failed""read""received"protocoloptionalstringTransport used to carry the message; never null. pending = accepted and dispatched, wire service not resolved yet (settles within seconds of send); imessage = delivered over iMessage (blue bubble); rcs = delivered over RCS; sms = fell back to SMS/MMS (green bubble); unknown = accepted by the carrier but the wire service could not be resolved before the tracking window closed (see error).
"pending""unknown""imessage""sms""rcs"timestampoptionalintegerEvent timestamp in milliseconds
internal_idoptionalstring | nullPhone number that sent/received the message
textoptionalstring | nullMessage text content
formatted_textoptionalstringMarkdown for a rich-text (bold/italic/underline/strikethrough) message. Omitted entirely when the message carries no styling, so its presence is how you detect rich text.
Present in both directions: on an outbound send made with format: "markdown", and on an inbound iMessage whose sender styled their text — so styling a customer applied in Messages arrives here even though your integration never asked for it.
Always a normalized re-serialization of the message's actual styling rather than an echo of the source string: bold is spelled **, italic *, underline ++, strikethrough ~~, and any character that would otherwise read as a delimiter is backslash-escaped. Re-sending this value verbatim with format: "markdown" reproduces the same styled message. Blooio iMessage only. This is the SAME field delivered on the message webhooks, so a message reads identically via REST or webhook.
attachmentsoptionalobject[]Array of attachment objects
Array of object
urloptionalstringnameoptionalstring | nullis_groupoptionalbooleanWhether this message is from/to a group chat. Always present.
group_idoptionalstring | nullGroup ID (only present when is_group=true)
group_nameoptionalstring | nullGroup display name (only present when is_group=true)
participantsoptionalobject[]Array of group participants (only present when is_group=true). One entry per person: a participant appears once even if Blooio holds more than one identity for their number.
Array of object
contact_idoptionalstringidentifieroptionalstringnameoptionalstring | nullchat_guidoptionalstring | nullThe device's own identifier for the group conversation this message arrived in (only on message.received when is_group=true). Two group chats can hold the same members and are then indistinguishable by group_id and participants alone; chat_guid is what tells them apart. Matches the chat_guid on GET /groups/{groupId}.
chat_nameoptionalstring | nullThe name the device reports for the conversation (only on message.received when is_group=true). May differ from group_name, or be present when group_name is null.
senderoptionalstring | nullSender identifier (for inbound messages)
sent_atoptionalinteger | nullTimestamp when message was sent (for message.sent events)
delivered_atoptionalinteger | nullTimestamp when message was delivered (for message.delivered events)
read_atoptionalinteger | nullTimestamp when message was read (for message.read events)
error_codeoptionalstring | nullError code (for message.failed events)
error_messageoptionalstring | nullError description (for message.failed events)
response_statusoptionalinteger | nullHTTP status code received from the webhook endpoint
response_jsonoptionalobject | nullResponse body from the webhook endpoint (if JSON)
metadataoptionalobjectAdditional metadata about the webhook delivery
organization_idoptionalstringevent_nameoptionalstringmessage_idoptionalstringis_replayoptionalbooleanoriginal_event_idoptionalstringduration_msoptionalintegerpaginationoptionalobjecttotaloptionalintegerTotal number of matching logs
limitoptionalintegeroffsetoptionalintegerreturnedoptionalintegerNumber of logs returned in this response
has_moreoptionalbooleanWhether there are more logs to fetch
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/webhooks/wh_abc123def456/logs?limit=50&offset=0&sort=desc&status=0&min_status=0&max_status=0 \{ "logs": [ { "event_id": "evt_a1b2c3d4", "scope": "api", "attempted_time": 0, "response_received_at": 0, "webhook_url": "https://example.com", "event_body": { "event": "message.sent", "message_id": "msg_a1b2c3d4", "external_id": "obj_a1b2c3d4", "status": "queued", "protocol": "pending", "timestamp": 0, "internal_id": "obj_a1b2c3d4", "text": "Hello from Blooio!", "formatted_text": "string", "attachments": [ { "url": "https://example.com", "name": "Jane Doe" } ], "is_group": true, "group_id": "grp_a1b2c3d4", "group_name": "string", "participants": [ { "contact_id": "ct_a1b2c3d4", "identifier": "+15551234567", "name": "Jane Doe" } ], "chat_guid": "iMessage;+;chat123456789", "chat_name": "Sales Team", "sender": "string", "sent_at": 0, "delivered_at": 0, "read_at": 0, "error_code": "string", "error_message": "string" }, "response_status": 0, "response_json": {}, "metadata": { "organization_id": "org_a1b2c3d4", "event_name": "string", "message_id": "msg_a1b2c3d4", "is_replay": true, "original_event_id": "obj_a1b2c3d4", "duration_ms": 1200 } } ], "pagination": { "total": 3, "limit": 50, "offset": 1, "returned": 0, "has_more": true }}