接入指南

pumpapi 信号流

pumpapi 的 WebSocket 实时推送 pump.fun 信号与行情——埋伏、毕业、巨鲸动向、成交与 K 线——检测完成后毫秒级送达。 没有匿名或免费层 ——每个连接都必须持有由有效付费订阅支撑的 API key。

接入点 wss://pumpws.bubudev.win/connection/websocket · 鉴权 必需——在 connect 请求中传入 data.apikey · 协议 Centrifugo (WebSocket, RFC 6455)

快速上手

不到 10 行代码即可连接并收到事件 (npm i centrifuge):

JavaScript
import { Centrifuge } from "centrifuge";

const client = new Centrifuge("wss://pumpws.bubudev.win/connection/websocket", {
  data: { apikey: "<YOUR_PUMP_API_KEY>" }, // pump_… from the dashboard
});

client.connect();
client.subscribe("signals", ({ data }) => {
  console.log(data.kind, data.mint, data.payload);
});

不想用 SDK?直接说原始协议——例如用 websocat:

原始 WebSocket JSON
websocat "wss://pumpws.bubudev.win/connection/websocket?format=json"
# then send (one JSON frame per line):
{"id":1,"connect":{"data":{"apikey":"pump_…"}}}
{"id":2,"subscribe":{"channel":"signals"}}

鉴权

  1. 打开控制台,登录、选套餐并按支付——你会拿到一个一次性 SOL 收款地址(24 小时有效)。
  2. 按精确金额支付(0.5 / 1.5 / 4 SOL)。监控程序约 30 秒内完成链上确认并签发你的 key。
  3. key 会出现在控制台的 Centrifugo API key 一栏——连接时作为 data.apikey 传入(参考上面的代码)。
校验在服务端完成:匿名连接一律拒绝,每次订阅都会复查你的订阅状态。周付 key 只能拿到 signals——行情需要月付及以上。订阅过期(超过 24 小时宽限)后,服务端会自动断开在线会话。请像对待密码一样对待这个 key;金额不对的付款只会被记录,不会入账。续费和兑换券都不会更换 key——如果 key 泄露,在控制台使用「轮换 key」:旧 key 立即失效、在线会话被断开,而你签发过的每个 key 都会保留在 key 历史里。

通道

通道内容档位
signals全部信号:埋伏、毕业、迁移、巨鲸动向、里程碑任意档位
signals:mint:<mint>单个代币 mint(base58)的信号任意档位
marketdata成交、迁移、实时/收盘 K 线月付及以上
marketdata:mint:<mint>单个代币的行情数据月付及以上

任意档位 = 周付、月付或季付——没有订阅就没有访问。 订阅整条消防栓,或用 :mint:<mint> 通道只接收单个代币。

消息信封

每条发布都是一个带版本号的 JSON 信封。 payload 原样携带信号元数据——每种 kind 的完整示例见下。

信封 v1
{
  "v": 1,                    // envelope schema version
  "id": "0f5c9a3e-…",        // unique id — dedupe / trace across consumers
  "kind": "arm",             // signal type — switch on this
  "ts": 1756915200000,       // event time (ms since epoch)
  "wallTs": 1756915200123,   // server receive time (ms)
  "mint": "5hBz…",           // token mint address (when known)
  "payload": { … }           // full signal metadata — see examples below
}

Payload · signals

signals 通道发布以下 9 种类型。 埋伏、毕业、巨鲸动向与里程碑——检测消防栓本身,所有档位可订。 没有值的字段会被省略——代码要能容忍 undefined

arm

该代币通过了入场过滤集合(成交量、开发者信誉、路径标签)。核心的「盯住它」信号——在代币仍处于绑定曲线时发出。

事件示例
{
  "v": 1,                    // envelope schema version
  "id": "0f5c9a3e-8f0c-4a2d-9e1b-7c6d5a4b3c2d",   // unique id — dedupe / trace
  "kind": "arm",             // signal type — switch on this
  "ts": 1756915200000,       // event time (ms since epoch)
  "wallTs": 1756915200123,   // server receive time (ms)
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW", // token mint (base58)
  "payload": {
    "kind": "arm",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",        // token ticker
    "mcapUsd": 42000         // market cap in USD when armed (entry mcap if known)
  }
}

arm_pre_mig

与 arm 相同的过滤判定,但代币是在临近/正在迁移时命中的。之所以单列一条通道,是因为入场市值在那里的行为不同。

事件示例
{
  "v": 1,
  "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
  "kind": "arm_pre_mig",
  "ts": 1756915200000,
  "wallTs": 1756915200123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "arm_pre_mig",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "PREX",
    "mcapUsd": 58000         // live market cap in USD at arming time
  }
}

pump

代币毕业(走完绑定曲线)或命中 pump 入场策略。经典的 🚀 提醒。

事件示例
{
  "v": 1,
  "id": "2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
  "kind": "pump",
  "ts": 1756915260000,
  "wallTs": 1756915260123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "pump",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 69000,        // market cap in USD at pump time
    "uri": "https://ipfs.io/ipfs/QmTokenMetadata7xK9" // token metadata JSON (image, socials)
  }
}

migrate

原始绑定曲线迁移事件(曲线 → AMM),不附带 pump 入场判定。在主题优先级上低于 pump。

事件示例
{
  "v": 1,
  "id": "3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f",
  "kind": "migrate",
  "ts": 1756915230000,
  "wallTs": 1756915230123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "migrate",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU"
  }
}

milestone

市值突破了入场市值的整数倍(×2、×5、×10、×20……)。一次追涨爆发会合并为一条消息,取达到的最高档。

事件示例
{
  "v": 1,
  "id": "4d5e6f7a-8b9c-0d1e-2f3a-4b5c6d7e8f9a",
  "kind": "milestone",
  "ts": 1756915500000,
  "wallTs": 1756915500123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "milestone",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 340000,       // market cap in USD when the milestone fired
    "level": 8               // multiple reached, ×100 scale → 8 = ×8 from entry
  }
}

whale

被跟踪的钱包在某个 mint 上做了大额单笔或累计动作(买入或卖出),由成交消防栓上的巨鲸检测器捕捉。

事件示例
{
  "v": 1,
  "id": "5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b",
  "kind": "whale",
  "ts": 1756915600000,
  "wallTs": 1756915600123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "whale",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 120000,       // market cap in USD at trade time
    "uri": "https://ipfs.io/ipfs/QmTokenMetadata7xK9"
  }
}

whale_armed

已经发过 arm 的代币上出现巨鲸动向——最强的延续通道(巨鲸行为 + 过滤器共振)。

事件示例
{
  "v": 1,
  "id": "6f7a8b9c-0d1e-2f3a-4b5c-6d7e8f9a0b1c",
  "kind": "whale_armed",
  "ts": 1756915610000,
  "wallTs": 1756915610123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "whale_armed",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 125000,       // market cap in USD at trade time
    "uri": "https://ipfs.io/ipfs/QmTokenMetadata7xK9"
  }
}

bc_mid

被关注的代币越过绑定曲线中点(约 50% 进度)且伴随真实成交量——毕业前的动能标记。

事件示例
{
  "v": 1,
  "id": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
  "kind": "bc_mid",
  "ts": 1756915300000,
  "wallTs": 1756915300123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "bc_mid",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 24000,        // market cap in USD at trigger time
    "uri": "https://ipfs.io/ipfs/QmTokenMetadata7xK9"
  }
}

leg2

已经发出 🚀 信号的代币从峰值下跌 ≥80% 后筑起窄幅底部,随后回升 +15% 且大钱包资金净流入——「二段」延续信号。

事件示例
{
  "v": 1,
  "id": "8b9c0d1e-2f3a-4b5c-6d7e-8f9a0b1c2d3e",
  "kind": "leg2",
  "ts": 1756922400000,
  "wallTs": 1756922400123,
  "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
  "payload": {
    "kind": "leg2",
    "mint": "5hBzKpR3vNqXw7TjLmYc8UdAeBsFgHjKlMnOpQrStUvW",
    "symbol": "BUBU",
    "mcapUsd": 18400,       // market cap in USD at reclaim time
    "uri": "https://ipfs.io/ipfs/QmTokenMetadata7xK9"
  }
}

订阅生命周期

  • 开通 付款链上确认(每 30 秒轮询)后自动生效。
  • 宽限 过期后仍可继续接收 24 小时,等待续费到账。
  • 续费 新档位从当前到期日顺延;一天不浪费。
  • 限速 每个 IP 每秒最多 10 个新连接;复用一条连接、订阅多个通道即可。

常见问题

打错了金额?
付款必须与档位价格在 0.001 SOL 误差内一致。金额不对只记录、不入账——重新生成地址并按精确金额支付。
连接被拒绝,报 4004
订阅已过期且超过 24 小时宽限期。到控制台续费即可——同一个 key 会重新可用。
可以在客户端按类型过滤吗?
可以——按 envelope.kind分支处理即可。未来可能新增类型,遇到不认识的 value 请忽略而不是抛错。
测试用的 devnet SOL?
faucet.solana.com (选择 Devnet)或用 solana airdrop 5 <WALLET> --url devnet.