RaabtaHQ
List a broadcast’s recipients

List a broadcast’s recipients

GET/api/v1/broadcasts/{id}/recipients

scope broadcasts:readPaginated

Per-recipient delivery status, newest first. Filter by status to find failures.

Path parameters

NameTypeDescription
idrequired
string (uuid)Broadcast id

Query parameters

NameTypeDescription
limitoptional
integerPage size, 1–100Default: 20
cursoroptional
stringThe `next_cursor` from the previous page
statusoptional
string (enum)pendingsentdeliveredreadrepliedfailed
Request
curl "https://your-crm.example.com/api/v1/broadcasts/a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d/recipients?status=failed" \
  -H "Authorization: Bearer $RAABTA_API_KEY"
Response · 200 OK
{
  "data": [
    {
      "id": "b8c9d0e1-f2a3-4b4c-8d5e-6f7a8b9c0d1e",
      "contact_id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
      "contact": {
        "id": "9d7e4c11-5a2b-4f7c-8e3d-2a1b0c9d8e7f",
        "name": "Ayesha Khan",
        "phone": "+971501234567"
      },
      "status": "failed",
      "channel_message_id": null,
      "error": "Recipient phone number not in allowed list",
      "sent_at": null,
      "delivered_at": null,
      "read_at": null,
      "replied_at": null,
      "created_at": "2026-09-02T10:00:00.000Z"
    }
  ],
  "meta": {
    "next_cursor": null,
    "has_more": false,
    "limit": 20
  }
}

Response

Wrapped in { data: [...], meta }
NameTypeDescription
idrequired
string (uuid)UUID
contact_idrequired
string (uuid) | null
contactrequired
object | nullThe recipient, or null if the contact was deleted
contact.idrequired
string (uuid)UUID
contact.namerequired
string | nullDisplay name
contact.phonerequired
string | nullE.164 phone number, when the channel has one
statusrequired
string (enum)Forward-only ladder; failed only from an early statependingsentdeliveredreadrepliedfailed
channel_message_idrequired
string | nullThe channel’s own id for this send
errorrequired
string | nullWhy the send failed, when it did
sent_atrequired
string (date-time) | null
delivered_atrequired
string (date-time) | null
read_atrequired
string (date-time) | null
replied_atrequired
string (date-time) | null
created_atrequired
string (date-time)ISO 8601 timestamp

Errors

StatusCodeWhen
400bad_requestThe request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape.
400validation_errorThe body or query failed validation. `details` lists each failing field with a `path` and a `message`.
401unauthorizedNo usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable.
403forbiddenThe key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which.
403account_suspendedThe account this key belongs to is suspended. Rotating the key will not help; contact support.
404not_foundNo such resource in this account. A resource that exists in another account also returns this.
429rate_limitedThe per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying.
500internalSomething failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists.