List an SMS campaign's recipients
GET/api/v1/sms/campaigns/{id}/recipients
GET /sms/campaigns/{id}/recipients
curl -X GET 'https://www.unitpost.com/api/v1/sms/campaigns/cmp_123/recipients' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'User-Agent: my-app/1.0'Response · 200
{
"object": "list",
"has_more": false,
"data": [
{
"object": "sms_campaign_recipient",
"id": "id_123",
"contact_id": "contact_123",
"to": "customer@example.com",
"name": "Example",
"status": "delivered",
"reason": "string",
"reason_code": "string",
"message_id": "message_123",
"segments": 0,
"created_at": "2026-01-01T00:00:00.000Z"
}
],
"skipped_by_reason": [
{
"reason": "string",
"count": 1
}
]
}How each recipient of an SMS campaign fared: the carrier's answer for a text that went out (delivered, sent, failed, …), or why none was sent (skipped, with reason_code: opted_out, no_marketing_consent, …). Newest first, cursor-paginated on id; q matches digits of the number. skipped_by_reason counts skipped recipients over the whole campaign, on the first page (null on the others). A bad limit or q, or any other query key, is a 422. Requires the campaigns:read capability.
Parameters5 fields
| Field | Type | Description |
|---|---|---|
idrequired | string · path | — |
limit | integer · query | Max rows to return (default 20, max 100). |
after | string · query | Return rows after this id (forward paging). |
before | string · query | Return rows before this id (backward paging). |
q | string · query | Digits of the recipient's number. |
Response · 200 fields11 fields
| Field | Type | Description |
|---|---|---|
objectrequired | string | — |
idrequired | string | This recipient row (`rcpt_…`); pass the last one as `after` for the next page. |
contact_idrequired | string | null | — |
torequired | string | null | The number in E.164. |
namerequired | string | null | — |
statusrequired | enumdelivered | sent | failed | suppressed | canceled | deferred | pending | skipped | The carrier's answer when a text exists, else why none was sent (`skipped`). |
reasonrequired | string | null | Why it failed or was skipped, in plain words. |
reason_coderequired | string | null | The SMS skip reason (`opted_out`, `no_marketing_consent`, …) when there is one. |
message_idrequired | string | null | The text (`sms_…`); read it with `GET /sms/{id}`. |
segmentsrequired | integer | null | Segments billed. |
created_atrequired | string | — |
200401403404422503