A Token Unlock List Isn't Useful Until It's Sized
Every unlock calendar reads the same way: a date, a ticker, a dollar figure. "XYZ unlocks $40M on September 1st." Is that big? Small? Nobody publishing a raw list actually answers that, because the answer depends entirely on the coin doing the unlocking — $40M is nothing against a $50B market cap and existential against a $150M one.
A crypto token unlock calendar API is only as useful as what it sizes the cliff against. GET /api/v1/supply/float and GET /api/v1/supply/unlocks price every unlock against the coin's own circulating float and market cap, so a cliff reads as "12% of circulating supply on a coin already 3x overhung" instead of a bare token count with a dollar sign in front of it.
What Dilution Overhang Actually Measures
dilution_overhang is the single most useful number on the float board: the USD value of a coin's still-locked supply, expressed as a multiple of its current market cap. Above 1.0x, the market is pricing less value than is still sitting in vesting contracts waiting to hit circulating supply.
Two coins can share the exact same float_pct and mean completely different things:
- Coin A — 23% float,
dilution_overhang: 0.4. Most of what's "locked" is unmintedmax_supplyheadroom that may never circulate on any near-term schedule; the locked value is worth less than half today's market cap. - Coin B — 23% float,
dilution_overhang: 3.1. Over three times today's market cap is still locked and on a dated path to circulating. Same float percentage, structurally different risk.
Reading float_pct alone and stopping there is how "tight float" gets mistaken for a bullish setup when it's really "most of the supply hasn't arrived yet."
Does 'No Unlock Data' Mean a Token Is Safe From Dilution?
No — and reading it that way is exactly the mistake the unlock_coverage field exists to prevent. Every row on /supply/float carries unlock_coverage, either tracked or not_tracked.
A null next_unlock paired with unlock_coverage: "not_tracked" does not mean the token has no unlock scheduled. It means no vesting schedule is published for that token in our source — DefiLlama's emissions index, which only covers protocols it has ingested. Absence of data is not evidence of absence of dilution.
Coverage is deliberately asymmetric: float_pct and dilution_overhang are computable for nearly the whole universe from public supply figures, while a dated cliff schedule only exists for protocols that publish one in a form the source tracks. The field exists so a consumer never collapses "we don't know" into "there's nothing to know."
Why the Float Board Starts at a $500M Market Cap
/supply/float defaults to min_market_cap=500000000 — not zero. Below that floor, an ascending-float ranking stops being about real vesting schedules and starts being dominated by an accounting artifact.
Measured against the live top-500 on 2026-08-19: at a $50M floor, the top of the ranking went to REUR, showing a 332x "overhang" on a $62M market cap — not because REUR has a real cliff coming, but because its reported total_supply is a nominal ceiling, not a schedule. At a $1B floor, only 64 coins survive — too thin for a cross-section.
$500M is where the board turns into a set of real, recognizable tokens: PI, HYPE, WBT, WLFI, JUP, ASTER, SUI, TAO and ONDO all show up. Pass min_market_cap=0 for the unfiltered set — the rows are still computed, they're just not what the default board is built to answer.
/supply/float vs /supply/unlocks: State vs Schedule
The two endpoints answer different questions and are meant to be read together, not as duplicates:
/supply/float | /supply/unlocks | |
|---|---|---|
| Question | How locked is this coin, right now? | What's unlocking, and when? |
| Sort order | Ascending float_pct — tightest floats first | Ascending days_until, then descending usd |
| Key fields | supply_basis, dilution_overhang, unlock_coverage | tokens, usd, pct_of_float, pct_of_market_cap |
| Coverage | Nearly the whole tracked universe | Only protocols DefiLlama's emissions index tracks |
| Free tier | Top 25 rows | Next 7 days |
| Pro / Pro Plus | Full board + filters | Full 30-35 day horizon |
Screening for Tight Float + Big Unlock Setups
A single float row, abbreviated:
curl -H "X-API-Key: cdk_live_yourkey" \
"https://cryptodataapi.com/api/v1/supply/float?symbol=ASTER"{
"rows": [
{
"symbol": "ASTER",
"name": "Aster",
"market_cap": 1834000000,
"circulating_supply": 1792000000,
"total_supply": 8000000000,
"max_supply": 8000000000,
"supply_basis": "max_supply",
"float_pct": 0.224,
"locked_supply": 6208000000,
"locked_usd": 6350000000,
"dilution_overhang": 3.46,
"next_unlock": {
"date": "2026-09-12",
"days_until": 17,
"tokens": 240000000,
"usd": 245600000,
"pct_of_float": 0.134,
"pct_of_market_cap": 0.134,
"categories": ["team", "investor"]
},
"unlock_coverage": "tracked",
"rank": 4
}
],
"count": 1,
"tier_scope": "pro",
"as_of": "2026-08-26T00:00:00Z"
}That single response says more than any raw unlock headline could: a 22.4% float, 3.46x today's market cap still locked, and a cliff in 17 days worth 13.4% of circulating supply. Combine both endpoints in Python to screen the whole board for that pattern:
import requests
h = {"X-API-Key": "cdk_live_yourkey"}
base = "https://cryptodataapi.com/api/v1"
float_rows = requests.get(f"{base}/supply/float?max_float_pct=0.35", headers=h).json()["rows"]
unlocks = requests.get(f"{base}/supply/unlocks?window_days=30", headers=h).json()["items"]
tight = {r["symbol"] for r in float_rows}
for u in unlocks:
if u["symbol"] in tight and (u["pct_of_float"] or 0) >= 0.08:
print(f"{u['symbol']}: {u['pct_of_float']:.1%} of float unlocks in "
f"{u['days_until']}d (${u['usd']:,.0f})")That loop is the whole screen: tight float from one endpoint, a sized cliff from the other, joined on symbol.
Coverage: From 5 Tracked Events to 37 Overnight
The unlock calendar is sourced from DefiLlama's free emissions data, and its coverage moved sharply on 2026-08-19/20: a shortlist bug meant the fetcher was pulling schedules ranked by global emissions size rather than our own tracked universe, so foundations like arbitrum-foundation and sui-foundation never made the cut while pure mining-inflation entries (Bitcoin, Dogecoin, Litecoin) — correctly excluded anyway — sat at the top. Fixing the shortlist took /event/calendar?type=unlock from 5 events across 3 protocols to 37 across 27 on the same day, adding coverage for SUI, OP, ZRO, W, TON, XPL, ALT, GRASS and EIGEN.
This is a cliff calendar, not an emissions feed. Continuous release is deliberately excluded: mining inflation, linear vesting and runs of identical daily unlocks are a drip, not a step, and publishing them as catalysts buries the real ones. Absence from the calendar still means only "no dated cliff found" — see unlock_coverage above, not "nothing is unlocking."
How to Use the Token Unlock Calendar API
Three concrete uses for /supply/float and /supply/unlocks together:
- Pre-position risk screening. Filter
/supply/floatfor a tightmax_float_pctand highdilution_overhang, then check whether each hit has anext_unlockinside your holding window before sizing a position. - Catalyst calendars for agents. Feed
/supply/unlocks?window_days=30into a research agent as the forward dilution catalyst list — every item already carriespct_of_float, so no downstream math is needed to judge materiality. - Portfolio-wide overhang audits. Pull the full
/supply/floatboard (Pro+) and sumlocked_usdacross your holdings to see total dilution exposure, not just per-coin.
Free tier gets the top 25 float rows and the next 7 days of unlocks — enough to evaluate the data. Pro and Pro Plus get the full board, every filter (min_locked_usd, max_float_pct, symbol), and the full 30-35 day unlock horizon.



