Skip to main content
The Blockchain Events service watches contracts on supported chains, decodes the events you subscribe to, and delivers them to your webhook as signed payloads. This guide covers the cross-cutting concerns that apply across the Blockchain Events endpoints: the capabilities that authorize each operation, the supported networks, the event payload your webhook receives, and how to verify its signature.
Project context requiredEvery Blockchain Events endpoint requires a token bound to a project and business. A token without that context returns 401: Token is missing project or business context.

Capabilities

Each operation is gated on a capability granted by your plan. A missing capability returns 403: Missing required capability: <capability>.

Supported networks

ATC · BSC · ETH · BASE · POL · SOL · LISK

Receiving events

When a subscribed event is decoded, the service sends an HTTP POST to your subscription’s webhookUrl with a JSON body and an X-Indexer-Signature header. Acknowledge with any 2xx response; a non-2xx response or a timeout is recorded as a failed delivery and may be retried automatically. No fixed attempt count or backoff schedule is published for these retries, so don’t rely on a specific number of attempts: inspect every delivery attempt and manually replay any failures via the delivery logs (gated on indexer.history.read and indexer.webhook.replay). See Webhook signatures for how this compares to Wallet’s documented retry schedule.

Verifying webhook signatures

Each delivered webhook carries an X-Indexer-Signature header computed with the subscription’s signing secret. The secret is returned only once, when you create a subscription or rotate the secret. Store it securely. To verify a delivery, recompute the HMAC over the raw request body and compare it to the header value in constant time. Reject any request whose signature does not match before trusting the payload.
Verify against the exact bytes you received. Parsing and re-serializing the JSON before hashing will change the body and break the comparison.
Signatures are HMAC-SHA256 over the raw request body, hex-encoded: exactly what the snippet above computes.