Skip to main content
The transaction relay (https://send.archer.exchange) lands the signed transactions you send it. This feed pushes each transaction’s status as it changes, so you don’t have to poll GET /v1/send/{signature}.
  • one per-wallet channel, tx_status
  • an update when the relay accepts a transaction, and again when it lands, fails or expires
  • the same protocol as the market-data stream: op control frames, ch data frames
Base URL (production): wss://send.archer.exchange Upgrade path: GET /v1/ws Wire format: JSON
No authentication is required. You don’t need an API key to connect or to subscribe. Sending transactions to the relay still needs one.

Quick start

1. Connect

2. Subscribe to a wallet

Subscribe with the wallet that signs your transactions, usually your maker or fee-payer wallet.
The server confirms:
It then sends the current status of every pending transaction for that wallet, so you don’t miss one sent just before you subscribed.

3. Send transactions as usual

4. Read updates

data is exactly the body of GET /v1/send/{signature}. Code that already reads that response can read these frames too.

Which transactions you receive

You receive every transaction sent through the relay that lists your wallet among its accounts. That includes:
  • a signer, including the fee payer,
  • any account the transaction names directly.
Accounts that a transaction loads only through an address lookup table don’t match. Subscribe to a wallet that signs, and you’ll always match. Transactions sent to Solana some other way never appear here. Neither do transactions the relay rejects before accepting them, such as a failed preflight. That rejection is already in the POST /v1/send response.

Lifecycle

Each transaction produces these updates, in order: A failed transaction can get one more failed update a second or two later. The relay re-reads the failure from the transaction’s on-chain logs, which name the program that actually raised the error. That matters when your transaction calls Archer through another program. Use the latest update you’ve received for each signature.

reason

reason is null unless the status is failed or expired. Archer, System, Token, Token-2022 and Associated Token Account error codes are named. Any other program’s code stays Custom, with the raw code.

Unsubscribe

A successful unsubscribe sends no reply, as on the market-data stream.

Heartbeat

Send a ping about every 30 seconds:
The server echoes it:
The server also sends WebSocket ping frames every 30 seconds, and standard clients answer them automatically. It closes a connection after about 90–120 seconds without any frame from you.

Errors

Errors are advisory op frames and don’t close the connection:
If your IP, or the server as a whole, has too many open connections, the upgrade itself is refused with HTTP 429 and {"error":"TOO_MANY_CONNECTIONS"}.

Limits

Examples

Terminal using wscat

Then paste:
Send a transaction from that wallet through the relay. Its pending update arrives right away, and the next update when it lands, fails or expires.

NodeJS

After a reconnect, the subscribe replays transactions that are still pending. A transaction that finished while you were disconnected isn’t replayed. If you were waiting on one, read it once with GET /v1/send/{signature}.
Privacy: anyone can subscribe to any wallet. Updates carry only what the chain will show (signature, status, slot, error) and the relay’s own send state, never a transaction’s contents. Treat the feed as public, like the market-data stream.