Skip to main content

Get Campaign Stats

Retrieve delivery, engagement and conversion stats for a push campaign.

Totals are lifetime. Unique counts can lag event counts by up to 15 minutes. Before the campaign is sent, counts are 0 and rates are null.

Delivered means accepted

delivered counts notifications accepted by APNs, FCM or Web Push, not arrival on the device. confirmed, displayed, suppressed, opens, clicks and dismissals come from the Client SDK and stay at 0 for an app that does not report them.

Endpoint​

GET /push/campaigns/:id/stats

Returns: 200 OK

Headers​

HeaderValueRequired
AuthorizationBearer <your-api-key>Yes

Path Parameters​

ParameterTypeRequiredDescription
idstringYesThe campaign ID.

Response​

{
"object": "push_campaign_stats",
"campaign_id": "0192a1b2-c3d4-7e5f-9000-abcdef123456",
"recipients": 8400,
"devices": 9150,
"attempts": 9150,
"delivered": 8890,
"confirmed": 6120,
"displayed": 5980,
"suppressed": 140,
"opens": 1310,
"clicks": 420,
"dismissals": 260,
"failures": 75,
"token_invalidations": 185,
"bot_opens": 12,
"bot_clicks": 3,
"unique_delivered": 8200,
"unique_displayed": 5600,
"unique_opens": 1180,
"unique_clicks": 390,
"delivery_rate": 0.9716,
"open_rate": 0.1439,
"click_rate": 0.0476,
"smart_sending": { "enabled": true, "skipped": 25 },
"conversions": {
"enabled": true,
"tracking_since": "2026-09-01T00:00:00.000Z",
"total": 42,
"revenue": [{ "currency": "SAR", "amount": 18350 }],
"by_event": [
{
"event_id": "0192a1b2-eeee-7fff-8000-111111111111",
"event_name": "order_completed",
"tracks_revenue": true,
"conversions": 42,
"revenue": [{ "currency": "SAR", "amount": 18350 }]
}
]
}
}

Response fields​

FieldTypeDescription
recipientsnumberContacts sent to. Before sending, the contacts currently reachable.
devicesnumberDevices behind recipients
attemptsnumberdelivered + failures + token_invalidations
deliverednumberAccepted by APNs, FCM or Web Push
confirmednumberDevice reported receiving it. A floor: not every device reports.
displayednumberDevice reported showing it
suppressednumberReceived but not shown, for example because permission was revoked
opensnumberTotal opens
clicksnumberTotal clicks
dismissalsnumberDismissed without being opened
failuresnumberRefused by the push service
token_invalidationsnumberRefused because the device token was no longer valid
bot_opensnumberOpens that failed signature verification. Not counted in opens.
bot_clicksnumberClicks that failed signature verification. Not counted in clicks.
unique_deliverednumberContacts with a delivered notification
unique_displayednumberContacts with a displayed notification
unique_opensnumberContacts who opened
unique_clicksnumberContacts who clicked
delivery_ratenumber | nulldelivered / attempts
open_ratenumber | nullunique_opens / unique_delivered
click_ratenumber | nullunique_clicks / unique_delivered
smart_sending.enabledbooleanSmart Sending was on when the campaign was sent
smart_sending.skippednumberRecipients skipped because they had reached the sending cap
conversions.enabledbooleanfalse when the organization has no conversion events
conversions.tracking_sincestring | nullWhen the first conversion event was enabled (ISO 8601)
conversions.totalnumberConversions attributed to the campaign
conversions.revenuearrayAttributed revenue as { currency, amount }, one entry per currency
conversions.by_eventarrayThe same breakdown per conversion event

Rates are fractions from 0 to 1, rounded to four decimals, and null when the denominator is 0.


Examples​

curl "https://api.arsel.sa/v1/push/campaigns/0192a1b2-c3d4-7e5f-9000-abcdef123456/stats" \
-H "Authorization: Bearer $ARSEL_API_KEY"

Error Responses​

{
"status_code": 404,
"name": "not_found",
"message": "Campaign not found or access denied"
}