Send a message on a specific channel
/channels/{channelId}/messagesChannel-specific send. Behaves exactly like POST /messages with an explicit channel_id, but the channel is taken from the path. Multiple recipients on a group-capable channel (blooio/whatsapp) form a single group thread; on other channels they fan out to individual sends (max 100).
Path parameters
channelIdRequiredstringUnique identifier of the channel (the sending surface), prefixed with ch_. Returned by the List channels endpoint.
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.
Idempotency-KeyoptionalstringOptional key for safe retries. Replaying the same key with an identical body returns the original result; a different body returns 409. Use a unique value (such as a UUID) per logical request.
Body parameters
JSONtoRequiredRecipientA recipient: a single identifier, a list, a comma-separated string, or (for routed sends) a { contact_id }. A contact_id enables cross-channel-type routing via the contact's identities; a bare identifier reaches phone/email-addressable channels only.
toRequiredRecipientA recipient: a single identifier, a list, a comma-separated string, or (for routed sends) a { contact_id }. A contact_id enables cross-channel-type routing via the contact's identities; a bare identifier reaches phone/email-addressable channels only.
identifierRequiredstringcontentRequiredMessageContent
contentRequiredMessageContenttypeRequired"text"textRequiredstringreply_tooptionalstringMessage id to reply to.
effectoptionalstringiMessage screen/bubble effect (Blooio).
link_previewoptionalLinkPreview
link_previewoptionalLinkPreviewimageUrloptionalstringtitleoptionalstringdry_runoptionalbooleanValidate and route only; do not send.
Returns
idoptionalstringchat_idoptionalstringchannel_idoptionalstringchannel_typeoptionalstring"blooio""twilio""whatsapp""whatsapp_business""rcs_business"protocoloptionalstring | nulldirectionoptionalstring"inbound""outbound"typeoptionalstringstatusoptionalstringerroroptionalobject | nullfallbackoptionalobjectPresent when a send could not be delivered on the requested channel and a different channel should be tried.
fallbackoptionalobjectPresent when a send could not be delivered on the requested channel and a different channel should be tried.
recommendedoptionalbooleanTrue when falling back to another channel is recommended.
reasonoptionalstringtooptionalstringRecipient identifier. Present only on per-recipient items inside a fan-out (FanOutResult) response.
dry_runoptionalbooleanwould_sendoptionalbooleanpreviewoptionalobjectResponse codes
Sends a live request with your values and shows the real response below. Your key is stored only in this browser.
curl -X POST https://api.blooio.com/v4/channels/ch_a1b2c3d4/messages \ -H "Authorization: Bearer bl_live_..." \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "to": { "identifier": "+15551234567" }, "content": { "type": "text", "text": "Hello from Blooio!" } }'{ "id": "obj_a1b2c3d4", "chat_id": "chat_a1b2c3d4", "channel_id": "ch_a1b2c3d4", "channel_type": "blooio", "protocol": "string", "direction": "inbound", "type": "string", "status": "active", "error": {}, "fallback": { "recommended": false, "reason": "string" }, "to": "+15551234567", "dry_run": false, "would_send": false, "preview": {}}