Retries

A refused delivery is sent again, ten attempts at most, over about 25 minutes from the first. What you return decides whether there is a next attempt at all.

What counts as success

Any 2xx. The response body is never read, so 200, 202 and 204 are the same answer.

ResponseWhat happens
2xxYou are never sent this delivery again.
4xx, except 408 and 429Given up on at once. No further attempts.
408 and 429Sent again.
5xxSent again.
3xxSent again. Redirects are not followed, so this is never a delivery.
No response at allSent again. A refused connection, a DNS or TLS failure, or the timeout below.

You have 10 seconds to answer. An endpoint that has not answered by then has failed that attempt, whatever it does with the request afterwards.

A 4xx that is not 408 or 429 ends the delivery on the spot. If your receiver answers 400 while it is warming up, or 404 while a route is being deployed, the player's reward is gone until somebody sends it again by hand. Answer 503 when you are not ready.

When the attempts run out the delivery is given up on, and a reward behind it reads as failed.

The same delivery can arrive twice

Including one you already answered 2xx to. De-duplicate on the delivery id. It arrives in two places, X-Gemifier-Delivery and deliveryId in the body, and they are always the same value. It is the same on every retry and different between two occasions:

EventThe delivery id is
catalog_item.fulfillment_requestedthe reward id
mission.completedthe occurrence id
streak.milestone_reachedthe crossing id
leaderboard.period_closedthe period id
pinga new id every time, so two pings never collapse into one

Two completions of a recurring mission are two occurrences and two ids, so this collapses retries without ever collapsing genuine repeats. Store the id, act once, and answer 2xx to anything you have seen before.

Nothing promises an order

Not between two events, and not for one player. A delivery on its fifth attempt arrives after events that happened twenty minutes later. If you need the sequence, sort on occurredAtUtc, which is the time of the event and does not change between attempts.

Sending a given-up delivery again

Send them again on the Webhooks screen takes everything an environment gave up on, oldest first, or everything for one reward. There is no public API for it, and no way to pick one delivery by id. A given-up streak.milestone_reached or leaderboard.period_closed cannot be sent again.

Fix the endpoint first. Attempts spent proving your receiver refuses will be spent the same way again. Ping it, then press it.

Next

On this page