# Token Unlocks & Vesting API
> When locked crypto tokens vest into circulation, who they go to, and how much supply is still to come — live from DeFiLlama's open emissions dataset, no key. A token's price tells you what it costs today; its unlock schedule tells you the supply pressure ahead, the single biggest and most predictable overhang in crypto. When a large tranche of insider, private-sale or team tokens vests, it is fresh sell-side supply hitting a fixed amount of demand — and these dates are known in advance. A static "percent unlocked" number (which dilution APIs give) is only a snapshot; what a trader needs is the calendar: when is the next cliff, how many tokens, what share of total supply, and to whom. The protocols endpoint lists every token DeFiLlama tracks a schedule for (searchable). The next endpoint is the trading signal — the next upcoming cliff unlock for a token: its date, days away, token amount, the share of total supply it dilutes, the unlock type and the recipients (insiders, private sale, team, ecosystem), plus the unlocks after it. The schedule endpoint returns the fuller picture: total and max supply, the allocation by category with how much of each is already unlocked, the count of past and future events, the tokens still locked, and the upcoming events. The token-unlock / vesting-schedule cut — distinct from the tokenomics-and-dilution APIs (which give the static supply and FDV snapshot, not the dated unlock calendar) and from price and market-cap APIs. Amounts are in tokens and as a share of total supply; pair with any price API for the dollar value.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/tokenunlocks-api/..."
```

## Pricing
- **Free** (Free) — 760 calls/Mo, 2 req/s
- **Starter** ($12/Mo) — 17,200 calls/Mo, 6 req/s
- **Pro** ($38/Mo) — 89,000 calls/Mo, 16 req/s
- **Business** ($86/Mo) — 498,000 calls/Mo, 40 req/s

## Endpoints

### Next

#### `GET /v1/next` — Next upcoming cliff unlock for a token, plus the ones after it

**Parameters:**
- `protocol` (query, required, string) — Token slug from /v1/protocols Example: `arbitrum`
- `limit` (query, optional, string) — Upcoming events to include (1-50) Example: `5`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tokenunlocks-api/v1/next?protocol=arbitrum&limit=5"
```

**Response:**
```json
{
    "data": {
        "name": "Arbitrum",
        "note": "next_unlock is the next cliff that releases tokens; pct_of_total_supply is the dilution it adds. Recipients/categories show who receives them (insiders, privateSale, team, ecosystem…). Token amounts only — multiply by a price feed for the dollar value. Lightly cached.",
        "token": "arbitrum:0x912ce59144191c1204e64559fe8253a0e49e6548",
        "source": "DeFiLlama emissions dataset",
        "protocol": "arbitrum",
        "upcoming": [
            {
                "date": "2026-06-15",
                "timestamp": 1781553861,
                "categories": [
                    "insiders",
                    "privateSale"
                ],
                "days_until": 3,
                "recipients": [
                    "Team, Contributors & Advisors",
                    "Investors"
                ],
                "allocations": [
                    {
                        "tokens": 56125000,
                        "category": "insiders",
                        "recipient": "Team, Contributors & Advisors",
                        "unlock_type": "cliff"
                    },
                    {
                        "tokens": 36520833.333333336,
                        "category": "privateSale",
                        "recipient": "Investors",
                        "unlock_type": "cliff"
                    }
                ],
                "cliff_tokens": 92645833,
                
…(truncated, see openapi.json for full schema)
```

### Schedule

#### `GET /v1/schedule` — Full vesting picture: supply, allocation progress, remaining locked, upcoming events

**Parameters:**
- `protocol` (query, required, string) — Token slug from /v1/protocols Example: `aptos`
- `limit` (query, optional, string) — Upcoming events (1-300) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tokenunlocks-api/v1/schedule?protocol=aptos&limit=50"
```

**Response:**
```json
{
    "data": {
        "name": "Aptos",
        "note": "allocation_by_category.progress_pct shows how much of each allocation bucket is already unlocked. remaining_locked is the sum of future cliff tokens still to vest. upcoming_events lists the future unlocks (cap 50). Token amounts only. Lightly cached.",
        "notes": [
            "Staking rewards follow Aptos' declining inflation schedule: 7% at launch, decreasing 1.5% per year to a 3.25% floor. Emissions are modeled monthly with compounding and calibrated against actual on-chain supply."
        ],
        "token": "coingecko:aptos",
        "source": "DeFiLlama emissions dataset",
        "gecko_id": "aptos",
        "protocol": "aptos",
        "max_supply": 2100000000,
        "total_supply": 2100000000,
        "upcoming_events": [
            {
                "date": "2026-07-12",
                "timestamp": 1783871235,
                "categories": [
                    "insiders",
                    "noncirculating",
                    "privateSale"
                ],
                "days_until": 30,
                "recipients": [
                    "Community",
                    "Core Contributors",
                    "Foundation",
                    "Investors"
                ],
                "allocations": [
                    {
                        "tokens": 3210144.664725,
                        "category": "noncirculating",
                        "recipient": "Community",
          
…(truncated, see openapi.json for full schema)
```

### Protocols

#### `GET /v1/protocols` — List every token with a tracked unlock schedule

**Parameters:**
- `q` (query, optional, string) — Search slugs Example: `arb`
- `limit` (query, optional, string) — Page size (1-400) Example: `100`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tokenunlocks-api/v1/protocols?q=arb&limit=100"
```

**Response:**
```json
{
    "data": {
        "note": "Every token DeFiLlama tracks a vesting/emission schedule for. Use a slug from this list as the protocol parameter for /v1/next and /v1/schedule. Filter with q. Lightly cached.",
        "limit": 100,
        "total": 332,
        "offset": 0,
        "source": "DeFiLlama emissions dataset",
        "matched": 3,
        "protocols": [
            "arbitrum",
            "arbitrum-exchange",
            "gearbox"
        ]
    },
    "meta": {
        "timestamp": "2026-06-12T10:34:30.064Z",
        "request_id": "175a864e-113a-4482-a5a9-d87d5b1c658c"
    },
    "status": "ok",
    "message": "Unlock-tracked protocols retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tokenunlocks-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "protocols takes q (search), limit (1-400), offset. next takes protocol (required slug from /v1/protocols), limit (1-50 upcoming). schedule takes protocol (required), limit (1-300 upcoming events). meta takes no parameters. Timestamps are evaluated against the current date, so next/upcoming are always genuinely future. A 30-minute protective cache fronts the large per-protocol upstream files.",
        "source": "DeFiLlama emissions dataset (defillama-datasets.llama.fi/emissions), live, keyless",
        "service": "tokenunlocks-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/next": "The next upcoming cliff unlock for a token + the ones after it (protocol=arbitrum).",
            "GET /v1/schedule": "Full vesting picture: supply, allocation progress, remaining locked, upcoming events (protocol=arbitrum).",
            "GET /v1/protocols": "List every token with a tracked unlock schedule (q to search)."
        },
        "description": "Token unlocks & vesting schedules — when locked crypto tokens vest into circulation, who they go to, and how much supply is still to come, live from DeFiLlama's emissions dataset (no key). protocols lists every tracked token (searchable); next returns the next upcoming cliff unlock for a token (date, days away, token amount, share of total supply, unlock type, recipients) plus the unlocks after it; schedule returns the fuller picture (total/max supply, allocation
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/tokenunlocks-api
OpenAPI spec: https://www.oanor.com/api/tokenunlocks-api/openapi.json
