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. 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:

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" }
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: "…" }. 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 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.