Read the water yourself.
Read only JSON, no key, CORS open, cached for a few seconds. Every endpoint below exists and returns live data. Base URL https://usebobber.xyz.
Before launch the endpoints answer with launched: false and empty lists instead of numbers. Back to the docs
/api/stateStateThe live picture: last price sample, the waterline, how far the price is from it, whether it is under the line, 24 hour volume and catches, the top angler of the week, the bot heartbeat and where every number comes from.
launchedfalse until the mint is setprice{ sol, usd, at, source } or nullwaterline{ sol, windowSec, samples, at } or nulldeviationBpsprice vs waterline in basis points, negative is underunderTheLinetrue when at least the catch threshold under, null while warming upday{ buySol, sellSol, trades, catches, catchSol, at } for the last 24 hourstopAngler{ wallet, catchSol, catches } for the last 7 days, or nullworker{ lastLoopAt, stale }/api/anglers?range=7d&limit=25Anglers boardWallets ranked by SOL bought under the waterline. range is 7d or all, limit is 1 to 100.
anglers[].rank / walletposition and walletanglers[].catchSol / tokensSOL spent and coins bought under the lineanglers[].catchesnumber of catchesanglers[].biggestSol / deepestBpslargest catch and deepest dip caughtanglers[].lastAttime of the latest catch/api/trades?limit=30TradesRecent bites (buys), sinks (sells) and catches parsed from Helius transactions. limit is 1 to 200. Add catches=1 for catches only.
trades[].sidebuy or selltrades[].sol / tokensamounts in SOL and coinstrades[].priceSol / waterlineSolthe swap price and the waterline at that momenttrades[].underBps / isCatchhow far under the line, and whether it counted as a catchtrades[].wallet / sigthe trader and the signature/api/waterline?range=24hWaterlinePrice samples and the waterline series for charting, plus catch markers. range is 24h or 7d; the series starts at the first sample in range and has about 300 steps.
points[]{ t, p } samples, t in ms, p in SOLseries[]{ t, w } waterline at each step, null before enough historycatches[]{ t, p, sol, sig } markers