SMS report
Overview
Get SMS-channel KPIs (valid recipients, processed, sent, delivered, clicked, failed, tests, kiosk) plus computed rates and a per-day timeseries for one campaign.
Prerequisites
- A bearer token. Callable with Account tokens.
- The
campaignIdof the record you are targeting.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/campaign/{campaignId}/report/sms
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Account tokens.
-
Requires the user's own company
bundle_id === 3(ACCOUNT). -
The campaign is scoped to the caller, so an account can only read its own campaigns (404
Campaign not foundotherwise). -
Non-account users get 403.
Rate limit
- No rate limit.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
campaignId | integer | Required | Digits only. |
Query parameters
- Query:
start_date(stringY-m-d, optional) — defaults to the campaign'screated_atstart-of-day. - Query:
end_date(stringY-m-d, optional) — defaults to now end-of-day. Ifstart_date > end_datethe two are swapped.
Response
data.status(string) —"success".data.data.kpis.recipients_valid(int) — count of audience rows withis_phone_valid = 'valid',is_test = false.data.data.kpis.sent/delivered/clicked/failed/processed(int) — non-test counts within the date window (sent_at / delivered_at / link_clicked_at / failed_at / created_at respectively;failedalso requiresstatus = 'failed').data.data.kpis.tests_sent(int) —is_test = truerequests created in window.data.data.kpis.kiosk_sent(int) — non-testis_kiosk = truerequests in window.data.data.kpis.rates.processed_rate/delivery_rate/click_rate/sent_vs_audience_rate(float, 2dp) — percentages; 0 when denominator is 0.data.data.timeseries.by_day[](array) — one row per calendar day in range withdate(Y-m-d),sent,delivered,clicked,failed,processed(all int).
200 Success · 200
200{
"data": {
"status": "success",
"data": {
"kpis": {
"recipients_valid": 1400,
"sent": 1360,
"delivered": 1320,
"clicked": 210,
"failed": 40,
"processed": 1400,
"rates": {
"processed_rate": 100,
"delivery_rate": 97.06,
"click_rate": 15.44,
"sent_vs_audience_rate": 97.14
},
"tests_sent": 5,
"kiosk_sent": 100
},
"timeseries": {
"by_day": [
{
"date": "2025-08-21",
"sent": 120,
"delivered": 118,
"clicked": 18,
"failed": 2,
"processed": 120
}
]
}
}
}
}Errors
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
403 | The token is valid but the record sits outside your account |
404 | The campaign id does not exist or is not yours (Campaign not found) |
422 | The request failed validation — the response names the fields |
500 | Unexpected server error |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/campaign/123/report/sms" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 8 days ago
Did this page help you?
