#Group SMS
Group SMS lets you open one conversation with several recipients from a single business number. Every reply threads back into that same conversation, addressable by a stable conversationId, so your software — and the softphone inbox — sees one thread instead of a scatter of one-to-one messages.
Group conversations follow the same write- and event-oriented model as a single SMS: you create the conversation and send into it, then subscribe to Webhooks for inbound replies and per-participant delivery.
#Create a group
Open a group conversation by sending the first message with more than one recipient in to. The from number must be an E.164 number you own; each recipient is also E.164. The response returns a conversationId — store it. Everything that follows in this thread is keyed to it.
curl https://api.netexem.com/v1/messages \
-H "Authorization: Bearer $NETEXEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "+15551234567",
"to": ["+15557654321", "+15557654322", "+15557654323"],
"body": "Kickoff call moved to 3pm — works for everyone?"
}'All numbers use E.164 format — a leading + and country code, e.g.
+15557654321. A single recipient (a plain string to) opens a one-to-one thread instead; see
Send an SMS.
To send another message into an existing group, target the conversation by its id rather than re-listing recipients:
{
"conversationId": "cv_01h…",
"body": "Confirmed — invite updated."
}#Replies & threading
When any participant texts back, the reply threads into the same conversation. We fire a signed message.received webhook carrying the originating conversationId, so you can correlate it without guessing. The softphone surfaces the same thread in real time.
A group conversation object collects the participants, the originating number, and message status. Look it up with GET /messages/{id} for an individual message, or read the conversationId carried on every related message and webhook to stitch the thread together.
{
"conversationId": "cv_01h…",
"from": "+15551234567",
"participants": [
{ "phone": "+15557654321", "status": "delivered" },
{ "phone": "+15557654322", "status": "delivered" },
{ "phone": "+15557654323", "status": "queued" }
],
"messages": [
{
"id": "msg_01h…",
"from": "+15551234567",
"body": "Kickoff call moved to 3pm — works for everyone?",
"direction": "outbound",
"status": "sent",
"createdAt": "2026-05-31T18:04:21Z"
},
{
"id": "msg_01h…",
"from": "+15557654321",
"body": "Works for me.",
"direction": "inbound",
"status": "delivered",
"createdAt": "2026-05-31T18:05:02Z"
}
],
"createdAt": "2026-05-31T18:04:21Z"
}Each inbound reply arrives as its own message.received event tagged with the conversationId.
Acknowledge with a 2xx; non-2xx responses are retried with backoff. See
Webhooks.
#Participants
Add or remove participants without losing the thread — the conversationId stays stable across changes.
- Add a participant by including their E.164 number when you send into the conversation; new participants join the existing thread.
- Remove a participant to stop including them on subsequent messages. History already delivered to them is unaffected.
{
"conversationId": "cv_01h…",
"addParticipants": ["+15557654324"],
"removeParticipants": ["+15557654323"],
"body": "Adding Priya, dropping the old thread."
}Delivery is tracked per participant: each entry in participants carries its own status (queued, sent, delivered, failed), so one unreachable number never blocks the rest of the group. Watch delivery transitions through delivery-receipt Webhooks, each keyed to the conversation and the participant it concerns.
A participant who replies STOP is opted out and removed from future sends to the group automatically. Opt-out is honored per number, account-wide — see Opt-out & compliance.
#Next steps
- Send an SMS — the full message object, MMS and delivery receipts
- Webhooks — subscribe to inbound replies and per-participant delivery
- Opt-out & compliance — STOP handling and A2P registration