List campaign reports
GET/v1/reports/campaigns
Requires an API key with the reports:read scope. About keys and scopes
Works with integration, agent and partner keys.
Available on plans with advanced reports. Plans
Lists campaign performance over a window. One row per campaign with a marketing message in the window, including a campaign none of whose messages were sent: its email shows as failed or skipped. Counts are send cohorts like the overview: email by the time it was sent, email never sent and push by the time it was queued, and later feedback revises them. Journey and transactional messages are not here (see the journey and transactional reports), so these rows can sum to less than the overview. Conversions are those whose source message was sent in the window, and revenue is summed per goal currency, never converted. Rates are fractions; null means no denominator, and sorts below every rate. sent sorts by email sent. Without from and to, the window is the last 30 days ending today. Needs a plan with advanced reports: without one, 403 PLAN_FEATURE_UNAVAILABLE.
Query parameters
limitintegeroptionalHow many items a page holds: 1 to 100, 20 by default.
min > 0 · max 100 · default
20cursorstringoptionalWhere the page starts: the previous page's
meta.pagination.nextCursor. Omit it for the first page, and send the same filters with it.1–2,048 characters
fromstringoptionalStart of the window, inclusive: a date-time, or a date meaning the start of that day in the workspace timezone. Give with
to; omit both for the last 30 days.tostringoptionalEnd of the window, exclusive, in the same forms. To include a whole last day, pass the day after it:
from=2026-10-01&to=2026-10-08covers 1 to 7 October. No later than the end of today; a window touches at most 366 days. Give withfrom.sortstringoptionalA field ascending, or
-fielddescending. Rates with no denominator sort last.one of
firstAttemptedAt,sent,openRate,clickRate,bounceRate,unsubscribeRate,conversions,-firstAttemptedAt,-sent,-openRate,-clickRate,-bounceRate,-unsubscribeRate,-conversions· default"-firstAttemptedAt"tagstringoptionalOnly campaigns carrying this tag, its name matched without case: "everything tagged Black Friday".
1–64 characters
Header parameters
Kirora-WorkspacestringoptionalPartner keys only: the child workspace to act in, by the external id the partner gave it. Without it, a partner key acts in its own workspace. Any other key that sends it is refused with 403, and an unknown workspace is 404.
pattern
^[A-Za-z0-9._:-]{1,128}$
Returns
Returns 200 OK with a list of CampaignPerformance objects in data, and the next page's cursor in meta (see pagination). Otherwise returns an error; Errors lists every code and which to retry.
campaignIdstringrequireduuid
namestringrequiredstatusstringrequiredone of
draft,scheduled,sending,testing,sent,cancelledchannelsstring[]requiredThe channels the campaign targets.
firstAttemptedAtstringrequiredThe campaign's first message in the window: when it was sent, or queued for one never sent. Not the campaign schedule.
date-time
emailobjectrequiredEmail counts and rates for the window.
sentcovers only email the provider accepted.11 child attributes
sentintegerrequiredmin 0
deliveredintegerrequiredmin 0
openedintegerrequiredOpened at least once, including
openedByMachine.min 0
openedByMachineintegerrequiredOf
opened, those only a machine opened: a mail app fetched its images with no reader (Apple Mail Privacy Protection, Gmail's prefetch on delivery) or a mail security scanner checked it.min 0
clickedintegerrequiredWith a link clicked by a person.
min 0
failedintegerrequiredNot delivered, with no bounce or complaint: refused before sending, or failed after it. Each message's
failure.reasonsays why.min 0
skippedintegerrequiredStopped before sending by a guard (no consent, suppressed, no address). Not in
sent.min 0
bouncedintegerrequiredmin 0
complainedintegerrequiredmin 0
unsubscribedintegerrequiredmin 0
ratesEmailRatesrequiredEmail rates as fractions: delivery over sent; bounce and complaint over real sends (
sentlesssimulatedwhere the counts give it), asdeliverabilityHealthjudges them; open, click and unsubscribe over delivered.nullwhen there is no denominator.6 child attributes
deliverynumber | nullrequiredmin 0
opennumber | nullrequiredmin 0
clicknumber | nullrequiredmin 0
bouncenumber | nullrequiredmin 0
complaintnumber | nullrequiredmin 0
unsubscribenumber | nullrequiredmin 0
pushobjectrequiredPush counts for the window.
4 child attributes
sentintegerrequiredmin 0
failedintegerrequiredmin 0
openedintegerrequiredmin 0
clickedintegerrequiredmin 0
conversionsintegerrequiredGoal conversions whose source message was sent in the window.
min 0
revenueMoney[]requiredCredited revenue per goal currency, never converted: what conversions a message drove were worth, gross, before refunds and cancellations.
2 child attributes
currencystring | nullrequiredThe currency, an ISO 4217 code; null when none was named.
valuenumberrequiredThe amount in that currency.
revenueWithheldbooleanrequiredTrue when
revenueleaves out the value of a goal whose value property is a masked attribute this viewer may not see; its conversions are still counted.