Documentation / API reference / OTC
Executed OTC Trades
Last reviewed 2026-09-18
Returns settled OTC trades — the matches between listings and offers (or direct buys). Each row records the alpha amount, TAO amount, executed price (the absolute price that was snapped from the market when the trade settled, in rao per alpha), price_offset_bps (the offset the listing or offer was authored with), fee, buyer/seller, and the extrinsic that settled the trade on-chain. Use this for volume analytics, price-time series, and trade reconstruction.
Try it
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
trade_type | query | string | How the trade was matched: listing_filled, offer_filled, or direct. One of listing_taken, offer_taken, all. | |
seller | query | string | Filter by seller coldkey (SS58). | |
buyer | query | string | Filter by buyer coldkey (SS58). | |
netuid | query | integer (int32) | Subnet id. | |
listing_id | query | string | Filter to trades that filled a specific listing. | |
offer_id | query | string | Filter to trades that filled a specific offer. | |
block_start | query | integer (int32) | Earliest block height (inclusive). | |
block_end | query | integer (int32) | Latest block height (inclusive). | |
timestamp_start | query | integer (int64) | Earliest Unix timestamp in seconds (inclusive). | |
timestamp_end | query | integer (int64) | Latest Unix timestamp in 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. block_number_desc. One of block_number_asc, block_number_desc, timestamp_asc, timestamp_desc, tao_amount_asc, tao_amount_desc, alpha_amount_asc, alpha_amount_desc, executed_price_asc, executed_price_desc. |
Responses
200 — OTC trades retrieved successfully
| Field | Type | Required | Description |
|---|---|---|---|
data | array | Yes | |
data[].alpha_amount | string | Yes | |
data[].block_number | integer (int32) | Yes | |
data[].buyer | object | Yes | |
data[].buyer.hex | string | Yes | The hex format of the hot key |
data[].buyer.ss58 | string | Yes | The SS58 format of the hot key |
data[].executed_price | string | Yes | |
data[].extrinsic_id | string | Yes | |
data[].fee | string | Yes | |
data[].id | string | Yes | |
data[].listing_id | string, nullable | ||
data[].netuid | integer (int32) | Yes | |
data[].offer_id | string, nullable | ||
data[].price_offset_bps | integer (int32) | 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[].tao_amount | string | Yes | |
data[].timestamp | string (date-time) | Yes | |
data[].trade_type | string | 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.