Docs
Analytics API

Account overview

Attributed revenue, cost, ROAS, orders and engagement for the whole account.

GET /api/v1/stats/overview

KPIs of the whole account over a period: what the Analytics page shows at the top, plus the revenue split between campaigns, automations and the AI agent, and the best campaigns and automations.

Query

time_range, start_date, end_date, compared_to — see Period.

Request

curl "https://api.getkanal.com/api/v1/stats/overview?time_range=custom&start_date=2026-10-01&end_date=2026-10-31&compared_to=previous_period" \
  -H "Authorization: Bearer 8fK2pX9mWq4Ld7Vb3Nc6Ts1Z"

Response 200 OK

{
  "period": { "from": "2026-10-01", "to": "2026-10-31", "timezone": "Europe/Paris" },
  "compared_period": { "from": "2026-08-31", "to": "2026-09-30" },
  "attribution": { "basis": "delivered", "window_seconds": 432000 },
  "performances": {
    "revenue": { "value": 12480.5, "previous": 9875.2, "changePercent": 26.4 },
    "roi": { "value": 31.2, "previous": 27.9, "changePercent": 11.8 },
    "cost": { "value": 400.02, "previous": 353.94, "changePercent": 13 },
    "cost_marketing": { "value": 312.4, "previous": 290.1, "changePercent": 7.7 },
    "conversations": { "value": 5210, "previous": 4630, "changePercent": 12.5 },
    "converted": { "value": 187, "previous": 151, "changePercent": 23.8 },
    "revenue_per_recipient": { "value": 2.4, "previous": 2.13, "changePercent": 12.7 },
    "delivered": { "value": 5102, "previous": 4588, "changePercent": 11.2 }
  },
  "engagement": {
    "delivered": { "value": 5102, "previous": 4588, "percent": 100, "changePercent": 11.2, "urlClicks": null, "replies": null },
    "read": { "value": 4011, "previous": 3530, "percent": 78.6, "changePercent": 13.6, "urlClicks": null, "replies": null },
    "interacted": { "value": 902, "previous": 811, "percent": 17.7, "changePercent": 11.2, "urlClicks": 640, "replies": 262 },
    "converted": { "value": 187, "previous": 151, "percent": 3.7, "changePercent": 23.8, "urlClicks": null, "replies": null }
  },
  "mechanism": { "campaign": 7210.3, "flow": 4890.2, "ai": 380 },
  "top": {
    "campaigns": [
      { "id": 812, "name": "Black Friday", "revenue": 5120, "roas": 28.4, "delivered": 2310, "status": "sended", "change_percent": 12.5 }
    ],
    "automations": [
      { "id": 77, "name": "Abandoned cart", "revenue": 3020.4, "roas": 41.2, "delivered": 940, "status": "live", "change_percent": 18.2 }
    ]
  }
}

Fields

performances — each metric is { value, previous, changePercent }. previous is the same metric over compared_period and changePercent the change from previous to value, in percent. Both are null without compared_to.

MetricMeaning
revenueRevenue of the orders attributed to WhatsApp, in EUR.
costWhatsApp conversation spend, all categories (marketing and utility), in EUR.
cost_marketingThe marketing share of cost.
roirevenue / cost (ROAS). null when no cost was recorded.
convertedAttributed orders.
conversationsWhatsApp conversations opened over the period.
revenue_per_recipientrevenue / conversations.
deliveredMessages delivered.

engagement — the funnel delivered → read → interacted → converted. percent is the share of delivered; interacted counts the contacts who clicked a link (urlClicks) or replied (replies).

mechanism — attributed revenue by source: campaign, flow (automations) and ai (AI agent replies).

top — the campaigns and automations that brought the most revenue over the period, best first (up to 5 of each). status is the campaign stage in lower case (see List campaigns) or, for an automation, live / off. Use their id with the campaign and automation routes.

On this page