Get the delivery report
The campaign plus every individual recipient row.
GET
https://nextgenpanelstaging.cloudshope.com/api/v1/sms/campaigns/{id}/reportReturns the campaign object, every recipient (number, delivery status, failure reason and the sent / delivered timestamps) and status_counts, a count per recipient status. Without page every row is returned; with page the response adds total, page and page_size. Use this for a full "how did campaign X do"; use the lighter status endpoint just to check whether it is done.
Authentication
Send Authorization: Bearer <token>. Any valid API token for the account works.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Campaign id. |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number. Omit to return all rows. |
page_size | integer | No | Rows per page, default 50, maximum 200. |
status | enum | No | delivered, pending, failed, invalid or skipped. |
q | string | No | Recipient number contains. |
format | enum | No | csv downloads the filtered rows as CSV. |
Request
curl https://nextgenpanelstaging.cloudshope.com/api/v1/sms/campaigns/1207/report \
-H "Authorization: Bearer cs_live_9f2c…"Response
{
"campaign": {
"id": 1207,
"campaign_name": "Diwali offer",
"status": "Completed",
"count": 2,
"total_credits": 2
},
"recipients": [
{
"id": 55012,
"number": "9876543210",
"status": "Delivered",
"reason": null,
"sender_id": "CLDSHP",
"sent_at": "2026-09-08T09:20:45.000Z",
"delivered_at": "2026-09-08T09:20:52.000Z",
"created_at": "2026-09-08T09:20:41.000Z"
},
{
"id": 55013,
"number": "9812345678",
"status": "Failed",
"reason": "Handset unreachable",
"sender_id": "CLDSHP",
"sent_at": "2026-09-08T09:20:45.000Z",
"delivered_at": null,
"created_at": "2026-09-08T09:20:41.000Z"
}
],
"status_counts": { "Delivered": 1, "Failed": 1 }
}Errors
| Status | Type | When |
|---|---|---|
| 404 | not-found | No campaign with this id on the account. |
| 401 | unauthorized | The Authorization header is missing, malformed or the token is invalid or expired. |
| 403 | forbidden | The token is valid but the account is not allowed to perform this action. |