generated: '2026-08-23'
method: searched
source:
- https://docs.immutable.com/docs/products/audience/webhooks
- https://docs.immutable.com/docs/products/indexer/webhooks
asyncapi_published: false
asyncapi_note: >-
Immutable publishes NO AsyncAPI document. Searched the docs host, the llms.txt
OpenAPI Specs section (which lists only the two REST specs), the GitHub org's
35 public repos, and /asyncapi.yaml + /asyncapi.json on every Immutable host —
nothing. The event surface is real and well documented in prose, so this
artifact captures the webhook catalogue instead and apis.yml carries a
`Webhooks` pointer rather than an `AsyncAPI` one. Nothing here is fabricated
into spec form.
event_surfaces:
- name: Audience CDP webhooks
docs: https://docs.immutable.com/docs/products/audience/webhooks
configured_in: Immutable Hub -> Settings -> Webhooks
transport: Signed AWS SNS notification delivered as an HTTP POST to your HTTPS endpoint
content_type: text/plain
content_type_note: >-
SNS delivers with Content-Type text/plain, not application/json — a receiver
must configure a raw text body parser and JSON.parse itself. This trips up
most default JSON middleware.
max_endpoints: 10 per environment
envelope:
fields: [id, type, api_version, created_at, project_id, data]
api_version_example: '2026-05-01'
id_example: evt_11111111-1111-1111-1111-111111111111
events:
- name: audience_joined
fired_when: A player newly enters your project's audience
data: player.id plus linked_accounts[] (provider, provider_account_id, username, linked_at)
- name: audience_account_linked
fired_when: A player links an external account while already in your audience
data: player.id plus linked_account (provider, provider_account_id, username, linked_at)
- name: audience_account_unlinked
fired_when: A player disconnects an external account while already in your audience
data: player.id plus linked_account
providers_enum: [steam, discord, epic_games, x, telegram, tiktok, twitch]
security:
method: AWS SNS RSA message signature
shared_secret: false
custom_header: false
verification: '`sns-validator` npm package, plus a TopicArn equality check'
topic_arn: 'arn:aws:sns:us-east-2:362750628221:webhook-outbound-prod'
note: >-
There is no shared secret and no signature header. Checking `TopicArn`
is what proves the event came from Immutable rather than any other SNS
publisher.
delivery:
retries: 15 attempts, exponential backoff from 5s up to 260s between tries
total_retry_cap: 60 minutes (AWS HTTPS endpoint cap)
dead_letter: held 14 days, then discarded
manual_redelivery: false
manual_redelivery_note: >-
No manual redelivery from Hub. If your endpoint is down longer than the
retry window, those events are lost — an explicit, published data-loss
boundary.
ordering: not guaranteed; sort by envelope `created_at`
duplicates: possible; deduplicate on `id`
unknown_types: log and skip; the catalogue is explicitly an open set
- name: Indexer / blockchain webhooks
docs: https://docs.immutable.com/docs/products/indexer/webhooks
configured_in: Immutable Hub -> Webhooks
transport: HTTP POST to your HTTPS endpoint
envelope:
fields: [event_name, event_id, timestamp, data]
events:
- name: imtbl_zkevm_mint_request_updated
fired_when: A mint request changes status
data: reference_id, status, token_id, transaction_hash, collection_address, owner_address
event_categories:
- mints
- transfers
- orders
- trades
event_category_note: >-
The docs name these four categories but publish a full event-name list for
mint requests only. The remaining event names are not enumerated in public
docs; they are NOT invented here.
security:
method: HMAC-SHA256 over the raw payload
header: x-immutable-signature
secret: per-webhook secret configured in Hub
delivery:
timeout: 30 seconds
retries: 5 attempts — immediate, 1 min, 5 min, 30 min, 2 hours
manual_redelivery: true
manual_redelivery_note: After 5 failed attempts, view and retry in Hub.
duplicates: possible; deduplicate on `event_id`
divergence_warning: >-
The two webhook systems do NOT share an envelope, a signature scheme, a retry
policy or a redelivery capability. Audience uses SNS + RSA + `id` + no manual
redelivery; Indexer uses a direct POST + HMAC in `x-immutable-signature` +
`event_id` + Hub retry. A single receiver cannot handle both with one code
path, and nothing in the docs cross-references the other system. This is the
single largest inconsistency found on Immutable's event surface.
streaming:
websockets: false
server_sent_events: false
note: >-
No streaming API. The only real-time paths are the two webhook systems above
and direct JSON-RPC subscription against the chain RPC endpoints
(rpc.immutable.com / rpc.testnet.immutable.com), which is Ethereum-standard
rather than an Immutable API.
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/immutable-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.