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

Send a message

POST/messages

Sends a message to one or more recipients on a channel. Requires channel_id. 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). Returns the message object at the top level, or a fan-out summary { data, fan_out, sent, failed }.

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
Idempotency-Keyoptionalstring

Optional 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

JSON
channel_idRequiredstring

Channel id (ch_...) to send from.

toRequiredRecipient

A single recipient, a list, or a comma-separated string of identifiers.

identifierRequiredstring
contentRequiredMessageContent
typeRequired"text"
textRequiredstring
reply_tooptionalstring

Message id to reply to.

effectoptionalstring

iMessage screen/bubble effect (Blooio).

link_previewoptionalLinkPreview
imageUrloptionalstring
titleoptionalstring
dry_runoptionalboolean

Validate and route only; do not send.

Returns

idoptionalstring
chat_idoptionalstring
channel_idoptionalstring
channel_typeoptionalstring
"blooio""twilio""whatsapp""whatsapp_business""rcs_business""amb"
protocoloptionalstring | null
directionoptionalstring
"inbound""outbound"
typeoptionalstring
statusoptionalstring
erroroptionalobject | null
fallbackoptionalobject

Present when a send could not be delivered on the requested channel and a different channel should be tried.

recommendedoptionalboolean

True when falling back to another channel is recommended.

reasonoptionalstring
tooptionalstring

Recipient identifier. Present only on per-recipient items inside a fan-out (FanOutResult) response.

dry_runoptionalboolean
would_sendoptionalboolean
previewoptionalobject

Response codes

200Dry-run preview
201Message accepted. The message object is returned with its current `status`; a synchronously rejected send returns `status: "failed"` with an `error` object (still 201, since the message was created).
207Multi-recipient fan-out with mixed results (some recipients sent, some failed). See per-recipient items in `data`.
401Your API key is missing or invalid. Pass it as a bearer token.
404No message was found.
409The request conflicts with the current state of the message (e.g. it already exists, the chat is closed, or the channel isn't active).
422Validation failed, or a multi-recipient fan-out in which every recipient failed (in which case the body is a `FanOutResult` rather than an error envelope).
501This message endpoint is defined but not implemented yet.

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

Request
curl -X POST https://api.blooio.com/v4/messages \  -H "Authorization: Bearer bl_live_..." \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "channel_id": "ch_018f7b2a-1c3d-7e4f-9a2b-0c1d2e3f4a5b",    "to": {      "identifier": "+15551234567"    },    "content": {      "type": "text",      "text": "Hello from Blooio!"    }  }'
Body object
Response objectexample
{  "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": {}}