Skip to content

Email stats

GET /stats/emails returns aggregated send and engagement counts over a time range: totals plus a dense series (empty buckets are zero rows, so it charts directly):

Terminal window
curl "https://api.sendsignal.dev/stats/emails?from=2026-08-01T00:00:00Z&bucket=day" \
-H "Authorization: Bearer ss_..."
{
"from": "2026-08-01T00:00:00Z",
"to": "2026-08-20T00:00:00Z",
"bucket": "day",
"totals": {
"sent": 1200, "delivered": 1180, "bounced": 12, "complained": 1, "failed": 7,
"opened": 640, "clicked": 210,
"delivery_rate": 0.983, "bounce_rate": 0.01, "open_rate": 0.542, "click_rate": 0.178
},
"buckets": [ { "time": "2026-08-01T00:00:00Z", "sent": 80, "delivered": 79, "...": 0 } ]
}
Param Meaning
from / to RFC 3339 range (to exclusive). Defaults: last 30 days, ending now
bucket day (default) or hour. Max range: 366 days for day, 31 for hour
stream_id Scope to one message stream
domain_id Scope to one sending domain
tag Scope by tag: a key (campaign) or key:value (campaign:launch)

opened and clicked count unique emails, not raw pixel loads or clicks. Rates are derived: delivery_rate and bounce_rate divide by sent; open_rate and click_rate divide by delivered.