Statistics
Counts by period, event, tag, type and sending domain — read from a daily rollup, so the answer never depends on scanning your whole event history.
GET /analytics/stats
from and to are required (ISO 8601; the window is inclusive on both ends, counted in UTC days). group_by is day (default), tag, type or domain. Optional filters: environment (live by default), tag, domain and type. Scope: analytics:read.
The response is { rows, totals }. Each row carries key plus the counters below; totals carries the same counters for the whole window.
| Counter | Meaning |
|---|---|
| sent | Accepted by the provider — “did it leave?” |
| delivered | Confirmed delivered (partial deliveries included). |
| deferred | Temporarily postponed; may still be delivered. |
| bounced | Permanently rejected, or accepted and undeliverable. |
| failed | Rejected, failed or expired before delivery. |
| suppressed | Recipient was on the suppression list; nothing was sent. |
| complained | Marked as spam. |
| opened / opened_unique | Opens: raw, and one per message. |
| clicked / clicked_unique | Clicks: raw, and one per message. |
| unsubscribed | Opted out through the unsubscribe link. |
How to read the numbers
Use opened_unique when you want an open rate: mailbox providers pre-load and re-load the tracking pixel, so the raw opened is higher than the number of people who read the message.
The rollup is refreshed every few minutes, so a very recent send can appear in GET /email/events before it appears here. The window you may ask for is your plan’s retention: an older from is refused with the earliest date you can use, instead of silently returning an empty chart.