# List OTC Lockup Listings

Returns active and historical lockup listings on the Taostats OTC desk.

_Source: https://beta.taostats.io/docs/api-reference/otc/get-otc-lockup-listing_

_Last reviewed: 2026-09-18_

```http
GET https://api.taostats.io/api/otc/lockup/listing/v1
```

Requires an API key in the `Authorization` header.

Returns active and historical *lockup listings* on the Taostats OTC desk. A lockup listing is a sell-side OTC offer where the purchased alpha is held in an escrow account and only claimable by the buyer after a defined `unlock_block`. Sellers commit alpha; buyers commit TAO up-front; the escrow releases on unlock.

Lockups use *offset pricing* (`price_offset_bps`) — the executed price floats with the current alpha market price plus or minus the offset in basis points, snapped at purchase time.

## Try it

Try this request in the browser on the HTML version of this page, or use the code samples below.

### Examples

List active OTC lockup listings in subnet 19 (most recent 50)

```text
https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&order=created_desc&limit=50
```

### Code samples

**cURL**

```bash
curl -H "Authorization: <YOUR_API_KEY>" \
  "https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc"
```

**JavaScript**

```js
const response = await fetch('https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc', {
  headers: {
    Authorization: '<YOUR_API_KEY>',
  },
});
const data = await response.json();
```

**Python**

```python
import requests

response = requests.get(
    "https://api.taostats.io/api/otc/lockup/listing/v1?netuid=19&status=active&limit=50&order=created_desc",
    headers={"Authorization": "<YOUR_API_KEY>"},
)
data = response.json()
```

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `listing_id` | query | `string` |  | Filter by exact lockup listing id. |
| `seller` | query | `string` |  | Filter by seller coldkey (SS58). |
| `hotkey` | query | `string` |  | Filter by the hotkey the alpha is delegated to. |
| `netuid` | query | `integer (int32)` |  | Subnet id. |
| `status` | query | `string` |  | Lifecycle state: `active`, `filled`, `cancelled`, `expired`. One of `active`, `cancelled`, `filled`, `all`. |
| `price_offset_bps_min` | query | `integer (int32)` |  | Minimum price offset in basis points (signed; -10000 to +10000). Negative = discount, positive = premium. |
| `price_offset_bps_max` | query | `integer (int32)` |  | Maximum price offset in basis points. |
| `lockup_duration_min` | query | `integer (int32)` |  | Minimum lockup duration in blocks. |
| `lockup_duration_max` | query | `integer (int32)` |  | Maximum lockup duration in blocks. |
| `total_amount_min` | query | `string` |  | Minimum total alpha originally listed (rao). |
| `total_amount_max` | query | `string` |  | Maximum total alpha originally listed (rao). |
| `remaining_amount_min` | query | `string` |  | Minimum alpha still available to purchase (rao). |
| `remaining_amount_max` | query | `string` |  | Maximum alpha still available to purchase (rao). |
| `created_block_start` | query | `integer (int32)` |  | Earliest creation block (inclusive). |
| `created_block_end` | query | `integer (int32)` |  | Latest creation block (inclusive). |
| `created_timestamp_start` | query | `integer (int64)` |  | Earliest creation timestamp (seconds, inclusive). |
| `created_timestamp_end` | query | `integer (int64)` |  | Latest creation timestamp (seconds, inclusive). |
| `page` | query | `integer (int32)` |  | 1-based page number. |
| `limit` | query | `integer (int32)` |  | Page size (max 200). |
| `order` | query | `string` |  | Sort order, e.g. `created_block_desc`. One of `created_asc`, `created_desc`, `updated_asc`, `updated_desc`, `price_offset_bps_asc`, `price_offset_bps_desc`, `lockup_duration_asc`, `lockup_duration_desc`, `total_amount_asc`, `total_amount_desc`, `remaining_amount_asc`, `remaining_amount_desc`. |

## Responses

### `200` — Lockup listings retrieved successfully

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `array` | Yes |  |
| `data[].created_block` | `integer (int32)` | Yes |  |
| `data[].created_timestamp` | `string (date-time)` | Yes |  |
| `data[].force_cancelled` | `boolean` | Yes |  |
| `data[].hotkey` | `object` | Yes |  |
| `data[].hotkey.hex` | `string` | Yes | The hex format of the hot key |
| `data[].hotkey.ss58` | `string` | Yes | The SS58 format of the hot key |
| `data[].initiated_by` | `string, nullable` |  |  |
| `data[].listing_id` | `string` | Yes |  |
| `data[].lockup_duration` | `integer (int32)` | Yes |  |
| `data[].netuid` | `integer (int32)` | Yes |  |
| `data[].price_offset_bps` | `integer (int32)` | Yes |  |
| `data[].remaining_amount` | `string` | Yes |  |
| `data[].seller` | `object` | Yes |  |
| `data[].seller.hex` | `string` | Yes | The hex format of the hot key |
| `data[].seller.ss58` | `string` | Yes | The SS58 format of the hot key |
| `data[].status` | `string` | Yes |  |
| `data[].total_amount` | `string` | Yes |  |
| `data[].updated_block` | `integer (int32)` | Yes |  |
| `data[].updated_timestamp` | `string (date-time)` | Yes |  |
| `pagination` | `object` | Yes |  |
| `pagination.current_page` | `integer (int32)` | Yes |  |
| `pagination.next_page` | `integer (int32), nullable` |  |  |
| `pagination.per_page` | `integer (int32)` | Yes |  |
| `pagination.prev_page` | `integer (int32), nullable` |  |  |
| `pagination.total_items` | `integer (int32)` | Yes |  |
| `pagination.total_pages` | `integer (int32)` | Yes |  |

### Other responses

| Status | Meaning |
| --- | --- |
| `400` | Bad request |
| `500` | Internal server error |

Every request needs an `Authorization` header holding your API key — see [Getting started with the Taostats API](https://beta.taostats.io/docs/start-here/getting-started-with-taostats-api).
