Integrating Relay Webhooks
Each API key can have a single webhook endpoint configured. In order to configure a webhook you’ll need the following:| Field | Description | Example |
|---|---|---|
| API key | Any requests tied to this API key will post events to the webhook endpoint | your-api-key |
| Endpoint | An HTTPS endpoint to POST to when the status of a request changes | https://my.server/receive-relay-event |
| Custom Headers | Any custom headers you wish to receive | {"Authorization": "Bearer 0x123", "X-Hookdeck-Source-Id": "src_123"} |
Webhook Events
Relay Webhooks specifically stream transaction statuses for both cross and same-chain status, though the stages differ slightly.| status | indication |
|---|---|
| waiting | waiting for origin chain deposit |
| depositing | origin deposit confirmed via /execute API, fill pending |
| pending | origin chain deposit confirmed, fill pending submission |
| submitted | fill submitted on destination chain |
| success | fill succeeded |
| failure | fill failed |
| refund | refunded |
Example Payload
referrer field echoes the value supplied on the originating quote request, or null if no referrer was provided. Use it to attribute webhook events back to the request source (campaign, partner, or integration surface) without an extra lookup.
The details, failReason, and refundFailReason fields mirror the same fields returned by GET /intents/status/v3:
| Field | Description |
|---|---|
details | Additional status context (e.g. decoded revert data on failures). null when no extra detail is available. |
failReason | Reason a fill failed. Returns "N/A" on non-failure statuses. On failure, fallback, and refund statuses, returns the recorded reason or "UNKNOWN" when no specific reason is available. See /intents/status/v3 for the enum. |
refundFailReason | Reason a refund leg failed. Defaults to "N/A" when no refund-leg failure is recorded. See /intents/status/v3 for the enum. |
status property in your endpoint.
Verification
Each webhook request includes two headers for verification:| Header | Description |
|---|---|
X-Signature-Timestamp | Unix timestamp of when the webhook was sent |
X-Signature-SHA256 | HMAC-SHA256 signature of the request |
${timestamp}.${body} using your API key as the secret, and compare it to the X-Signature-SHA256 header value.
Example Verification
Webhook Delivery & Reliability
Relay’s built-in webhook service includes up to 10 retries with exponential backoff. For most integrations, this is sufficient. For production deployments requiring guaranteed delivery, routing, fan-out, or detailed observability, we recommend using a webhook gateway like Hookdeck. A gateway sits between Relay and your server, giving you:- Guaranteed delivery with configurable retry policies
- Routing & fan-out to multiple destinations from a single source
- Event inspection & replay for debugging
- Rate limiting to match your server’s capacity
endpoint and route events to your server from there. See Hookdeck’s getting started guide for setup instructions.