Developer API

Read everything on Tidepool over plain HTTP: coins, their market data, the tide and platform fees. There is no API key and nothing to sign up for, because the API is read-only: no endpoint launches, trades, signs or changes anything.

Base URL /api/public/v1. Every response is { data, meta }, errors are { error: { code, message } }, and CORS is open, so you can call it from a browser, a bot or a server.


Quickstart

Every endpoint is open behind a per-minute rate limit per IP address. Start from a terminal:

terminal
# No key, no signup. Just call it.
curl https://tidepool-hazel.vercel.app/api/public/v1/tokens?sort=newest
# One coin
curl https://tidepool-hazel.vercel.app/api/public/v1/tokens/<mint>
# The tide that's filling
curl https://tidepool-hazel.vercel.app/api/public/v1/stats

Or from JavaScript:

tokens.js
const res = await fetch("https://tidepool-hazel.vercel.app/api/public/v1/tokens?sort=mcap&limit=10");
const { data } = await res.json();
for (const t of data.tokens) {
console.log(t.symbol, t.name, t.market?.marketCapUsd);
}

Pagination

List endpoints take limit (1-100, default 25) and cursor. Each response carries page: { limit, total, nextCursor }. For the next page, send nextCursor back as cursor with the same filters. nextCursor: null means you have everything.

Rate limits

120 requests per minute per IP. Past that you get 429 with code rate_limited; wait for the next minute. Responses are cached for a few seconds (market data) up to half a minute (fees), so polling faster than every 10 seconds returns the same numbers.

Endpoint reference

All endpoints are GET and live under https://tidepool-hazel.vercel.app/api/public/v1.

GET/tokens

Every coin on the site with live market data.

sortmcap (default), newest or volume
qname, ticker or exact mint
limit1-100, default 25
cursornextCursor from the previous page
response
{
"data": {
"tokens": [
{
"mint": "7Hk…tp",
"pool": "9F9M…dJ1",
"name": "Moon Jelly",
"symbol": "JELLY",
"description": "A jellyfish that only goes up.",
"imageUrl": "https://tidepool-hazel.vercel.app/api/img/7Hk…tp",
"launchpad": "meteora",
"creator": "4cX…9aQ",
"creatorName": "reefwalker",
"links": { "x": "https://x.com/moonjelly", "telegram": null, "website": null },
"market": { "priceUsd": 0.0000441, "marketCapUsd": 44110, "volume24hUsd": 210700, "change24hPct": -10.4, "liquidityUsd": null },
"graduationProgress": 0.16,
"graduated": false,
"createdAt": "2026-11-03T13:09:04.076Z",
"urls": { "page": "https://tidepool-hazel.vercel.app/coin/7Hk…tp" }
}
],
"page": { "limit": 25, "sort": "mcap", "total": 1, "nextCursor": null }
},
"meta": { "generatedAt": "2026-11-03T13:14:08.118Z" }
}
GET/tokens/{mint}

One coin, same shape as a row of /tokens. 404 if the mint isn't on this site.

response
{ "data": { "token": { "mint": "7Hk…tp", "symbol": "JELLY", "imageUrl": "https://tidepool-hazel.vercel.app/api/img/7Hk…tp", "market": { … } } }, "meta": { … } }
GET/stats

Site-wide totals, including the tide that's filling: when it closes, the holder share, SOL in the pools so far, holders riding, and SOL credited and paid out so far.

response
{ "data": { "tokens": { "total": 42, "graduated": 3 }, "tide": { "current": 20395, "closesAt": "2026-11-04T00:00:00.000Z", "holderSharePct": 50, "potSol": 3.21, "riders": 512, "creditedSol": 41.7, "paidSol": 39.2, "tidesClosed": 18 }, "totalMarketCapUsd": 1840000, "totalVolume24hUsd": 912000, "solPriceUsd": 184.2 }, "meta": { … } }
GET/fund

The platform fee wallet: its public address, balance, fees earned and every fee claim into it with transaction signatures. Holder payouts are sent from this wallet.

response
{ "data": { "wallet": "H7d9…m3T7h", "balanceSol": 12.4, "balanceUsd": 2284.1, "feesSol": 15.2, "claims": [ { "signature": "5x…", "sol": 1.2, "pools": 9, "at": "…" } ] }, "meta": { … } }

Errors

400bad_requestA parameter is out of range or malformed. The message says which.
404not_foundNo coin with that mint on this site.
429rate_limitedOver 120 requests this minute from your IP.
500internalSomething broke on our side. Retry with backoff.