Dashboard stats
Two endpoints power the RCS Panel dashboard — one returns aggregate KPIs, the other a per-day series for the chart at the top of the page.
GET /api/v1/rcs/stats
GET /api/v1/rcs/stats/daily?from=YYYY-MM-DD&to=YYYY-MM-DDKPIs
GET /api/v1/rcs/stats{
"success": true,
"stats": {
"total_broadcasts": 12,
"total_recipients": 184320,
"total_sent": 175430,
"total_delivered": 0,
"total_read": 0,
"total_failed": 8890,
"broadcasts_running": 1,
"broadcasts_completed": 9,
"broadcasts_cancelled": 1,
"broadcasts_failed": 1
},
"wallet": {
"balance": 4250.50,
"per_message_price": 0.95,
"sends_remaining": 4474
},
"bot_name": "acme_promotions"
}total_delivered and total_read stay at zero in v1 — the delivery
status webhook routing for RCS-panel customers is a follow-up sprint.
Daily series
GET /api/v1/rcs/stats/daily?from=2026-05-13&to=2026-05-27from and to are both optional. Defaults to the last 14 days.
Max window is 90 days — anything wider is clamped.
{
"success": true,
"from": "2026-05-13",
"to": "2026-05-27",
"series": [
{ "date": "2026-05-13", "sent": 0, "spend": 0.0 },
{ "date": "2026-05-14", "sent": 2105, "spend": 1999.75 },
{ "date": "2026-05-15", "sent": 0, "spend": 0.0 },
…,
{ "date": "2026-05-27", "sent": 18324, "spend": 17407.80 }
]
}Every day in the window gets a row — even when you didn’t send anything — so the chart line stays continuous.
spend is the sum of rcs_wallet_billing_logs.cost for that day,
which is what the wallet was actually debited (not what was invoiced).