Docs
Analytics API

Campaign stats

Attributed revenue, cost and engagement of one campaign.

GET /api/v1/stats/campaigns/{campaign_id}

Path

ParamNotes
campaign_idCampaign 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_rate is converted / delivered, in percent, and revenue_per_recipient is revenue / delivered;
  • engagement.interacted counts link clicks only (replies is null).

Errors

404 { "error": "Not found" } when the id doesn't exist or belongs to another account. See Errors for the others.

On this page