PumpFlare Data API
The same real-time pump.fun index that powers the PumpFlare terminal and charts, exposed as a plain REST API. Token discovery, trade streams, OHLCV candles, holder distribution, per-trader P&L — plus unsigned transaction builders for buys, sells, launches and fee claims.
Base URL
https://pumpflare.fun/api/v1All responses are JSON. CORS is open on the read endpoints, so you can call them straight from a browser.
Authentication
Create a key under Settings → Developer (wallet sign-in required, up to 5 active keys). Keys look like pf_live_… and are shown exactly once — we only store a SHA-256 hash, so a lost key must be revoked and replaced.
x-api-key: pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# or
Authorization: Bearer pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxKeys are secrets. Call the API from your backend — anything you ship to a browser or a mobile app is readable by your users. Revoke a leaked key immediately from Settings; it stops working within seconds.
Tiers & rate limits
| Tier | Per minute | Per day | For |
|---|---|---|---|
| Free | 60 | 10,000 | Hobby projects, prototypes and evaluation. |
| Pro | 300 | 200,000 | Production dashboards, bots and trading tools. |
| VIP | 1,000 | unlimited | High-frequency consumers. No daily cap. |
Every response carries the current budget. The minute window is a rolling 60 seconds; the daily quota resets at 00:00 UTC.
X-RateLimit-Tier: free
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1755820860 # unix seconds
Retry-After: 12 # on 429 onlyNew keys start on Free. Need more? Reach out and we will move your key to Pro or VIP.
Data endpoints
- GET
/api/v1/tokensLive token list — newest launches, tokens about to graduate, or migrated ones.
filter=newest|graduating|migrated · sort · limit (max 100)
- GET
/api/v1/token/{mint}Full token detail: metadata, bonding-curve progress, market cap, price, holder count, graduation state.
- GET
/api/v1/trades/{mint}Recent trades for a token, newest first. Buys and sells with SOL and token amounts.
limit (default 500, max 5000) · from · to (unix seconds)
- GET
/api/v1/ohlcv/{mint}Candles for charting, backed by a persistent candle store (1m/1h/1d kept forever).
resolution=1s|15s|30s|1m|5m|15m|1h|4h|1d (required) · from · to (unix seconds)
- GET
/api/v1/holders/{mint}Accurate holder count and top-holder distribution, cached server-side.
- GET
/api/v1/top-traders/{mint}Per-trader P&L aggregation: realized/unrealized SOL, volume, buy/sell counts, dev flag.
limit (default 20, max 100) · sort=pnl|volume|netSol
- GET
/api/v1/dev-trades/{mint}The creator wallet's own trades — the fastest way to spot a dev sell.
limit (default 200)
- POST
/api/v1/backfill/{mint}Kick off a historic trade backfill from chain (202 + job status). Poll the same path with GET.
from · to (unix seconds) — narrow the window to keep it cheap
Transaction builders
These return unsigned base64 transactions — we never see or hold a private key. Sign and submit them yourself. Wildcard CORS is deliberately off here: call them server-side with your key.
- POST
/api/v1/buyBuild an unsigned buy transaction (bonding curve or post-graduation route).
- POST
/api/v1/sellBuild an unsigned sell transaction.
- POST
/api/v1/createBuild an unsigned token-creation transaction (uploads metadata).
- POST
/api/v1/bundleBuild several buy/sell transactions in one call.
- POST
/api/v1/claim-feeBuild a creator-fee claim transaction for one mint.
- POST
/api/v1/claim-feesBuild claim transactions for every mint a creator owns.
Status endpoints
- GET
/api/v1/healthLiveness probe — RPC reachability and latency. No key needed.
- GET
/api/v1/statusService status: indexer, streams, trade store, feature flags. No key needed.
Examples
curl
# Newest launches
curl -H "x-api-key: pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://pumpflare.fun/api/v1/tokens?filter=newest&limit=20"
# 1-minute candles for the last hour
curl -H "x-api-key: pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://pumpflare.fun/api/v1/ohlcv/<MINT>?resolution=1m&from=$(($(date +%s)-3600))"
# Authorization: Bearer works too
curl -H "Authorization: Bearer pf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
"https://pumpflare.fun/api/v1/token/<MINT>"JavaScript (fetch, with 429 backoff)
const API = 'https://pumpflare.fun/api/v1';
const KEY = process.env.PUMPFLARE_API_KEY;
async function pumpflare(path, init = {}) {
const res = await fetch(API + path, {
...init,
headers: { 'x-api-key': KEY, ...(init.headers || {}) },
});
if (res.status === 429) {
// Back off for exactly as long as we're told, then retry once.
const wait = Number(res.headers.get('Retry-After') || 1);
await new Promise((r) => setTimeout(r, wait * 1000));
return pumpflare(path, init);
}
if (!res.ok) throw new Error((await res.json()).error);
console.log('remaining this minute:', res.headers.get('X-RateLimit-Remaining'));
return res.json();
}
const { tokens } = await pumpflare('/tokens?filter=graduating&limit=10');Example response — GET /tokens
{
"tokens": [
{
"mint": "8Xy...pump",
"name": "Example",
"symbol": "EXMPL",
"creator": "9aB...xyz",
"marketCap": 41230.55,
"price": 0.0000412,
"bondingCurveProgress": 78.4,
"graduated": false,
"createdAt": 1755820000
}
],
"count": 1
}Errors
Errors are JSON with a stable machine-readable code. Branch on the code, not the message.
{
"error": "An API key is required. Send it as `x-api-key: pf_live_…`.",
"code": "API_KEY_REQUIRED",
"docs": "https://pumpflare.fun/docs/api"
}| Status | Code | Meaning |
|---|---|---|
| 400 | BAD_REQUEST | Bad or missing query parameter (e.g. invalid mint, missing resolution). |
| 401 | API_KEY_REQUIRED | No key presented on an endpoint that needs one. |
| 401 | INVALID_API_KEY | Unknown, malformed or revoked key. |
| 404 | — | Unknown mint, or no data recorded for it yet. |
| 429 | RATE_LIMITED | Per-minute limit exceeded. See Retry-After. |
| 429 | DAILY_QUOTA_EXCEEDED | Daily quota exhausted. Resets at 00:00 UTC. |
| 500 | INTERNAL_ERROR | Something broke on our side. Retry with backoff. |
| 503 | KEY_VERIFICATION_UNAVAILABLE | We can't verify keys right now — your key is fine. Retry after the interval in Retry-After. |