Analytics

One call returns sent, delivered, opened, clicked and more as a time series, totals and a breakdown, for transactional mail, campaigns and sequences.

Query

curl "https://api.runearc.com/v1/analytics?range=30d&type=campaign&by=source" \
  -H "Authorization: Bearer $RUNEARC_API_KEY"
ParameterValuesDescription
range7d, 30d (default), 90d, customPresets end today (UTC).
from, toYYYY-MM-DDFor range=custom, both UTC and inclusive. At most 366 days. A range of 2 days or less is bucketed hourly, otherwise daily.
typetransactional, campaign, sequenceOnly that kind of send.
source_idstringOne campaign or sequence id.
step_idstringOne sequence step or campaign email.
providerses, kumo, unknownThe transport that sent it.
subscriberemail or seg_...One address, or a segment.
bysource (default), type, providerHow rows are grouped. At most 200 rows.

Response

FieldTypeDescription
range, filters, availabilityobjectThe resolved range and interval, the filters applied, and whether each metric has data.
totalsobjectsent, delivered, bounced, complained, opened, clicked, unsubscribed, conversions, revenue_cents.
ratesobjectdelivery, bounce, complaint (of sent), open, click, unsubscribe (of delivered). null when the denominator is 0.
seriesarrayOne point per bucket: t and the same counters.
rowsarrayThe breakdown: type, source_id, step_id, provider, label and the counters.

Counts are unique per recipient, ignore bot traffic (see Tracking) and are bucketed at the time of the event. Conversions and revenue come from goals. Analytics cover the whole workspace, so a key limited to sending or to one inbox is refused with insufficient_scope; use a full key.

CLI and MCP

runearc analytics --range 30d --type campaign --by source
runearc analytics --range custom --from 2026-11-01 --to 2026-11-07 --subscriber ada@example.com

The MCP tool is get_analytics.

Errors

CodeStatusMeaning and fix
invalid_range400Use 7d, 30d, 90d, or custom with from and to as YYYY-MM-DD, at most 366 days, not in the future.
invalid_type, invalid_provider, invalid_breakdown400Use a value from the table above.
invalid_subscriber, segment_unavailable400Send an email address or an existing segment id.
insufficient_scope403Use a full access key or a role that can view logs.
Per message delivery state is on Emails API and Webhooks.

Something unclear or wrong? The API answers every error with a fix, and so should these docs. Back to runearc.com