Discovery and markets API
Which concentrated-liquidity LP positions are locked, by whom and until when?
Browse the v3 or v4 LP position NFTs locked in one locker protocol across chains, pool by pool, with each lock's owner and end. Paged; no pool or chain filter.
/api/external/discovery/lp-position-locksWhat it returns
One page of the registry of concentrated-liquidity (v3) or hook-pool (v4) LP position NFTs locked in one locker protocol, across every chain it runs on, pool by pool: each lock with the position id, who can withdraw it, when it was locked and when it ends. A browse, not a lookup: the registry cannot be filtered by pool, token or chain, so to check one pool page through and match pool and chainId. Covers one locker protocol only; for whether a token's LP is locked or burned across lockers use lp-safety. Rows on chains this API does not serve carry chain: null and their numeric chainId. hasMore is true whenever the page came back full; the page after the last is empty. No chain.
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/discovery/lp-position-locks"
| Parameter | Description |
|---|---|
versionquery · string · optional | v3 for concentrated-liquidity positions, v4 for hook-pool positions. Defaults to v3.v3v4 |
pagequery · integer · optional | Which page, from 1. Defaults to 1. |
pageSizequery · integer · optional | Pools per page, 1-100. Defaults to 50. pageSize ≤ 75 keeps the answer under 32 KB. |
Response fields
A JSON response. Every field is always present; null means the value could not be established, never zero.
| Field | Type | Description |
|---|---|---|
version | string | The registry read. |
page | integer | The page read. |
pageSize | integer | The page size asked for. |
hasMore | boolean | true when the page came back full, so the next page may hold more. |
pools | object[] | Pools with locked positions, in the registry's order. |
pools[].chain | string | null | This API's chain code, e.g. BASE; null for a chain it does not serve. |
pools[].chainId | integer | The EVM chain id, e.g. 8453. |
pools[].pool | string | v3: the pool contract address. v4: the pool id (32 bytes, hex). Lowercase. |
pools[].positionManager | string | null | The position manager contract the locked position NFTs belong to, lowercase. |
pools[].locks | object[] | The locked positions in this pool. |
pools[].locks[].lockId | string | The locker's id for the lock, a decimal string. |
pools[].locks[].positionId | string | null | The position NFT's token id at the position manager, a decimal string. |
pools[].locks[].owner | string | null | Who can withdraw the position when the lock ends, lowercase. |
pools[].locks[].lockedAt | integer | null | When the lock was made, unix seconds. |
pools[].locks[].unlocksAt | integer | null | When the lock ends, unix seconds. A permanent lock carries 253370764800 (year 9999). |
pools[].locks[].permanent | boolean | null | Whether the lock never ends. |
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