Email report (single campaign)

Get email-channel KPIs (recipients, sent, delivered, opened, clicked, unsubscribed, failed, processed, tests/kiosk counts plus derived rates) and a fixed last-7-day daily timeseries for a single campaign.

Auth: Account — authentication bearer token. The campaign, so a user can only read reports for campaigns owned by their own company (the account/location account). A non-matching id returns 404 Campaign not found.

Rate limit: No rate limit.

Request

  • Query: start_date (string Y-m-d, optional) — KPI window start; defaults to the campaign's created_at start-of-day.
  • Query: end_date (string Y-m-d, optional) — KPI window end; defaults to now end-of-day. If start_date > end_date the two are swapped. Note: the timeseries.by_day block always covers the last 7 days (now-6 → end) regardless of the date filter.

Response{ data. } envelope. The controller returns its own status/data keys which are then wrapped again by successResponse, so the payload is { data: { status, data: { kpis, timeseries } } }.

  • kpis.recipients_valid (int) — count of CampaignAudienceData with is_email_valid = 'valid', non-test.
  • kpis.sent / delivered / opened / clicked / unsubscribed (int) — counts of non-test rows whose respective *_at timestamp falls in the window.
  • kpis.failed (int) — rows with status = 'failed' within the window (failed_at).
  • kpis.processed (int) — non-test rows created in the window.
  • kpis.tests_sent (int) — is_test = true rows created in the window.
  • kpis.kiosk_sent (int) — non-test is_kiosk = true rows created in the window.
  • kpis.rates (object) — processed_rate, delivery_rate, open_rate, click_rate, unsubscribe_rate, sent_vs_audience_rate (floats, percent rounded to 2dp; 0 when denominator is 0).
  • timeseries.by_day (array) — one entry per day for the last 7 days, each { date (Y-m-d), sent, delivered, opened, clicked, unsubscribed, failed, processed } (ints).

Path params

ParameterTypeRequiredNotes
campaignIdintegerRequiredDigits only.

Errors: 422 on validation failure.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
string
required
Response

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json