Use this reference to diagnose and handle Relayer errors. Three categories exist: WebSocket control errors (subscribe/unsubscribe), transaction relay errors (gasless V3), and transaction broadcast errors.
The Relayer returns errors as JSON messages. Control action errors use "fail" status. Transaction action errors include a failed array with per-transaction details.
Control action error (subscribe / unsubscribe)
Transaction action error (relay / broadcast)
WebSocket-level errors
The Relayer returns these errors in response to subscribe, unsubscribe, or malformed control messages.
A rate limit exceeded error closes the connection. Reconnect with exponential backoff and reduce your control message frequency.
Transaction relay errors
These errors appear in failed[].reason of a relay response. Each corresponds to a specific validation failure in the co-signing pipeline.
Transaction broadcast errors
These errors appear in failed[].reason of a broadcast response. The network or the Relayer’s pre-validation returns them when rejecting a transaction.
Subscription response codes
These appear in the status field of acknowledgments for subscribe and unsubscribe actions.
Handling errors in code
Operational checks
- Check
status and failed in every response. Assume nothing succeeded until confirmed.
- Correlate with
requestId. Include a unique requestId in every relay and broadcast action so you can match responses to requests.
- Validate before sending. Check bech32 addresses, nonces, and shard assignment client-side to avoid round-trip errors.
- Implement exponential backoff. For
signing capacity exceeded and rate limit errors, start at 500 ms and cap at 30 seconds.
- Log error reasons. The
reason strings are stable and machine-parseable. Use them for automated error handling.