Overview
Webhooks deliver platform events (builds, analytics events and your game’s own events) to your backend via HTTP POST. Your server must respond within 10 seconds; a failed delivery is retried for about 24 hours.Create a webhook endpoint
Developer Portal → Webhooks → pick the game → Add WebhookAvailable events
Any other event name is silently dropped when you save the subscription — check the saved list
in the portal to confirm what was accepted. A list with no valid event is refused.
Body
Every delivery is a JSON object with the event at the top level and the event’s own fields underdata:
Verify signatures
Every request carries these headers:
Always verify the signature before processing.
Reliability rules
- Return 2xx within 10 seconds. Any other status (4xx included), a timeout or a connection error is a failed delivery.
- Failed deliveries are retried for about 24 hours, 10 attempts in all: after 30 s, 2 min,
10 min, 30 min, 1 h, 2 h, 4 h, 8 h and 8 h. Every attempt sends the same body and the same
eventId. After the tenth, the delivery is dropped, so if a piece of state must be correct, reconcile it against the API rather than relying on having received an event. - Deliveries are not ordered. A retried event can arrive after events that happened later.
- Pending retries follow your settings. A changed URL or rotated secret applies from the next attempt; a deleted or paused webhook gets no further attempts. An event your subscription leaves out is never sent, so it is never retried either.
- Deduplicate on
eventId. Every delivery carries aneventIdat the top level of the body. It identifies the occurrence, not the delivery: one event sent to three of your endpoints carries the sameeventIdto all three, a retry carries the same one again, and two separate occurrences never share one. Record the ids you have processed and ignore a repeat. - Be idempotent anyway. Respond fast, queue the work, and make replays harmless.
- Cap your endpoints. A game can have at most 20 webhooks.
