All error responses from the XOXNO Relayer WebSocket API are documented here, covering WebSocket-level control errors and transaction-level processing errors.
Errors arrive as JSON messages with a status of "fail" (for control actions) or as entries in the failed array (for relay/broadcast actions).
Control action error (subscribe / unsubscribe)
Copy {
" action " : " subscribe " ,
" status " : " fail " ,
" reason " : " topic limit reached "
} Transaction action error (relay / broadcast)
Copy {
" action " : " relay " ,
" status " : " failed " ,
" requestId " : " relay-001 " ,
" hashes " : [],
" failed " : [
{ " index " : 0 , " reason " : " missing relayer " }
]
} WebSocket-Level Errors
These errors are returned in response to subscribe, unsubscribe, or other control messages.
Error Reason
Cause
Resolution
The connection already has 64 active topic subscriptions
Unsubscribe from unused topics before subscribing to new ones
More than 64 control messages were sent within a 5-second window
Implement client-side rate limiting. Batch subscriptions at connection open instead of sending individual messages in rapid succession.
invalid bech32 address in topic
The address in an address/{bech32} topic failed bech32 decode or is not a valid erd1... address
Validate addresses before subscribing
The topic string does not match any supported pattern
Check the supported topics list in the README
A single WebSocket frame exceeded the 4 MB limit
Split large batch payloads into smaller messages
Transaction Errors β Relay Action
These errors appear in failed[].reason of a relay response, each mapping to a specific validation failure in the co-signing pipeline.
Error String
Cause
Resolution
The transaction object does not contain a relayer field
Add the relayer field set to the shard-specific relayer address before the user signs
shard mismatch: sender_shard=X, relayer_shard=Y
The sender's shard (derived from their address) does not match the shard of the provided relayer address
Use getRelayerForSender(senderAddress) to select the correct relayer address. See the Transaction Relaying page.
The relayer field contains an address not recognized as one of the deployed shard relayer keys
signing capacity exceeded, try again later
The relayer's signing queue is full
Back off and retry. Use exponential backoff starting at 500ms.
Transaction Errors β Broadcast Action
These errors appear in failed[].reason of a broadcast response, returned when the network or the relayer's pre-validation rejects a transaction.
Error String
Cause
Resolution
The signature field does not match the canonical serialization of the transaction
Verify the signing serialization matches the MultiversX specification. Ensure all required fields are present before signing.
The nonce is already consumed or too far ahead of the current account nonce
Fetch the current nonce from the API before constructing the transaction
The sender account does not have enough EGLD to cover value + gasPrice * gasLimit
Check account balance before sending
The receiver field is not a valid bech32 address
Validate the receiver address client-side before submitting
gasLimit is below the minimum required for the transaction type
Use the gas estimation from the MultiversX SDK or increase gasLimit
The chainID does not match the network (e.g., "T" submitted to mainnet)
Set chainID to "1" for mainnet
Subscription Response Codes
These appear in the status field of acknowledgments for subscribe and unsubscribe actions.
The action failed. Check the reason field.
Handling Errors in Code
README β Connection limits and rate limit parameters