Skip to content
Preview: the PushFleet API isn't live yet. Join the waitlist

Messages and delivery

A send returns as soon as PushFleet has accepted the message. Delivery to each of the user’s devices happens in the background, and each device gets its own status.

Status Meaning
queued Accepted, not yet handed to Apple or Google
sent Handed to Apple or Google
delivered Apple or Google confirmed it reached the device
failed Rejected, for example because the token is dead or the payload is invalid
opened The user tapped it (needs the client SDK)

If Apple or Google is slow or briefly unavailable, PushFleet retries with backoff until the message’s ttl runs out (a day by default). A message that never gets through ends as failed.

Your own retries are safe too: send the same Idempotency-Key header and PushFleet returns the original response instead of sending twice.

When a device’s token is rejected as dead, its delivery is marked failed, the device is removed and you get a device.removed webhook. The next send to that user skips it.

An Apple token sent to the wrong push server (sandbox instead of production, or the other way round) isn’t dead. PushFleet retries it on the other server and corrects the device’s apns_environment instead of removing it.