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
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.
curl -s "https://terminal.raiden.wtf/api/ws-subscriptions" \
-H "X-API-Key: $RAIDEN_KEY"{
"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
Creates a stream and returns an opaque token you connect to over WebSocket. Limit: 3 streams per account.
| Parameter | In | Description |
|---|---|---|
name | body | Stream name. |
kinds | body | What to receive: swaps, creations, dev_score, grad, feed. |
wallet_list_id | body | Wallet list for swaps, which needs it. |
dev_list_id | body | Wallet list of devs for creations. Omit it for all new tokens. |
min_sol | body | For feed, in lamports. Default 3e9. |
Setting streams up is free; connecting uses credits (see Connect to a stream).
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}'{
"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
Updates a stream and re-resolves its lists. To turn a stream on or off without touching your other streams, just flip active.
| Parameter | In | Description |
|---|---|---|
id | path | Numeric stream ID. |
name | body | Stream name. |
kinds | body | What to receive, as in Create a stream. |
wallet_list_id | body | Wallet list for swaps. |
active | body | Turns the stream on (true) or off (false). |
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}'{ "id": 3, "token": "sub_a1b2c3…", "active": false, "kinds": ["swaps"], "wallet_list_id": "grp_5f3a…", "wallets": ["8psN…VRtf", "Cb3f…g9rE"], "devs": [] }Delete a stream
Deletes a stream.
| Parameter | In | Description |
|---|---|---|
id | path | Numeric stream ID. |
curl -s -X DELETE "https://terminal.raiden.wtf/api/ws-subscriptions/3" \
-H "X-API-Key: $RAIDEN_KEY"{ "ok": true }Connect to a stream
Opens a WebSocket connection to one of your streams. Only events matching that stream’s kinds and filters are pushed.
| Parameter | In | Description |
|---|---|---|
key | query | Your API key. You can send an X-API-Key header instead, which keeps the key out of URL logs. |
sub | query | The 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.
| Code | Meaning | What to do |
|---|---|---|
4402 | Out of credits. | Reconnect once you have credits again. |
4401 | The key was revoked or rotated. | Do not reconnect with it. |
4403 | The key or the account is suspended. | — |
4404 | The stream was turned off or deleted. | Turn it back on, then reconnect. |
1013 | Credits are temporarily unavailable. | Reconnect after a short wait. |
1001 | The server is restarting. | Reconnect. |
Refused handshakes. A refused handshake answers HTTP with the usual JSON body:
403 invalid_api_keyfor an unknown key (orapi_key_revoked,api_key_suspended,account_suspended,account_banned,account_not_ready);401 invalid_streamfor an unknown or inactive stream token;503 keys_unavailableorcredits_unavailable, withRetry-After.
wscat -c "wss://terminal.raiden.wtf/ws?key=$RAIDEN_KEY&sub=sub_a1b2c3…"{
"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"
}