Analytics API Pro
A single endpoint backs the entire Analytics dashboard. Cookie auth required.
Returns 402 Payment Required in cloud mode without a valid SENDDOCK_LICENSE_KEY. See Analytics guide for what each field is used for, and Configuration → Pro license for the license behavior.
Overview
GET /api/v1/projects/{id}/analytics/overview?from=...&to=...| Query | Required | Format | Description |
|---|---|---|---|
from | yes | RFC 3339 | Start of the window (UTC). |
to | yes | RFC 3339 | End of the window (UTC). |
The bucket granularity (hour / day / week / month) is decided server-side from the range length — clients don't pick it. The previous block in the response covers the same-length window immediately before from, used for trend comparisons.
Response
json
{
"from": "2026-03-30T00:00:00Z",
"to": "2026-04-29T00:00:00Z",
"granularity": "day",
"range_days": 30,
"total_sent": 1500,
"total_failed": 20,
"total_opened": 980,
"total_clicked": 142,
"deliverability_pct": 98.7,
"open_rate_pct": 65.3,
"click_rate_pct": 9.5,
"click_to_open_pct": 14.5,
"active_subscribers": 4321,
"opens_series": [
{ "bucket": "2026-04-28T00:00:00Z", "opens": 42 }
],
"top_templates": [
{ "template_id": "uuid", "name": "Welcome", "sends": 320 }
],
"top_clicked_links": [
{ "url": "https://example.com/launch", "clicks": 51 }
],
"sends_by_status": [
{ "status": "sent", "count": 1500 },
{ "status": "failed", "count": 20 }
],
"previous": {
"total_sent": 1410,
"total_failed": 18,
"total_opened": 905,
"total_clicked": 130,
"deliverability_pct": 98.7,
"open_rate_pct": 64.2,
"click_rate_pct": 9.2
}
}Field notes
- All
total_*and*_pctvalues cover the requested window. opens_series,top_templates,top_clicked_linksandsends_by_statusmay benullinstead of an empty array when there is no data — handle both.click_to_open_pctisclicks / opens × 100(engagement among readers), not a portion of total sends.active_subscribersis a project-wide snapshot (current count ofstatus=active), not windowed.previousmirrors the headline metrics for the equivalent window immediately beforefrom. If there is no data in that previous window, the values are0.