数据 API
覆盖 PumpFun、PumpSwap、Bonk 与 StonkFun(Raydium LaunchLab)、Meteora DBC 与 DAMM v2、Raydium(CPMM/CLMM/AMM v4)以及 Orca Whirlpool 的实时 + 历史数据。大部分都免费且无需密钥:按代币的流、发行与迁移数据流、历史 K 线、GET /metadata 和 GET /sol-price 都不需要密钥,不用账号,不用注册。实时 K 线(subscribe_ohlcv)需要一个免费密钥,到 Telegram 群申请。Lite 套餐加上 Advanced Data Stream(高级数据流) 和 24 小时回放,Developer 再加上 Ultra Fast Shred Stream(超快分片流)。见套餐与限额。
30 秒上手
无需密钥——连上就能订阅:
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" });
既要现在也要过去?历史回放按小时归档每一个流事件,免费。
密钥
免费的流和读取不需要密钥,只有一个例外:实时 K 线(subscribe_ohlcv)在每个套餐上都需要密钥;在 Free 上就是到 Telegram 群申请的免费密钥。其他地方密钥是可选的,带上它就把限额提到你套餐的水平:K 线可跟所有代币而不是一个,历史 K 线每秒一次而不是每分钟一次,更多 socket。Advanced Data Stream(高级数据流) 和 24 小时回放 需要 Lite 或 Developer 的密钥,Ultra Fast Shred Stream(超快分片流) 需要 Developer 的密钥。各套餐的限额见套餐与限额。
有了套餐之后,在控制台拿到你的密钥,并在 Socket.IO 握手中传入:
import { io } from "socket.io-client";
const socket = io("https://sol.shrine.trade", {
auth: { api_key: "sk_…" },
});
不带密钥的连接可以使用 Free 套餐的全部内容。带了密钥的连接必须带一个有效的:未知或已停用的密钥会在握手时被拒绝。超出限额时,调用的 ack 会说明:limit_exceeded(不带密钥时 K 线只能跟一个代币)或 rate_limited 并附 retryAfterMs。
错误
所有错误都是形状相同的 JSON:
{ "error": "not_found" }
| 状态码 | error | 含义 |
|---|---|---|
| 400 | mint_or_pool_required | 缺少必需参数。 |
| 401 | unknown_key / key_disabled | 握手携带的密钥无法识别,或已被关闭。 |
| 404 | not_found | 池/mint(尚)未登记。 |
| 429 | rate_limited | 你的 IP 对同一端点每秒超过 3 次请求。等一秒再重试。 |
| 503 | unavailable | 在第一个 SOL/USD tick 之前调用 GET /sol-price(冷启动);稍后重试。 |
WebSocket 订阅错误以回调 ack 的形式返回:{ error: "…", message: "…" }。不带密钥的实时 K 线会回 api_key_required;超出 Free 限额时,K 线事件会回 limit_exceeded 或 rate_limited;你的地址下另一个 socket 已经持有的流类型会回 too_many_connections。
限制
| 值 | |
|---|---|
| 每个连接的最大并发 Socket.IO 订阅数 | 50 |
| 每个 IP 的打开流数 | 每种流类型一个——同一地址的第二个 socket 可以持有其他类型,但不能持有已被占用的那种 |
| REST | 每个 IP 每个端点每秒 3 次请求 |
OHLCV 历史 limit | 1 – 500(默认 200) |
流类型有 subscribe(价格)、subscribe_trades、subscribe_ohlcv、subscribe_new_tokens、subscribe_migrations、subscribe_sol_price 和 subscribe_stream。在一个 socket 上用同一种类型跟多个池没有问题;第二个 socket 请求你的地址已持有的类型会得到 too_many_connections。交易端点共用 REST 上限,并以 Retry-After: 1 回 rate_limited。