Skip to Content
TerminalStreams (WebSocket)

WebSocket Stream Endpoints

Receive Solana swaps, token launches and dev events in realtime over WebSocket. Create custom streams that pick the events you want (swaps, token creations, dev scores, graduations, the feed), filter them with your wallet lists, then connect with your API key. Setting streams up is free; an open connection is billed per minute.

Paths are relative to https://terminal.raiden.wtf/api and every request carries your key in the X-API-Key header (see Authentication). Each call costs the credits shown next to it. The WebSocket endpoint is the exception: it is served at wss://terminal.raiden.wtf/ws.

List your streams

GET/ws-subscriptionsfree

Your custom realtime streams. Each stream picks what to receive (kinds); its wallet and dev filters are sourced from your wallet lists (see Wallet groups), never typed inline.

Request
curl -s "https://terminal.raiden.wtf/api/ws-subscriptions" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "data": [ { "id": 2, "token": "sub_e63097916cf0…", "name": "whales", "active": true, "kinds": ["swaps", "feed"], "wallet_list_id": "grp_5f3a…", "dev_list_id": "", "wallets": ["8psN…VRtf", "Cb3f…g9rE"], "devs": [], "min_sol": "3000000000", "created_at": "2026-07-13T09:00:00Z", "updated_at": "2026-07-13T09:00:00Z" } ] }

Create a stream

POST/ws-subscriptionsfree

Creates a stream and returns an opaque token you connect to over WebSocket. Limit: 3 streams per account.

ParameterInDescription
namebodyStream name.
kindsbodyWhat to receive: swaps, creations, dev_score, grad, feed.
wallet_list_idbodyWallet list for swaps, which needs it.
dev_list_idbodyWallet list of devs for creations. Omit it for all new tokens.
min_solbodyFor feed, in lamports. Default 3e9.

Setting streams up is free; connecting uses credits (see Connect to a stream).

Request
curl -s -X POST "https://terminal.raiden.wtf/api/ws-subscriptions" \ -H "X-API-Key: $RAIDEN_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"whales","kinds":["swaps","feed"],"wallet_list_id":"grp_5f3a…","min_sol":3000000000}'
Response
{ "id": 3, "token": "sub_a1b2c3…", "name": "whales", "active": true, "kinds": ["swaps", "feed"], "wallet_list_id": "grp_5f3a…", "dev_list_id": "", "wallets": ["8psN…VRtf", "Cb3f…g9rE"], "devs": [], "min_sol": "3000000000", "created_at": "2026-07-13T09:00:00Z", "updated_at": "2026-07-13T09:00:00Z" }

Update a stream

PUT/ws-subscriptions/{id}free

Updates a stream and re-resolves its lists. To turn a stream on or off without touching your other streams, just flip active.

ParameterInDescription
idpathNumeric stream ID.
namebodyStream name.
kindsbodyWhat to receive, as in Create a stream.
wallet_list_idbodyWallet list for swaps.
activebodyTurns the stream on (true) or off (false).
Request
curl -s -X PUT "https://terminal.raiden.wtf/api/ws-subscriptions/3" \ -H "X-API-Key: $RAIDEN_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"whales","kinds":["swaps"],"wallet_list_id":"grp_5f3a…","active":false}'
Response
{ "id": 3, "token": "sub_a1b2c3…", "active": false, "kinds": ["swaps"], "wallet_list_id": "grp_5f3a…", "wallets": ["8psN…VRtf", "Cb3f…g9rE"], "devs": [] }

Delete a stream

DELETE/ws-subscriptions/{id}free

Deletes a stream.

ParameterInDescription
idpathNumeric stream ID.
Request
curl -s -X DELETE "https://terminal.raiden.wtf/api/ws-subscriptions/3" \ -H "X-API-Key: $RAIDEN_KEY"
Response
{ "ok": true }

Connect to a stream

WS/ws?key={API_KEY}&sub={token}1 credit

Opens a WebSocket connection to one of your streams. Only events matching that stream’s kinds and filters are pushed.

ParameterInDescription
keyqueryYour API key. You can send an X-API-Key header instead, which keeps the key out of URL logs.
subqueryThe stream’s opaque token, not its numeric id. Disabled streams (active=false) refuse the connection.

Events. Each pushed event carries a type: swap, token, graduate or dev_score. A swap event has the same fields as a swap row of the REST endpoints, as JSON numbers instead of strings; fields that are zero or empty are left out.

Billing. Each open connection costs 1 credit per started minute from the key’s pool (general or dedicated). 1 credit is reserved before the upgrade, then 1 more at the start of every following minute. Without credits, the handshake answers HTTP 402 with the usual JSON body. The website’s own live feed is free.

Connection limits.

  • Per account: at most 2 × your stream limit connections open at once (6 with the default 3 streams), else 429 ws_connection_limit.
  • Per IP address: at most 20, else 429 too_many_connections.
  • Neither sends Retry-After, so close a connection before opening another.

Close codes.

CodeMeaningWhat to do
4402Out of credits.Reconnect once you have credits again.
4401The key was revoked or rotated.Do not reconnect with it.
4403The key or the account is suspended.—
4404The stream was turned off or deleted.Turn it back on, then reconnect.
1013Credits are temporarily unavailable.Reconnect after a short wait.
1001The server is restarting.Reconnect.

Refused handshakes. A refused handshake answers HTTP with the usual JSON body:

  • 403 invalid_api_key for an unknown key (or api_key_revoked, api_key_suspended, account_suspended, account_banned, account_not_ready);
  • 401 invalid_stream for an unknown or inactive stream token;
  • 503 keys_unavailable or credits_unavailable, with Retry-After.
Request
wscat -c "wss://terminal.raiden.wtf/ws?key=$RAIDEN_KEY&sub=sub_a1b2c3…"
Response
{ "topic": "sub:3", "type": "swap", "time": "2026-07-13T09:01:22.400Z", "mint": "…pump", "trader": "8psN…VRtf", "is_buy": true, "sol_amount": 4200000000, "token_amount": 191833, "price": "0.0000041", "sig": "…", "ix_index": 0, "slot": 351902144, "block_index": 214, "tip": 100000, "tip_wallet": "96gY…Mq5c", "fee": 39900000, "creator_fee": 12600000, "creator": "C9Ua…So2X", "v_sol_reserves": 41150000000, "v_token_reserves": 782265000000000, "real_sol_reserves": 11150000000, "real_token_reserves": 502365000000000, "fee_payer": "8psN…VRtf", "cu_price": 1500000, "cu_limit": 200000, "priority_fee": 300000, "router": "GMgnVFR8Jb39LoXsEVzb3DvBy3ywCmdmJquHUy1Lrkqb", "router_name": "GMGN" }
Last updated on