Documentation

We provide hourly parquet files for pump_fun (bonding curve) and pump_amm (graduated AMM).

1. Get your API key

Connect your wallet on the account page and generate an API key. Rate limit is 30 requests per minute. For questions or issues, reach out on Telegram.

2. Check available dates

Query /range?exchange=<exchange_name> with your API key to see the available date range and file count. Exchange must be pump_fun or pump_amm.

GET https://api.pumpfundata.com/range?exchange=pump_fun
X-API-Key: pfd_your_key_here
{ "exchange": "pump_fun", "start": "2026-02-08", "end": "2026-05-09", "files": 2158 }

3. Download data

Call /download?exchange=<exchange_name>&date=YYYY-MM-DD&hour=HH to stream the parquet file directly. Each file costs 1 credit.

import requests
API_KEY = "pfd_your_key_here"
BASE = "https://api.pumpfundata.com"
# Check available date range and file count
range_resp = requests.get(f"{BASE}/range", params={"exchange": "pump_fun"}, headers={"X-API-Key": API_KEY})
print(range_resp.json()) # {"exchange": "pump_fun", "start": "...", "end": "...", "files": ...}
# Download a single hour
resp = requests.get(f"{BASE}/download", params={
"exchange": "pump_fun",
"date": "2026-04-10",
"hour": "12"
}, headers={"X-API-Key": API_KEY})
with open("pump_fun_2026-04-10_12.parquet", "wb") as f:
f.write(resp.content)
# Batch download: loop over hours
for hour in range(24):
resp = requests.get(f"{BASE}/download", params={
"exchange": "pump_fun",
"date": "2026-04-10",
"hour": str(hour)
}, headers={"X-API-Key": API_KEY})
if resp.status_code == 200:
with open(f"pump_fun_2026-04-10_{hour:02d}.parquet", "wb") as f:
f.write(resp.content)
print(f"Downloaded hour {hour}")

4. Schema reference

FieldTypeEventsDescription
event_typestringallswap, create, bonding_complete (pump_fun), liquidity (pump_amm)
signaturestringallTransaction signature
slot_numberint64allSolana slot
timestampdoubleallUnix timestamp
token_mintstringallToken mint address
token_creatorstringallToken creator wallet
can_be_frozenboolallFreeze authority enabled
is_cashback_coinboolallCashback coin flag
actionstringswap, liquiditybuy, sell, deposit, or withdraw
user_walletstringswap, liquidity, bonding_completeTrader wallet
token_amountuint64swap, liquidityTokens traded
lamports_amountuint64swap, liquiditySOL traded (lamports)
fee_lamportsuint64swapFee (lamports)
namestringcreate (pump_fun)Token name
symbolstringcreate (pump_fun)Token symbol
uristringcreate (pump_fun)Token metadata URI
token_total_supplyuint64create (pump_fun)Total supply
is_mayhem_modeboolcreateMayhem mode enabled
pool_creatorstringcreate (pump_amm)AMM pool creator wallet
lp_token_amountuint64liquidityLP tokens minted/burned
lp_mint_supplyuint64liquidityTotal LP token supply
real_token_reserveuint64allActual token reserve in pool
real_lamports_reserveuint64allActual SOL reserve (lamports)
virtual_token_reserveuint64pump_fun onlyVirtual token reserve (bonding curve)
virtual_lamports_reserveuint64pump_fun onlyVirtual SOL reserve (bonding curve)
buyback_feeuint64swap (newer data)Buyback fee (lamports)
buyback_fee_basis_pointsint64swap (newer data)Buyback fee rate in basis points
pool_addressstringpump_amm onlyAMM pool address

5. Guides

Want to see these files in action? Read how the Pump.fun bonding curve works to understand virtual reserves and price calculation, compare Pump.fun vs PumpSwap AMM to learn the safety differences, or jump straight to backtesting trading strategies with Python.