Stats
GET /v1/stats per campaign, /v1/stats/total for cabinet totals and charts, /v1/stats/analytics for currency split and top campaigns — periods, custom date and hour ranges.
Three endpoints, from detailed to summary. All return data per cabinet, for every cabinet the key reaches.
| Endpoint | Returns |
|---|---|
GET /v1/stats | every campaign’s numbers for the period |
GET /v1/stats/total | each cabinet’s totals plus chart points |
GET /v1/stats/analytics | totals split by currency, chart, top campaigns |
One campaign over a period: GET /v1/campaigns/{ad_id}/history.
Periods
period | Window |
|---|---|
1d | last 24 hours (default for /stats and /stats/total) |
7d | last 7 days |
30d | last 30 days (default for /stats/analytics) |
all | all time |
custom | startDate and endDate (YYYY-MM-DD), optionally startHour and endHour (0–23) |
Any <N>h or <N>d also works (6h, 14d, up to 365 days). An unrecognised value is read as the last 24 hours — it doesn’t return an error, so check your spelling. All times are UTC.
# 14:00–15:59 UTC on 8 October
curl -s "https://app.adsly.pro/api/v1/stats?period=custom&startDate=2026-10-08&endDate=2026-10-08&startHour=14&endHour=15" \
-H "X-API-Key: $ADSLY_API_KEY"
GET /v1/stats
Per campaign, nested by cabinet: data[account_id][ad_id].
{
"success": true,
"data": {
"53": {
"90412": { "views": 640, "clicks": 7, "actions": 3, "spent": 0.96, "ctr": 1.09, "cpm": 1.5, "cpa": 0.32, "group_id": 7 }
}
},
"meta": { "period": "7d" }
}
Keys are strings; values here are numbers (unlike the campaign object). cpa is spend per action; ctr is a percentage.
GET /v1/stats/total
The dashboard endpoint: totals and a chart for each cabinet.
{
"success": true,
"data": {
"accounts": {
"53": {
"chart": [
{ "label": "2026-10-08 12:00", "views": 52, "clicks": 1, "spent": 0.83, "budget": 4.95, "ctr": 1.92, "cpc": 0.83, "cpm": 16 }
],
"totals": {
"views": 121, "clicks": 3, "spent": 1.81, "ctr": 2.48, "cpc": 0.6, "cpm": 14.95,
"campaigns": 4, "active": 2, "stopped": 2, "declined": 0,
"totalBudget": 5.21, "totalSpentAllTime": 2.79
},
"cabinetType": "euro"
}
},
"period": "1d",
"lastUpdated": "2026-10-08T10:02:54.016Z"
},
"meta": { "period": "1d" }
}
chart points are hourly or daily depending on the period. cabinetType gives the currency (euro → EUR, ton → TON, stars → Stars).
GET /v1/stats/analytics
Like /stats/total, plus spend split by currency and the top campaigns.
{
"success": true,
"data": {
"accounts": {
"53": {
"chart": [ { "label": "2026-10-08 12:00", "views": 52, "clicks": 1, "spent": 0.83,
"spent_ton": 0, "spent_euro": 0.83, "spent_stars": 0, "ctr": 1.92, "cpc": 0.83, "cpm": 16 } ],
"totals": { "views": 121, "clicks": 3, "spent": 1.81,
"spentByCurrency": { "ton": 0, "euro": 1.81, "stars": 0 },
"ctr": 2.48, "cpc": 0.6, "cpm": 14.95 },
"topCampaigns": [ { "ad_id": 90412, "account_id": 53, "title": "API test", "status": "Active",
"views": 58, "clicks": 1, "spent": 0.85, "ctr": 1.72, "cpc": 0.85 } ]
}
}
},
"meta": { "period": "30d" }
}
Notes
- Stats follow Telegram’s own counters, synced to Adsly regularly; the newest hour fills in as syncs arrive.
- Never add up
spentacross cabinets with different currencies. - For conversions you track yourself (leads, deposits, sales) see Conversions — Telegram’s
actionsare joins and bot starts, not your conversions. - Prefer the hourly digest webhook over polling stats every few minutes.
Updated 2026-10-08