Report a notification status
POST /api/push/notifications/{guid}/status
X-Push-App-Key: <application key>
Content-Type: application/json
{ "status": "delivered", "occurredAt": "2026-08-07T12:44:03.219Z" }
Fields
| Field | Notes |
|---|---|
status | delivered or seen. |
occurredAt | When the event happened on the device, ISO-8601. |
The guid comes from data.guid in the message payload.
This is not telemetry
The cascade waits on delivered before falling through to SMS or Viber. A missing callback means the client is charged for a message the user already read on screen.
Report delivered the moment the message is received — from the foreground handler and the background handler — and seen when the notification is tapped.
Deduplicate by guid
The same message can reach the app through more than one path, and a locally re-presented notification arrives again through the expo-notifications listener. Deduplicate on data.guid before reporting.
Where the guid comes from
Messages are sent data-only, so every field arrives inside data:
- Android:
remoteMessage.data["guid"] - iOS:
userInfo["guid"]
If callbacks stop arriving after a backend change
On Android, a message carrying a notification block is drawn by the system and never reaches JS until it is tapped — so no delivered is ever sent. That is precisely why the service sends data-only. If callbacks stop after a backend change, check whether a notification block crept back into the payload.