Analytics API
Campaign stats
Attributed revenue, cost and engagement of one campaign.
GET /api/v1/stats/campaigns/{campaign_id}Path
| Param | Notes |
|---|---|
campaign_id | Campaign id, from GET /api/v1/campaigns or the top.campaigns of the overview. |
Query
time_range, start_date, end_date, compared_to — see Period.
Revenue is counted on the day of the order: to get the full result of a
campaign, use a period that starts on its send day and covers the attribution
window after it.
Request
curl "https://api.getkanal.com/api/v1/stats/campaigns/812?time_range=last_30_days" \
-H "Authorization: Bearer 8fK2pX9mWq4Ld7Vb3Nc6Ts1Z"Response 200 OK
{
"period": { "from": "2026-10-11", "to": "2026-11-09", "timezone": "Europe/Paris" },
"compared_period": null,
"attribution": { "basis": "delivered", "window_seconds": 432000 },
"performances": {
"revenue": { "value": 5120, "previous": null, "changePercent": null },
"roi": { "value": 28.4, "previous": null, "changePercent": null },
"converted": { "value": 74, "previous": null, "changePercent": null },
"cost": { "value": 180.3, "previous": null, "changePercent": null },
"cost_marketing": { "value": 180.3, "previous": null, "changePercent": null },
"delivered": { "value": 2310, "previous": null, "changePercent": null },
"conversion_rate": { "value": 3.2, "previous": null, "changePercent": null },
"revenue_per_recipient": { "value": 2.22, "previous": null, "changePercent": null }
},
"engagement": {
"delivered": { "value": 2310, "previous": null, "percent": 100, "changePercent": null, "urlClicks": null, "replies": null },
"read": { "value": 1840, "previous": null, "percent": 79.7, "changePercent": null, "urlClicks": null, "replies": null },
"interacted": { "value": 402, "previous": null, "percent": 17.4, "changePercent": null, "urlClicks": 402, "replies": null },
"converted": { "value": 74, "previous": null, "percent": 3.2, "changePercent": null, "urlClicks": null, "replies": null }
}
}The fields are those of the overview, restricted to this campaign, with two differences:
conversion_rateisconverted / delivered, in percent, andrevenue_per_recipientisrevenue / delivered;engagement.interactedcounts link clicks only (repliesisnull).
Errors
404 { "error": "Not found" } when the id doesn't exist or belongs to another
account. See Errors for the others.