brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
sendblue-sendblue-apiSend and receive iMessage, SMS, and RCS from application code via the Sendblue HTTP API — text, media, group messages, send styles, reactions, typing indicators, status callbacks, and inbound webhooks.
Independent GitHub snapshot · Automated classification · Original documentation governs
name: sendblue-sendblue-api description: "Send and receive iMessage, SMS, and RCS from application code via the Sendblue HTTP API \u2014 text, media, group messages, send styles, reactions, typing indicators, status callbacks, and inbound webhooks." category: api-integration risk: critical source: community source_type: official date_added: '2026-05-22' author: AnthonyFirth tags:
Sendblue is a REST API that sends iMessage (blue bubbles), SMS, and RCS from a provisioned phone number. Everything is plain JSON over HTTPS — no SDK is required. The API covers outbound 1:1 and group sends, iMessage effects, reactions, typing indicators, status callbacks, and inbound webhooks.
https://api.sendblue.com
Every request needs two headers:
sb-api-key-id: <YOUR_API_KEY_ID>
sb-api-secret-key: <YOUR_API_SECRET>
Content-Type: application/json
Keep both values server-side — never ship them to a browser or mobile client.
curl -X POST https://api.sendblue.com/api/send-message \
-H "sb-api-key-id: $KEY_ID" \
-H "sb-api-secret-key: $SECRET" \
-H 'Content-Type: application/json' \
-d '{
"number": "+15551234567",
"from_number": "+1YOUR_SENDBLUE_NUMBER",
"content": "Hello from the API!"
}'
Phone numbers must be E.164. from_number must be a line you own — list yours with GET /api/lines.
The synchronous response includes a message_handle (Apple GUID — persist this; you need it for reactions and replies) and a status from REGISTERED, PENDING, QUEUED, ACCEPTED, SENT, DELIVERED, DECLINED, ERROR. Only DELIVERED means it landed. Use status_callback instead of polling /api/status.
Configure webhook URLs in the dashboard or via POST /api/account/webhooks. Sendblue POSTs JSON to your endpoint. Respond with 2xx promptly — non-2xx triggers retries and duplicate deliveries. Event types: receive, outbound, typing_indicator, call_log, line_blocked, line_assigned, contact_created.
| Method | Path | Purpose |
|---|---|---|
| POST | /api/send-message | Send a 1:1 message (text and/or media) |
| POST | /api/send-group-message | Send to multiple recipients |
| POST | /api/create-group | Create a named group thread |
| POST | /api/send-reaction | Send a tapback (love/like/dislike/laugh/emphasize/question) |
| POST | /api/send-typing-indicator | Show "typing…" in the recipient's thread |
| POST | /api/mark-read | Send a read receipt |
| POST | /api/upload-file / /api/upload-media-object | Upload media (direct or from URL) |
| GET | /api/status | Poll a message's delivery status |
| GET | /api/evaluate-service | Check whether a number is on iMessage |
| GET | /api/v2/messages / /api/v2/messages/:id | Read message history |
| GET / POST / PUT / DELETE | /api/v2/contacts[...] | Manage contacts |
| GET | /api/lines | List your Sendblue phone numbers |
| POST | /api/account/webhooks | CRUD webhook subscriptions |
POST /api/send-message
{
"number": "+15551234567",
"from_number": "+1YOUR_SENDBLUE_NUMBER",
"content": "Optional text",
"media_url": "https://example.com/img.jpg",
"send_style": "celebration",
"status_callback": "https://yourapp.com/sendblue/status"
}
content and/or media_url is required. send_style is iMessage-only — valid values: celebration, shooting_star, fireworks, lasers, love, confetti, balloons, spotlight, echo, invisible, gentle, loud, slam. Ignored on SMS. Text up to 18,996 chars; media up to 100 MB on iMessage, 5 MB on SMS.
POST /api/send-group-message
{
"numbers": ["+15551234567", "+15557654321"],
"from_number": "+1YOUR_SENDBLUE_NUMBER",
"content": "Hey team"
}
The response returns a group_id — persist it to send follow-ups into the same thread instead of creating a new one each time.
POST /api/send-reaction
{
"from_number": "+1YOUR_SENDBLUE_NUMBER",
"message_handle": "<message_handle from prior send>",
"reaction": "love"
}
Reactions only work on iMessage and need the original message's message_handle. Valid values: love, like, dislike, laugh, emphasize, question.
receive){
"accountEmail": "you@example.com",
"content": "Reply text",
"media_url": "https://...",
"is_outbound": false,
"number": "+15551234567",
"from_number": "+1YOUR_SENDBLUE_NUMBER",
"service": "iMessage",
"group_id": "...",
"date_sent": "2024-01-01T12:00:00Z"
}
Status callback payloads (outbound) mirror the send-message response and update as the message moves through SENT → DELIVERED (or ERROR).
message_handle on every send. You need it for reactions, replies, and correlating status callbacks.status_callback over polling. It's lower-cost and more accurate than GET /api/status./api/evaluate-service before relying on iMessage-only features for a recipient.sb-api-key-id / sb-api-secret-key to a client. They are server-side credentials./api/send-message as delivery. It only means "accepted".status_callback or GET /api/status.send_style silently no-ops on SMS (green-bubble recipients).sb-api-key-id and sb-api-secret-key server-side. They are not safe in browser, mobile, or CI logs.message_handle may arrive more than once.5551234567 or (555) 123-4567 will fail — always send +15551234567.from_number must be one of your lines. A spoofed or unprovisioned number returns an error.send_style silently no-ops on SMS. If the recipient is green-bubble, effects don't render — check service first with /api/evaluate-service if it matters.message_handle. You need it for reactions, replies, and correlating status callbacks back to your records./api/send-message means accepted, not delivered. Use status_callback rather than blocking on the synchronous response.@sendblue-cli — Shell wrapper for shell-context outbound (scripts, cron, agent hooks). Use it when you don't need a full HTTP integration.@sendblue-notify — Patterns and copy rules for outbound "text me when X is done" notifications layered on top of the API or CLI./api/send-carousel), FaceTime/contact-card sharing, advanced webhook filtering, contacts API beyond basic CRUD — see the docs site.