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

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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 404 Campaign not found.

Rate limit

120 requests per minute, counted per user (the token’s user). See Rate limits.

Request parameters

ParameterInTypeRequiredDescription
campaignIdpathintegerYesThe campaign's id (digits only). It must belong to your own company.
group_byquerystringNoBucket size: day, week (Monday to Sunday) or month. Default day.
limitqueryintegerNoNumber of buckets, 1 to 7. Default 7. (This isn't a page size, so it isn't raised to 10.)
end_datequerystringNoThe 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.

FieldTypeDescription
statusstringsuccess.
data[]array of objectsOne row per bucket, oldest first.
data[].keystringThe bucket label: Y-m-d for days, a range such as Sep 21-27, 2026 for weeks, Sep 2026 for months.
data[].emailintegerEmails delivered in the bucket.
data[].smsintegerTexts 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."
}
StatusMeaning
200The series.
401The token is missing, expired or invalid.
404No campaign with that id in your company (Campaign not found).
422group_by isn't day, week or month, limit isn't 1 to 7, or end_date isn't Y-m-d.
429More than 120 requests in a minute from this user.
500Unexpected 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'

Did this page help you?