Email delivery comparison
Overview
Compare emails delivered with texts delivered over time for a campaign.
Use this to spot deliverability problems.
You'll need the campaign's id. Test sends aren't counted.
Returns the series: up to 7 buckets (days, weeks or months), ending with the one that holds end_date.
Prerequisites
- A bearer token. See Authentication.
- The campaign's id (
campaignId), from List campaigns.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/campaign/{campaignId}/report/delivered-comparison
Authentication
Account token
- The campaign must belong to the caller's own company. Any other id, including a campaign of another account, returns
404Campaign not found.
Rate limit
120 requests per minute, counted per user (the token’s user). See Rate limits.
Request parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
campaignId | path | integer | Yes | The campaign's id (digits only). It must belong to your own company. |
group_by | query | string | No | Bucket size: day, week (Monday to Sunday) or month. Default day. |
limit | query | integer | No | Number of buckets, 1 to 7. Default 7. (This isn't a page size, so it isn't raised to 10.) |
end_date | query | string | No | The last bucket is the one holding this day, Y-m-d. Default: today. |
Request body
None.
Request payload
None.
Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
status | string | success. |
data[] | array of objects | One row per bucket, oldest first. |
data[].key | string | The bucket label: Y-m-d for days, a range such as Sep 21-27, 2026 for weeks, Sep 2026 for months. |
data[].email | integer | Emails delivered in the bucket. |
data[].sms | integer | Texts delivered in the bucket. |
Response payload
{
"data": {
"status": "success",
"data": [
{
"key": "2026-09-25",
"email": 0,
"sms": 0
},
{
"key": "2026-09-26",
"email": 0,
"sms": 0
},
{
"key": "2026-09-27",
"email": 0,
"sms": 0
},
{
"key": "2026-09-28",
"email": 0,
"sms": 0
},
{
"key": "2026-09-29",
"email": 0,
"sms": 0
},
{
"key": "2026-09-30",
"email": 0,
"sms": 0
},
{
"key": "2026-10-01",
"email": 1,
"sms": 0
}
]
}
}Examples
Success payload
Last 7 days: see Response payload.
Three weeks (?group_by=week&limit=3&end_date=2026-10-01):
{
"data": {
"status": "success",
"data": [
{
"key": "Sep 14-20, 2026",
"email": 0,
"sms": 0
},
{
"key": "Sep 21-27, 2026",
"email": 0,
"sms": 0
},
{
"key": "Sep 28-4, 2026",
"email": 1,
"sms": 0
}
]
}
}Error payload
404 Campaign not found
{
"message": "Campaign not found",
"status": "error",
"errors": []
}422 Unknown group_by
{
"message": "The selected group by is invalid.",
"errors": {
"group_by": [
"The selected group by is invalid."
]
}
}422 limit above 7
{
"message": "The limit field must not be greater than 7.",
"errors": {
"limit": [
"The limit field must not be greater than 7."
]
}
}429 Too many requests
{
"message": "Too Many Attempts."
}| Status | Meaning |
|---|---|
200 | The series. |
401 | The token is missing, expired or invalid. |
404 | No campaign with that id in your company (Campaign not found). |
422 | group_by isn't day, week or month, limit isn't 1 to 7, or end_date isn't Y-m-d. |
429 | More than 120 requests in a minute from this user. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/campaign/4823/report/delivered-comparison?group_by=day&limit=7" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 17 days ago
Did this page help you?
