Preview: the PushFleet API isn't live yet. Join the waitlist
Webhooks
Add webhook endpoints in the dashboard, one set per environment. PushFleet sends each event as a POST with a JSON body and retries with backoff for up to a day until your endpoint answers 2xx.
Verify the signature
Section titled “Verify the signature”Every request carries a PushFleet-Signature header: the HMAC-SHA256 of the raw request body, keyed with the endpoint’s signing secret, hex encoded. Compute it yourself and compare in constant time before trusting the event.
Events
Section titled “Events”message.delivered
Section titled “message.delivered”Apple or Google confirmed the message reached a device.
{"type":"message.delivered","created":"2026-11-01T09:41:02Z","data":{"message":"msg_2Xk9fQ","device":"dev_9fK2","user":"user_8f3k"}}message.failed
Section titled “message.failed”Delivery to a device failed for good.
{"type":"message.failed","created":"2026-11-01T09:41:02Z","data":{"message":"msg_2Xk9fQ","device":"dev_9fK2","user":"user_8f3k","reason":"token_expired"}}message.opened
Section titled “message.opened”The user tapped the notification. Needs the client SDK in the app.
{"type":"message.opened","created":"2026-11-01T09:43:10Z","data":{"message":"msg_2Xk9fQ","device":"dev_9fK2","user":"user_8f3k"}}device.removed
Section titled “device.removed”A device’s token was rejected as dead and PushFleet removed it.
{"type":"device.removed","created":"2026-11-01T09:41:02Z","data":{"device":"dev_9fK2","user":"user_8f3k","reason":"unregistered"}}