Tokens API
When do this coin's locked tokens unlock, and whose are they?
A coin's unlock schedule: supply by allocation (team, investors, airdrop…), unlocked vs locked, the next unlock and every unlock event past and scheduled. Keyed by coin ticker.
/api/external/token-analysis/token-vesting/{symbol}What it returns
A coin's supply split into its allocations (team, investors, airdrop, treasury…) with how much of each is unlocked and still locked, the next unlock, and every unlock event past and scheduled, oldest first, each with the tokens it releases and from which allocations. Some allocations are not followed (tracked: false): they appear with their size only, and never in unlocks, so unlocked + locked is the followed supply, not the total. Amounts are in tokens; percents are of total supply. symbol is the coin ticker, matched case-insensitively — not a token mint or contract address, and not scoped to any of this API's chains. An unknown ticker, or a coin with no schedule, answers 404.
Chains
This endpoint is not tied to a chain: it takes no chain in its request.
Request
Send your key in the x-dex-data-key header. Replace each <placeholder> with a real value.
curl -H "x-dex-data-key: $DEXDATA_API_KEY" \ "https://api.dexdata.io/api/external/token-analysis/token-vesting/<symbol>"
| Parameter | Description |
|---|---|
symbolpath · string · required | The coin ticker, e.g. "ARB" or "OP" — not a pair such as "ARBUSDT", and not a token mint or contract address. Case-insensitive. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
symbol | string | The ticker as the coin is listed, e.g. "ARB" for "arb". |
name | string | null | The coin name. |
maxSupply | number | null | Maximum supply, tokens. |
totalSupply | number | null | Total supply, tokens. |
circulatingSupply | number | null | Circulating supply, tokens. |
unlocked | number | null | Tokens of the followed allocations unlocked so far. |
locked | number | null | Tokens of the followed allocations still locked. |
untracked | number | null | Tokens in allocations whose unlocks are not followed. |
untrackedPercent | number | null | untracked as a percent of total supply. |
listedAt | number | null | When the coin was first listed. Unix seconds, 00:00 UTC. |
vestingStart | number | null | When the first allocation starts vesting. Unix seconds, 00:00 UTC. |
vestingEnd | number | null | When the last allocation is fully vested. Unix seconds, 00:00 UTC. |
nextUnlock | object | null | The next scheduled unlock across all allocations; null when none is scheduled. |
nextUnlock.date | number | Unix seconds, 00:00 UTC. |
nextUnlock.amount | number | null | Tokens unlocked on that date. |
allocations | object[] | null | The supply by allocation. |
allocations[].name | string | The slice, e.g. "Team & Advisors", "Investors", "Airdrop". |
allocations[].percentOfSupply | number | null | The slice as a percent of total supply: 26.94 means 26.94 %. |
allocations[].amount | number | null | The slice size, tokens. |
allocations[].tracked | boolean | null | False when the unlocks of this slice are not followed; every field below is then null. |
allocations[].unlockType | string | null | "linear" (a steady release) or "nonlinear" (lump unlocks). |
allocations[].unlocked | number | null | Tokens of the slice unlocked so far. |
allocations[].locked | number | null | Tokens of the slice still locked. |
allocations[].tgeUnlocked | number | null | Tokens of the slice unlocked at the token generation event. |
allocations[].tgeUnlockPercent | number | null | Percent of the slice unlocked at the token generation event. |
allocations[].vestingStart | number | null | When the slice starts vesting. Unix seconds, 00:00 UTC. |
allocations[].vestingEnd | number | null | When the slice is fully vested. Unix seconds, 00:00 UTC. |
allocations[].nextUnlock | object | null | The slice's next scheduled unlock; null when none is scheduled. |
allocations[].nextUnlock.date | number | Unix seconds, 00:00 UTC. |
allocations[].nextUnlock.amount | number | null | Tokens unlocked on that date. |
allocations[].vestingDuration | object | null | How long the slice vests. |
allocations[].vestingDuration.value | number | null | How many units. |
allocations[].vestingDuration.unit | string | null | The unit, e.g. "year", "month", "day". |
allocations[].unlockFrequency | object | null | How often the slice unlocks. |
allocations[].unlockFrequency.value | number | null | How many units. |
allocations[].unlockFrequency.unit | string | null | The unit, e.g. "year", "month", "day". |
unlocks | object[] | null | Every unlock event, past and scheduled, oldest first. |
unlocks[].date | number | Unix seconds, 00:00 UTC. |
unlocks[].isTge | boolean | null | Whether this is the token generation event. |
unlocks[].amount | number | null | Tokens unlocked AT this event — not a running total. |
unlocks[].percentOfSupply | number | null | Those tokens as a percent of total supply. |
unlocks[].allocations | object[] | The slices this event unlocks from. |
unlocks[].allocations[].name | string | |
unlocks[].allocations[].amount | number | null | Tokens unlocked from this slice at this event. |
unlocks[].allocations[].percentOfSupply | number | null | Those tokens as a percent of total supply. |
Start building with DexData today
Sign in, create a key and make your first call in a minute. Free credits every month, and you only pay for calls that succeed.
Get a free API key