Skip to main content
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.

Error response format

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.