How delivery works
- You register an endpoint in Hub under Settings → Webhooks.
- Immutable sends each event as a signed SNS notification to that URL.
- Your server verifies the signature, acknowledges with
200, and handles the payload asynchronously.
id, type, api_version, created_at, project_id, data). When new types ship, you subscribe to them in Hub and branch on type—you do not need a new integration pattern.
Available event types
The catalog starts with account-link lifecycle events. More Audience event types will be added over time; treat the table below as the current set, not the final set.
Select the types you care about when you create or edit the webhook in Hub. Unsupported or future types simply do not appear until they are released.
Configure in Hub
Go to Hub → Settings → Webhooks → Add Webhook, enter your HTTPS URL, and choose which Audience event types to receive.Payload shape
Every event uses this envelope. Thedata object is type-specific.
Account link and unlink
Foraudience_account_linked and audience_account_unlinked, data contains the player and linked account:
type is audience_account_unlinked. All other fields are identical.
Supported provider values today: steam, discord, epic_games, x, telegram, tiktok, twitch
Verify the signature
Webhooks are signed by AWS SNS using RSA. Verify signatures using thesns-validator npm package. There is no shared secret or custom header.
SNS delivers messages with Content-Type: text/plain. If you use Express, configure a raw text body parser for your webhook route:
TopicArn confirms the event originated from Immutable’s infrastructure and not a third-party SNS topic.
Handle events by switching on event.type so new types can be added without changing verification.
Retry policy
SNS retries failed deliveries automatically according to the SNS delivery retry policy. There is no manual retry in Hub. If your endpoint is unavailable for an extended period, events may be permanently dropped.Best practices
- Respond quickly. Return
200to SNS immediately and process the event asynchronously to avoid delivery timeouts. - Deduplicate. Use the
idfield to detect duplicate deliveries. The same event may arrive more than once. - Scope by project. The
project_idfield identifies which of your projects the player belongs to. A player can appear in multiple projects and trigger events for each. - Ignore unknown types safely. Log and skip
typevalues your code does not recognize so catalog growth does not break your endpoint.