Get our runner calls — in Telegram or over the API.
Bonding Terminal flags graduating tokens on pump.fun and stonk.fun, plus Pons on Robinhood Chain — every call logged with entry, score, and peak. Solana calls share GET /v1/calls (branch on source); Pons ships on GET /v1/pons/calls. Join Telegram to trade them, or license the feed over REST + HMAC-signed webhooks.
Telegram plans in SOL (Bonding Terminal) + ETH (Pons) · API billed in SOL · Cancel anytime.
Sub-second calls
The same signal our channel + X post — graduations AND smart-money clusters, pushed the instant they fire, before they trend.
Rich, honest payloads
Entry mcap, curve %, score, tier, source (pump / stonkfun / gmgn), StonkFun pair (quote stock ticker + mint), model odds, smart-money inflow, named KOLs, risk, momentum, peak multiple + launchpad deep links.
Three products, one key
Solana firehose covers pump.fun + stonk.fun (?source=). Pons Robinhood kinds ship on /v1/pons/calls. Filter in your app — we don't hide coverage.
Pricing
Two ways in: join Telegram (pump.fun + stonk.fun, or Pons) and trade the calls yourself, or license the API (/v1/calls + /v1/pons/calls) and build on them. Terminals and high-volume integrations are set up directly with us.
Trade the calls yourself — Bonding Terminal covers pump.fun + stonk.fun (SOL), Pons covers Robinhood Chain (ETH). API partners also get GET /v1/calls + /v1/pons/calls.
Bonding Terminal — pump.fun + stonk.fun
Solana channel · pump.fun + stonk.fun · billed in SOL via OnlySubs
Pons — Robinhood Chain
Pons graduation alerts · billed in ETH via OnlySubs
- AI-powered graduation signals on pump.fun + stonk.fun
- Pons Robinhood Chain alerts on the dedicated channel
- Bonding-curve momentum + volume/buy-pressure alerts
- Smart-money activity + migration odds scoring
- Sniper / bundle / insider / top-holder risk filters
- Instant channel access on payment · cancel anytime
Bonding Terminal Telegram plans are billed in SOL; Pons plans in ETH. API plans are USD reference prices, charged in SOL at checkout; a lapsed key returns HTTP 402 until renewed. By subscribing or using the API you agree to our .
Quickstart
Authenticate with Authorization: Bearer <key> (or x-api-key). Base URL https://pumpfunbot.org/api/v1.
1 · Pull calls (REST)
Poll with since = the last next_cursor to stream new calls without gaps or duplicates.
# Solana firehose — pump.fun + stonk.fun + GMGN (branch on data.source)
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/calls?limit=25"
# stonk.fun only
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/calls?source=stonkfun&limit=25"
# pump.fun only
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/calls?source=pump&limit=25"
# Incremental sync — poll with the cursor from the previous response
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/calls?since=84213&limit=100"
# Smart-money clusters only (early = 4+ wallets, full = 8+ wallets)
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/calls?kind=cluster_early&limit=25"
# Pons / Robinhood Chain feed (products∋pons)
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/pons/calls?limit=25"
# Pons power-plays only
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/pons/calls?kind=fast_fill&limit=25"
# Live "running now" Solana ATH leaderboard
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/runners?min_peak_mult=2&verified=1"
# Trending · still printing X (new rungs in last 6h — banners / trending tabs)
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/trending?limit=12&window_hours=6"
# Pons trending board
curl -H "Authorization: Bearer $BT_API_KEY" \
"https://pumpfunbot.org/api/v1/pons/trending?limit=12"2 · Receive pushes (Webhook)
We POST each call to your URL and sign the body. Verify the signature, then ack with any 2xx. Non-2xx (or a timeout) triggers automatic retries.
// Verify the HMAC signature on every webhook POST (Node.js)
import crypto from "node:crypto";
app.post("/bonding-terminal/webhook", (req, res) => {
const sig = req.header("X-PFB-Signature"); // "sha256=<hex>"
const body = req.rawBody; // the EXACT bytes received
const expected =
"sha256=" +
crypto.createHmac("sha256", process.env.BT_WEBHOOK_SECRET)
.update(body)
.digest("hex");
if (!sig || !crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
return res.status(401).end(); // reject forgeries
}
// Solana: call.new | call.graduated | call.milestone | call.peak
// Pons: pons.call.new | pons.call.milestone | …
// data.kind + data.source (pump | gmgn | stonkfun) for Solana routing
const { event, data } = JSON.parse(body);
if (String(event).startsWith("pons.")) {
handlePonsCall(event, data);
} else if (event === "call.new" && data.kind.startsWith("cluster")) {
handleSmartMoneyCluster(data);
} else {
handleCall(event, data); // branch on data.source too
}
res.status(200).end(); // 2xx = delivered (no retry)
});Response shape (v1)
Stable, versioned payload — we add fields, never rename or remove them without a version bump. Every Solana call carries kind and source (pump / stonkfun / gmgn) so you can route each product.
{
"tier": "realtime",
"delay_seconds": 0,
"count": 1,
"next_cursor": 84213,
"data": [
{
"id": 84213,
"kind": "graduation",
"source": "pump",
"mint": "6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump",
"symbol": "ANSEM",
"name": "ansem",
"called_at": "2026-07-14T18:22:41.918Z",
"entry_mcap_usd": 12174,
"curve_pct": 71.4,
"score": 92,
"tier": "ELITE",
"high_conviction": true,
"model": { "p_graduate": 0.81, "run_5x": 0.34, "expected_time_min": 26, "risk": "low" },
"smart_money": {
"buys": 5,
"sol_inflow": 41.2,
"kols": [
{ "name": "Ansem", "twitter": "blknoiz06" },
{ "name": "Cupsey", "twitter": null }
]
},
"risk": { "top10_pct": 18.2, "dev_hold_pct": 0, "sniper_pct": 4.1, "bundle_pct": 2.3, "st_score": 2 },
"momentum": { "makers": 61, "vol_5m_usd": 38400, "buy_sell_ratio": 2.41 },
"peak_mult": 35.0,
"peak_mcap_usd": 426192,
"graduated": true,
"seconds_to_grad": 1580,
"chart_url": "https://dexscreener.com/solana/6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump",
"links": {
"chart": "https://dexscreener.com/solana/6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump",
"pump": "https://pump.fun/coin/6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump",
"launchpad": "https://pump.fun/coin/6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump",
"solscan": "https://solscan.io/token/6MPYewsYPK3L1ak68Gpc9ajuRjRRsGpnVd4mPTzWpump"
},
"attribution": "Called by @PumpbondingBot"
}
]
}stonk.fun call (webhook snippet)
Same Solana envelope as pump — source: "stonkfun", links.launchpad points at stonk.fun, and pair carries the underlying stock (e.g. AAPL).
{
"event": "call.new",
"data": {
"id": 91002,
"kind": "graduation",
"source": "stonkfun",
"mint": "…",
"symbol": "GPRO",
"pair": {
"quote_symbol": "AAPL",
"quote_mint": "…",
"quote_name": "Apple Inc.",
"quote_category": "stock",
"quote_category_label": "Stock",
"quote_logo_url": "https://www.stonkfun.xyz/…"
},
"links": {
"chart": "https://dexscreener.com/solana/…",
"launchpad": "https://www.stonkfun.xyz/token/…",
"pump": "https://www.stonkfun.xyz/token/…",
"solscan": "https://solscan.io/token/…"
}
}
}Smart-money cluster (webhook example)
Clusters fire as call.new with a cluster_early (4+ distinct smart wallets) or cluster_full (8+) kind. Same envelope as a graduation call — branch on data.kind.
{
"event": "call.new",
"data": {
"id": 84980,
"kind": "cluster_early", // 4+ distinct smart wallets (cluster_full = 8+)
"source": "gmgn",
"mint": "9nbZeozHVfdmrqJJ3DEqiPsXhVvmyaq2gpDp4MqFpump",
"symbol": "BULLMAN",
"called_at": "2026-07-15T17:03:11.402Z",
"entry_mcap_usd": 28900,
"curve_pct": 63.2,
"score": 71,
"tier": "WATCH",
"high_conviction": false,
"smart_money": {
"buys": 4,
"sol_inflow": 22.8,
"kols": [ { "name": "Cupsey", "twitter": null } ]
},
"risk": { "top10_pct": 21.5, "dev_hold_pct": 0, "sniper_pct": 6.0, "bundle_pct": 3.1, "st_score": 3 },
"momentum": { "makers": 44, "vol_5m_usd": 19700, "buy_sell_ratio": 1.86 },
"links": { "chart": "…", "pump": "…", "launchpad": "…", "solscan": "…" },
"attribution": "Called by @PumpbondingBot"
}
}Pons / Robinhood Chain (REST)
Requires products∋pons. Kinds: launch, mid_band, near_grad, fast_fill, graduated, smart_buy, smart_cluster.
{
"product": "pons",
"chain": "robinhood",
"count": 1,
"next_cursor": 1204,
"data": [
{
"id": 1204,
"chain": "robinhood",
"kind": "near_grad",
"token": "0x…",
"symbol": "EXAMPLE",
"called_at": "2026-09-08T13:00:00.000Z",
"progress": 0.82,
"entry_mcap_usd": 18400,
"links": {
"chart": "https://dexscreener.com/robinhood/…",
"launchpad": "https://www.ponsfamily.com/launchpad/0x…",
"explorer": "https://robinhoodchain.blockscout.com/token/0x…"
}
}
]
}Filtering & recommended presets
Your key ships the full firehose — every graduation and every smart-money cluster, at min_score = 0. That's deliberate: you get maximum coverage and decide what to surface, instead of us hiding calls you might have wanted. Filter with query params (REST) or branch on the fields (webhook).
Firehose
default · recommended(no filter)Everything we fire across pump.fun + stonk.fun + clusters. Best for indexers and terminals that curate on their own UI. Use source, score, tier, and high_conviction in your app.
stonk.fun only
product split?source=stonkfunSolana stock-paired calls only. Each row includes pair.quote_symbol (AAPL, etc.). Combine with ?source=pump for a dual board, or pull both and split in your UI. For a live "still printing X" banner use GET /v1/trending?source=stonkfun.
Conservative
highest conviction?high_conviction=trueOnly the back-tested combo (low entry cap + 70-85% curve + uncrowded smart money) that out-performs the average call. Lowest volume, highest hit-rate.
Why we default to min_score = 0
- Coverage beats curation for data. A suppressed call is optionality we took from you. Some of the biggest runners start as lower-scored early clusters — you can always filter up, but you can't recover a call we never sent.
- The score is a field, not a verdict. We attach
score,tier,high_conviction, smart-money, KOL, risk, and momentum — so your model can weight them however you want. - Clusters score differently than graduations. Early smart-money clusters intentionally fire below the graduation bar; a hard score gate would hide exactly the signal most terminals license us for.
- You can always tighten. Set
source,min_score,high_conviction,min_peak_mult,kind, or the mcap/curve bands per request — no key change needed.
Filter reference
| Param | What it does |
|---|---|
source | pump | gmgn | stonkfun — Solana launchpad provenance (omit = all). |
kind | graduation | cluster_early | cluster_full — restrict to one Solana call type. |
min_score | 0-100 quality floor (default 0 = everything you fire). |
high_conviction | true = only the back-tested combo profile. |
min_peak_mult | Proven-runner floor for /runners + post-entry events. |
min_entry_mcap / max_entry_mcap | Entry market-cap band (USD). |
max_curve_pct | Skip late entries past a curve %. |
min_smart / max_smart | Smart-money wallet-count band. |
graduated | true = only tokens that actually bonded. |
window_hours | Rolling lookback window. |
since / limit | Cursor sync + page size (1-200). |
verified | on /runners: attach realized trader outcomes (still-holding vs sold). |
/v1/pons/calls?kind= | launch | mid_band | near_grad | fast_fill | graduated | smart_buy | smart_cluster. |
Ready to wire it up?
Tell us your terminal, expected volume, and latency needs. We'll issue a key, set your webhook, and get you live the same day.


