Skip to content

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=...
QueryRequiredFormatDescription
fromyesRFC 3339Start of the window (UTC).
toyesRFC 3339End 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 *_pct values cover the requested window.
  • opens_series, top_templates, top_clicked_links and sends_by_status may be null instead of an empty array when there is no data — handle both.
  • click_to_open_pct is clicks / opens × 100 (engagement among readers), not a portion of total sends.
  • active_subscribers is a project-wide snapshot (current count of status=active), not windowed.
  • previous mirrors the headline metrics for the equivalent window immediately before from. If there is no data in that previous window, the values are 0.

Released under the AGPL-3.0 License.