---
title: "Token locks & vesting on one token — live locked / next unlock / 7d & 30d schedule (PRO+)"
method: GET
path: "/rhc/tokens/{address}/locks"
tags: ["Robinhood Chain"]
---

# Token locks & vesting on one token — live locked / next unlock / 7d & 30d schedule (PRO+)

`GET /rhc/tokens/{address}/locks`

## Request

- Base URL: `https://madeonsol.com/api/v1`
- URL: `https://madeonsol.com/api/v1/rhc/tokens/{address}/locks`
- Auth: HTTP bearer

Every lock / vesting contract on one Robinhood Chain token with a live derived view: what is still locked right now (deposited − unlocked-so-far by the schedule), what unlocks next, the 7d / 30d unlock schedule and whether the locker can cancel — 'did the team lock, how much, until when'. `summary` covers the token-subject rows (counts by family / kind, distinct depositing wallets and locker contracts, locked / deposited raw + ui + usd + % of supply, `unlocking_7d_*` / `unlocking_30d_*`, nearest `next_unlock`, `active_cancelable_by_sender`); LP locks on the token's pools are listed under subject=lp and counted apart (`lp_lock_count`, `lp_lock_active_count`) because their amounts are pair / liquidity units. Rows are active-first, largest locked first. `token.facts_resolved` is false when decimals are unknown — every ui / usd / pct field is then null. Same create-only caveat as the feed (`coverage.withdrawals_tracked: false`): an unlocked-but-unclaimed balance counts as unlocked. Tier: **PRO+**.

## Path parameters

- `address` string, required

## Query parameters

- `status` 'active' | 'completed'
- `family` string
- `subject` 'token' | 'lp' | 'all'
- `limit` integer

## Response `200`

OK.

- object
  - `chain` 'robinhood'
  - `token_address` string
  - `token` object
    - `symbol` string, nullable
    - `name` string, nullable
    - `decimals` integer, nullable
    - `price_usd` number, nullable
    - `supply` number, nullable
    - `market_cap_usd` number, nullable
    - `liquidity_usd` number, nullable
    - `facts_resolved` boolean
  - `summary` object
    - `lock_count` integer
    - `complete` boolean
    - `rows_considered` integer
    - `token_lock_count` integer
    - `lp_lock_count` integer
    - `lp_lock_active_count` integer
    - `active_count` integer
    - `by_family` object
    - `by_kind` object
    - `distinct_lockers` integer
    - `distinct_locker_contracts` integer
    - `locked_raw` string
    - `locked` number, nullable
    - `locked_usd` number, nullable
    - `locked_pct_of_supply` number, nullable
    - `deposited_raw` string
    - `deposited` number, nullable
    - `deposited_usd` number, nullable
    - `unlocking_7d_raw` string
    - `unlocking_7d` number, nullable
    - `unlocking_7d_usd` number, nullable
    - `unlocking_7d_pct_of_supply` number, nullable
    - `unlocking_30d_raw` string
    - `unlocking_30d` number, nullable
    - `unlocking_30d_usd` number, nullable
    - `unlocking_30d_pct_of_supply` number, nullable
    - `next_unlock` object, nullable
    - `active_cancelable_by_sender` integer
  - `locks` object[]
  - `coverage` object
  - `meta` object

## Other responses

- `400`: Invalid address (code invalid_address) or query (code invalid_query).
- `401`: Missing or invalid API key, or an expired free-tier key. Authentication-stage error: no `X-RateLimit-*` headers, no `_rid`.
- `403`: PRO+ required.
- `429`: Too many requests. Every 429 carries `Retry-After`. A quota 429 (`rate_limit_exceeded`, with `X-RateLimit-*`), a heavy-query concurrency 429 (`error_kind` `concurrency`/`capacity`), or the per-IP authentication-failure block (30 failed auths/min; plain `error` + `retry_after_seconds`, no `X-RateLimit-*`).
- `500`: Unexpected server error from the route (`Internal server error`, with `_rid`). Safe to retry with backoff. A failed API-key lookup is a 503 `auth_backend_unavailable`, never a 500.
- `503`: Temporarily unavailable — a Postgres statement timeout while the dataset is under load or maintenance (`statement_timeout`, with `X-RateLimit-*` and `_rid`), or the API-key lookup itself unavailable (`auth_backend_unavailable`, authentication stage: no `X-RateLimit-*`, no `_rid`, not counted as a failed authentication). Always carries `Retry-After`; honour it.

---

[API](https://skmtc.dev/madeonsol/apis/madeonsol-robinhood-chain-api.md) · [All operations](https://skmtc.dev/madeonsol/apis/madeonsol-robinhood-chain-api/llms.txt) · [OpenAPI document](https://skmtc.dev/madeonsol/apis/madeonsol-robinhood-chain-api/revisions/9ea9a35ee2bf?raw)
