Data API
Live + historical data across PumpFun, PumpSwap, Bonk and StonkFun (Raydium LaunchLab), Meteora DBC and DAMM v2, Raydium (CPMM/CLMM/AMM v4) and Orca Whirlpool. Everything is free. Every live stream and REST read needs no key at all - no account, no sign-up. The two candle events, subscribe_ohlcv and ohlcv_history, need a free key, which you get by asking in the Telegram group.
30-second start
No key needed - connect and subscribe:
import { io } from "socket.io-client";
const socket = io("https://sol.shrine.trade");
socket.on("token_update", (u) => console.log(u.pool, u.priceUSD));
socket.emit("subscribe", { mint: "Gc6r…pump" });
Need the past as well as the present? Historical replay archives every stream event by the hour, free.
Keys
Nothing on this API costs money. Only two events ask for a key, and the key is free:
subscribe_ohlcv- live 1-second candlesohlcv_history- the one-shot candle fetch
Join the Telegram group and ask for one. Every other stream, GET /metadata and GET /sol-price work without a key.
Pass the key in the Socket.IO handshake:
import { io } from "socket.io-client";
const socket = io("https://sol.shrine.trade", {
auth: { api_key: "sk_…" },
});
A connection with no key streams everything else fine; calling either candle event on it returns an api_key_required ack. A connection that does present a key must present a valid one - unknown or disabled keys are rejected at the handshake. One key can hold as many sockets as you like.
Errors
All errors are JSON with the same shape:
{ "error": "not_found" }
| Status | error | Meaning |
|---|---|---|
| 400 | mint_or_pool_required | Missing required param. |
| 401 | unknown_key / key_disabled | The handshake carried a key that is not recognized, or one that has been switched off. |
| 404 | not_found | Pool/mint isn't registered (yet). |
| 429 | rate_limited | More than 3 requests a second from your IP to one endpoint. Wait a second and retry. |
| 503 | unavailable | GET /sol-price before the first SOL/USD tick (cold start); retry shortly. |
WebSocket subscribe errors come as a callback ack: { error: "…", message: "…" }. The candle events on a keyless socket answer api_key_required; a stream type another socket from your address already holds answers too_many_connections.
Limits
| Value | |
|---|---|
| Max concurrent Socket.IO subscriptions per connection | 50 |
| Open streams per IP | one per stream type - a second socket from the same address can hold other types, not one already held |
| REST | 3 requests per second per IP per endpoint |
OHLCV history limit | 1 – 500 (default 200) |
The stream types are subscribe (price), subscribe_trades, subscribe_ohlcv, subscribe_new_tokens, subscribe_migrations, subscribe_sol_price and subscribe_stream. Following several pools on one type from one socket is fine; a second socket asking for a type your address already holds gets too_many_connections. The trade endpoints share the REST cap and answer rate_limited with Retry-After: 1.