Data
Data API
An indexer follows the program, decodes every event and keeps pools, activity and loans in a database. Read it over HTTP, or subscribe and get changes pushed as they land on chain.
The API is live on mainnet at
https://api.proglet.fun, and the WebSocket at wss://api.proglet.fun/ws. Browser calls are allowed from proglet.fun; for your own app, call it from a server.REST
| GET /pools | Every pool with 24h change, volume and trade count, deepest first. | |
| GET /pools/:mint | One pool with its 24h stats. | |
| GET /pools/:mint/activity | ?limit, ?before | The coin's activity, newest first. limit up to 200; before is an ISO time for paging. |
| GET /activity | ?limit | The latest activity across all coins. |
| GET /positions/:owner | A wallet's open loans. | |
| GET /tokens/:mint | A coin's metadata: name, symbol, description, links and its image on our CDN. | |
| GET /fees | Creator fees per coin that haven't become pool liquidity yet, largest first. | |
| GET /fees/:mint | One coin's pending creator fees. | |
| GET /crank | The crank's latest claims and buybacks, with their signatures. | |
| GET /health | Indexer status: last signature and slot. |
bash
curl "https://api.proglet.fun/pools/<mint>/activity?limit=20"WebSocket
Connect to /ws and subscribe to channels. Every message is { channel, data }.
ts
const ws = new WebSocket("wss://api.proglet.fun/ws");
ws.onopen = () => ws.send(JSON.stringify({ op: "subscribe", channels: ["activity:" + mint, "pool:" + mint] }));
ws.onmessage = (m) => {
const { channel, data } = JSON.parse(m.data);
// channel "activity:<mint>" -> an Activity row, "pool:<mint>" -> a Pool row
};| activity:<mint> | Activity | A coin's new activity. |
| activity | Activity | New activity on every coin. |
| pool:<mint> | Pool | A pool after it changed. |
| pools | Pool | Every pool change. |
| positions:<owner> | Position | A wallet's loans as they open, change or close (closed: true). |
| token:<mint> | Token | A coin's metadata once its image is on the CDN. |
| fees:<mint>, fees | Fees | A coin's pending creator fees when they change. |
Send { "op": "unsubscribe", "channels": [...] } to stop. A connection can hold 50 channels.
Shapes
SOL and whole-token amounts are numbers; raw on-chain integers (lamports, base units) are strings, so nothing loses precision.
Activity
| kind | string | buy, sell, liquidity, buyback, borrow, collateral, repay or liquidation. |
| sol, tokens | number | SOL and whole tokens moved. |
| price | number | null | SOL per token after the event. |
| trader | string | null | The wallet; null for the pool's own buybacks. |
| signature, slot, time | string, number, string | Where and when it happened (time is ISO). |
Pool
| mint, pool | string | The coin and its pool address. |
| solReserve, tokenReserve, totalDebt, totalCollateral | string | Raw reserves and lending totals. |
| priceSol, poolSol | number | Price in SOL per token, and the pool's SOL. |
| lendingOpen | boolean | Whether new loans can open. |
| change24h, volume24h, trades24h | number | Only on REST: 24h price change in percent, volume in SOL, trade count. |
| name, symbol, image | string | null | Only on REST: the coin's metadata; image is its CDN URL. |
Fees
A coin's pump.fun creator fees are its buyback budget. They wait in three places before the crank turns them into pool liquidity; amounts are lamports, as strings.
| unswept | string | Still on the bonding curve or the PumpSwap pool. |
| inVault | string | Swept into pump's creator vault, not collected yet. |
| ready | string | Collected in the coin's creator PDA; the next buyback spends it. |
| totalSol | number | All three, in SOL. Pools also carry it as pendingFeesSol. |
| venue | string | curve, amm (PumpSwap) or migrating (between the two). |
Token
| mint, name, symbol, description | string | null | From the coin's Token-2022 metadata and its metadata JSON. |
| website, twitter, telegram | string | null | Links from the metadata JSON (http and https only). |
| image | string | null | The image on cdn.proglet.fun, null until it is mirrored. |
