Using the TypeScript SDK? Follow Trading-wallet signing
and Relay. Their testnet examples use Monad chain ID
10143.Authentication
The two authentication endpoints are public POST APIs. They do not require a JWT.Create challenge
Public endpoint that creates the exact message a secondary trading EOA must
sign.
Exchange token
Public endpoint that verifies the signed challenge and returns a
wallet-bound JWT.
personal_sign, and exchange that signature for a short-lived JWT. Challenges expire after five minutes and can be consumed only once. Use the returned expiresAt rather than assuming the same JWT lifetime on both networks.
The JWT authenticates Relay access only. It does not grant AccountCore permission, install EIP-7702 delegation, replace method-specific signatures, or revoke on-chain rights when it expires.
Enabled REST methods
Authorize account signer
Grant AccountCore permission and optionally install EIP-7702 delegation.
Execute order batch
Place readable native orders, cancel slots, or perform both atomically.
Execute packed replacement
Submit compact 32-byte maker-slot operations.
Cancel conditional order
Cancel an active trigger with a signed one-shot nonce.
Conditional actions — coming soon
Create batch trigger
Inspect the conditional native-order batch contract.
Create packed trigger
Inspect the conditional packed-replacement contract.
WebSocket
For sessions that submit many actions, connect once and send the same typed methods over a wallet-bound WebSocket.wallet field and replace requestId with a connection-local id. Open a separate connection for each wallet.
The WebSocket reference renders typed messages and network selection, but its browser viewer cannot open Relay’s authenticated connection because the upgrade requires an
Authorization header. Use a WebSocket client that supports custom upgrade headers, or the TypeScript SDK, to send live Relay messages. Do not put JWTs in a URL query string.Authorize account signer
Grant AccountCore trading permission.
Execute order batch
Place orders and cancel slots.
Execute packed replacement
Submit compact maker-slot operations.
Cancel conditional order
Cancel an active trigger.
Create batch trigger
Defined for reference but not a supported live Relay flow.
Create packed trigger
Defined for reference but not a supported live Relay flow.
id receives one correlated immediate response. Immediate wallet-intent nonces must increase within a connection. A BROADCAST response includes the sponsor nonce and transaction hash, but it is not a terminal outcome.
The current testnet Relay configuration tracks at most 64 pending transaction outcomes per client WebSocket connection. This is an outcome-delivery limit, not a limit on assigned sponsor nonces or the signer’s total unconfirmed transactions. Once all 64 slots are occupied, a further transaction may already have been broadcast when outcome tracking fails and Relay closes that WebSocket. Do not treat a closed socket as proof that the last transaction failed or was never sent. Bound outstanding submissions below this limit, drain terminal outcomes, and retain each request ID and transaction hash for recovery. The limit is deployment-configurable; clients should handle closure even when operating below it.
On reconnect, establish a new wallet-bound session and reconcile unresolved transactions by their existing identities. Keep this recovery bounded and asynchronous so receipt or log queries do not block new submissions for tens of seconds. Relay does not impose a 50-second reconnect backoff; a long pause of that kind can arise in the client connector’s reconciliation path. See Relay errors and outcomes for outcome delivery and recovery details.
Shared request rules
EveryPOST /relay request includes a lowercase UUIDv7 requestId, an exact method, the secondary EOA in wallet, a method-specific signed payload, and an optional authorization7702 object.
All integer request fields are canonical unsigned decimal strings. Addresses and byte values use exact-width 0x hexadecimal. Unknown and duplicate JSON fields are rejected. The request wallet must match the bearer JWT’s wallet claim.