Data API

Robinhood Chain, as an API.

Every launch, every swap, and what we know about each token and wallet, in one key.

Built for wallets, launchpads, exchanges, terminals and trading bots. A token or wallet we have not indexed answers unknown, never clean.

Get a starter key

We use the email only about your key.

Free to start. Paid plans from $149 a month: see pricing.

Quick start

curl -H "Authorization: Bearer $PUMPPILL_KEY" \
  https://api.pumppill.org/api/partner/v1/tokens/0x...

curl -H "X-API-Key: $PUMPPILL_KEY" \
  "https://api.pumppill.org/api/partner/v1/launches?limit=50"

curl -X POST -H "X-API-Key: $PUMPPILL_KEY" -H "Content-Type: application/json" \
  -d '{"addresses": ["0x...", "0x..."]}' \
  https://api.pumppill.org/api/partner/v1/tokens/batch

OpenAPI spec: /api/partner/v1/openapi.json.

Limits and usage headers

Endpoints

GET /api/partner/v1/launches?since=&limit=

New token launches on Robinhood Chain, newest first, with the developer wallet.

token, name, symbol, developer, launched_at, venue, seen_by

GET /api/partner/v1/tokens/{address}

One call for a token: market, our scan, LP state, launch buyers and the developer's record.

market (mc, liquidity, volume, price, as_of) · scan (risk, holders, top-10 share, LP burned / locked / free, flags) · launch_buyers (clustered supply, same-block groups, fresh wallets, snipers, early buyers sold out) · developer (earlier launches, how many passed $100K / $1M, the wallet that funded it and that funder's record)

POST /api/partner/v1/tokens/batch

The same token answer for up to 25 tokens in one request. Body: {"addresses": ["0x...", ...]}. Each distinct token counts as one call against your daily limit. More than 25 is refused with 400.

count, tokens[] (each the same shape as GET /tokens/{address}, in the order sent)

GET /api/partner/v1/tokens/{address}/swaps?since=&limit=

The swaps tape for one token: wallet, side, block, venue and hook, newest first.

tx, block, wallet, side, quote, eth, amount_token_raw, venue, hooks, at

GET /api/partner/v1/wallets/{address}

A wallet's record: tokens judged, wins, early entries, how following it has done, and who funded it.

record, record_list (tier, rank, follow result over 30 days), funder, swaps_7d. Routers and pools answer state: contract.

GET /api/partner/v1/signals/ignition?since=

Ignition momentum signals as they fire.

token, symbol, tier, mc_usd, liquidity_usd, volume_h1_usd, change_h1_pct, signaled_at

GET /api/partner/v1/waves?status=

Launch-name waves forming or confirmed across Robinhood Chain and Solana, with each wave's volume leader.

concept, status, first_flagged, confirmed, launches_on_flag_day, distinct_names, examples, volume_leader, biggest

GET /api/partner/v1/stocks

The real Robinhood stock tokens on Robinhood Chain, from Robinhood's own issued list. Every plan.

count, as_of, stocks[] (symbol, name, address, decimals, multiplier, status)

GET /api/partner/v1/stocks/check/{address}

Is this the real stock token? A token that copies a real one's ticker and company name, or calls itself a Robinhood token, at a different address, is a lookalike. A shared ticker alone is reported as same_ticker. Every plan.

address, is_real_stock_token, symbol, lookalike_of (symbol, real_address) or null, verdict: real | lookalike | same_ticker | same_name | not_a_stock_token

POST · GET /api/partner/v1/webhooks

Register an https endpoint for push alerts, or list yours. Builder and Pro. Body: {"url": "https://...", "events": ["launch.new", "ignition.call"]}. The signing secret is shown once.

id, url, events, active, last_ok_at, fail_count, last_error · secret (on create only)

DELETE /api/partner/v1/webhooks/{id} · POST /api/partner/v1/webhooks/{id}/test

Remove an endpoint, or queue a signed test alert to it. A test also switches a disabled endpoint back on.

deleted · queued, delivery_id, event_key

GET /api/partner/v1/usage

Your key's tier, limits and the last 7 days of calls.

tier, per_minute, per_day, max_rows, history_days, usage[]

Push alerts (webhooks)

On Builder (1 endpoint) and Pro (5 endpoints), we POST to your server when something happens, so you do not have to poll.

curl -X POST -H "X-API-Key: $PUMPPILL_KEY" -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/pumppill", "events": ["launch.new", "ignition.call"]}' \
  https://api.pumppill.org/api/partner/v1/webhooks

Check the signature on the raw body, before parsing it.

Python

import hashlib, hmac

def is_from_pumppill(raw_body: bytes, signature: str, secret: str) -> bool:
    want = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(want, signature or "")

# Flask: is_from_pumppill(request.get_data(), request.headers.get("X-PumpPill-Signature"), SECRET)

Node

const crypto = require("crypto");

function isFromPumpPill(rawBody, signature, secret) {
  const want = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  const got = Buffer.from(signature || "", "utf8");
  return got.length === want.length && crypto.timingSafeEqual(Buffer.from(want, "utf8"), got);
}

// Express: app.post("/pumppill", express.raw({ type: "application/json" }), (req, res) => {
//   if (!isFromPumpPill(req.body, req.get("X-PumpPill-Signature"), SECRET)) return res.sendStatus(401);
//   res.sendStatus(200);
// });

Pricing

One key, three plans. Upgrading keeps the same key; nothing in your code changes.

Starter

Free

  • 1,000 calls a day
  • 20 calls a minute
  • 100 rows a call
  • 1 day of history
  • Ignition calls: 1 hour late
  • Batch reads: Up to 25 tokens
  • Stock token check: Yes
  • Push alerts: No
Get a free key

Builder

$149 / month

  • 50,000 calls a day
  • 120 calls a minute
  • 500 rows a call
  • 7 days of history
  • Ignition calls: Live
  • Batch reads: Up to 25 tokens
  • Stock token check: Yes
  • Push alerts: 1 endpoint

Pro

$499 / month

  • 500,000 calls a day
  • 600 calls a minute
  • 1,000 rows a call
  • 30 days of history
  • Ignition calls: Live
  • Batch reads: Up to 25 tokens
  • Stock token check: Yes
  • Push alerts: 5 endpoints

Billed monthly through Stripe. If payment stops, the key drops back to Starter when the paid period ends.

Need more than Pro? Talk to us: [email protected]

How to read the payloads

For AI agents (MCP) · Robinhood Chain scanner · the chain, measured