Webhooks are part of the Subscriptions to Transactions API. This page explains how the system works. For a hands-on walkthrough, see the Wallet Activity Alerts recipe.
How it works
Create a subscription
Call Create Subscription with a
callback_url and a list of wallet addresses. Optionally filter by chain_ids to limit which chains you monitor.Zerion monitors the wallets
Zerion watches all specified wallets across the selected chains (or all supported chains if none are specified).
Payload format
Every webhook notification is a POST request with a JSON body following the JSON:API structure. The top-leveldata object describes the notification, while the included array contains the full transaction details.
Key fields
| Field | Description |
|---|---|
data.attributes.address | The watched wallet that triggered this notification |
data.relationships.subscription.id | The subscription this notification belongs to |
included[].attributes.operation_type | Transaction type: send, receive, trade, execute, etc. |
included[].attributes.status | confirmed, failed, or pending |
included[].attributes.transfers | Array of token movements with direction, amount, and token info |
included[].relationships.chain.id | The chain where the transaction occurred |
Signature verification
Every webhook request includes headers for verifying authenticity. Always verify signatures in production to ensure requests originate from Zerion.| Header | Description |
|---|---|
X-Timestamp | ISO 8601 timestamp of the request |
X-Signature | Base64-encoded RSA-SHA256 signature |
X-Certificate-URL | URL to download the public certificate |
Verification steps
- Concatenate the signing string:
${X-Timestamp}\n${request_body}\n - Fetch the public certificate from the
X-Certificate-URLheader - Verify the
X-Signatureagainst the signing string using RSA-PKCS1v15 with SHA-256
Retry behavior
If your server fails to respond with a2xx status code, Zerion retries delivery up to 3 times. After 3 failed attempts, the notification is dropped permanently.
To minimize missed notifications:
- Return a
200response as quickly as possible — process the payload asynchronously - Keep your endpoint available with high uptime
- Monitor your endpoint for errors and slow responses
Rollbacks
If a transaction is removed from the canonical chain (e.g., due to a chain reorganization), Zerion sends a second webhook for the same transaction with an additionaldeleted field:
deleted is true, the transaction has been rolled back and is no longer part of the canonical chain. Use the transaction hash to match it against the original notification and remove or mark it accordingly in your system.
Delivery guarantees
Zerion webhooks are best-effort:- Not guaranteed — if all 3 delivery attempts fail, the notification is dropped
- Order is not guaranteed — notifications may arrive out of order relative to on-chain transaction ordering
- Duplicates are possible — your server should handle the same notification arriving more than once
hash and chain to deduplicate, and don’t assume notifications arrive in chronological order.
Subscription limits
| Free plan | Paid plan | |
|---|---|---|
| Wallets per subscription | 5 | Unlimited |
Testing webhooks
Use webhook.site to get a temporary callback URL for testing:- Go to webhook.site and copy your unique URL
- Create a subscription with that URL as the
callback_url - Trigger a transaction on a watched wallet
- Inspect the payload and headers on webhook.site