Skip to main content

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. Most of it is free and keyless: the per-token streams, the launch and migration feeds, candle history, GET /metadata and GET /sol-price need no key, no account and no sign-up. Live candles (subscribe_ohlcv) take a free key, which you ask for in the Telegram group. The Lite plan adds the Advanced Data Stream and the 24-hour replay, Developer the Ultra Fast Shred Stream. See Plans and limits.

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​

The free streams and reads need no key, with one exception: live candles (subscribe_ohlcv) need a key on every plan; on Free that is a free key you ask for in the Telegram group. Elsewhere a key is optional and raises the limits to your plan's: candles for every token instead of one, history every second instead of once a minute, more sockets. The Advanced Data Stream and the 24-hour replay need a key from Lite or Developer, Ultra Fast Shred Stream one from Developer. The limits per plan are on Plans and limits.

Get your key on the dashboard once you have a plan, and pass it 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 gets everything on the Free plan. A connection that does present a key must present a valid one: unknown or disabled keys are rejected at the handshake. Over a limit, the call's ack says so: limit_exceeded (one token of candles without a key) or rate_limited with retryAfterMs.

Errors​

All errors are JSON with the same shape:

{ "error": "not_found" }
StatuserrorMeaning
400mint_or_pool_requiredMissing required param.
401unknown_key / key_disabledThe handshake carried a key that is not recognized, or one that has been switched off.
404not_foundPool/mint isn't registered (yet).
429rate_limitedMore than 3 requests a second from your IP to one endpoint. Wait a second and retry.
503unavailableGET /sol-price before the first SOL/USD tick (cold start); retry shortly.

WebSocket subscribe errors come as a callback ack: { error: "…", message: "…" }. Live candles without a key answer api_key_required; past a Free limit, the candle events answer limit_exceeded or rate_limited; a stream type another socket from your address already holds answers too_many_connections.

Limits​

Value
Max concurrent Socket.IO subscriptions per connection50
Open streams per IPone per stream type - a second socket from the same address can hold other types, not one already held
REST3 requests per second per IP per endpoint
OHLCV history limit1 – 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.