group_id to post into a thread that already exists, or pass a participants array to create a new group and send its first message in the same call. Group threads are iMessage only. There is no SMS fallback for a group.
Endpoint
Authentication
Every request needs your API key in theAuthorization header as a bearer token. Keys start with bluereacher_.
Two modes
Send exactly one ofgroup_id or participants. Sending both returns 400 invalid_request. Sending neither returns the same error.
Store the
group_id from the response. It is the only handle that ties your outbound group messages to the inbound replies that come back from that thread.
Request fields
Group limits
These are the documented defaults on every plan.
Hit the group creation cap and the API returns
429 rate_limit_exceeded with a retry_after value in seconds. Sends into existing groups keep working while that cap is in effect.
Who you can add
Participants have to clear four checks before the group is created. The checks run on the whole array first, so a bad address means nothing is sent and no group exists.- iMessage-capable. Every address must be reachable on iMessage. Run your list through the availability check endpoint before you build the array, and drop anything that comes back unavailable.
- Not opted out. Any address suppressed by a STOP keyword or a manual opt-out is rejected. A participant who replies STOP inside a group is suppressed across your workspace and excluded from future group sends.
- Valid format. E.164 phone numbers such as
+14155550188, or Apple ID email addresses such assam@example.com. Anything else is rejected. - Distinct. Duplicates are collapsed to one entry. Your sending line is removed from the array if you include it, then added back as the sender, so it never eats one of your 24 slots.
group_id stays valid and later sends reach whoever is left. If every participant leaves, sends to that group_id return 422 group_empty.
iMessage only, no SMS fallback
One-to-one sends through/send-message fall back to RCS, then SMS, when a number cannot receive iMessage. Group sends do not. A group thread is an iMessage object, so there is no green-bubble equivalent to fall back to and no per-participant downgrade.
What that means in practice:
- If any address in
participantscannot receive iMessage, the request fails with422 participant_not_imessage, the response lists the failing addresses, and no group is created. - The
channelfield on the response is alwaysimessage. - To reach a non-iMessage number, send it a one-to-one message through
/send-messageand let the fallback chain handle it.
Response fields
Group status is reported per message, not per participant.
delivered means the thread accepted the message. Read receipts are not broken out by participant on group threads.
Create a group and send
Send to an existing group
Keep the group_id and reuse it
Replies and events
Inbound group replies POST to your webhook URL with thegroup_id attached, so you can thread them against the right deal. from is the individual who replied. to is your line.
external_id and the new status. A group message reports one status for the thread, so track state at the message level, not per participant.
Errors
Errors return a JSON body with anerror object. Nothing is sent when a request fails validation, including partial group creation.
Practical notes
- Group sends are for conversations with people who already know you, like a buyer and their colleague, or a rep, an AE, and a prospect. Cold group blasts read as spam and get reported as spam.
- Keep threads small. Three to five people holds a conversation. Twenty turns into noise, and one STOP from anyone in it suppresses that contact everywhere.
- Consent is per person. Every participant needs a lawful basis to be messaged, the same as any one-to-one send.
- Lines are dedicated iMessage lines, managed for you, so no A2P registration required for group iMessage traffic. Any SMS traffic you send on other paths still carries its own registration requirements.