> ## Documentation Index
> Fetch the complete documentation index at: https://tokenterminal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To query the Token Terminal data catalog, read https://tokenterminal.com/docs/catalog/agents-manual.md first. It is the whole catalog as one page: table naming grammar, key columns, partition and cluster rules, units, additivity, and the tables that are documented but not served yet.
> Never query a catalog table on a time bound alone. Also filter its cluster key, which you read from INFORMATION_SCHEMA.COLUMNS; an empty result means the object is a view, whose pruning contract is on its page. Compute is billed to the caller's own Google Cloud project.

# Perpetual futures markets

> Perpetual futures markets as a venue: the key, and how to rank them.

One row per perpetual futures market in `dimensions.perp_markets`, a contract that follows an underlying asset's price. `perp_market_id` identifies the market and its settlement chain, and is the key every perpetual figure joins on.

## Coverage

One row per app, and a tick marks every app that reports the measure at this grain. It is the same table as the Perp market tab of [Perpetuals](https://tokenterminal.com/docs/catalog/perpetuals.md).

<table>
  <thead>
    <tr>
      <th width="230">App</th>
      <th width="140">Project</th>
      <th>Notional volume</th>
      <th>Open interest</th>
      <th>Funding rate</th>
      <th>Liquidations</th>
      <th>Active traders</th>
      <th>Fees</th>
      <th>Revenue</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`dreamcash-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`entropyio-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`felix-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`hyena-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`hyperliquid-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`kinetiq-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`paragon-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`tradexyz-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`ventuals-perps`</td><td>`hyperliquid`</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td><td>✓</td></tr>
    <tr><td>`mux-perps`</td><td>`mux`</td><td>✗</td><td>✗</td><td>✗</td><td>✓</td><td>✗</td><td>✗</td><td>✗</td></tr>
  </tbody>
</table>

## Columns

<table>
  <thead>
    <tr>
      <th width="280">Column</th>
      <th width="130">Type</th>
      <th>Description</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`perp_market_id`</td><td>STRING</td><td>Identifier of the market: the registered market key joined with the chain on HyperCore; `{pool_address}:{asset_index}-{chain_id}` on MUX.</td></tr>
    <tr><td>`project_id`</td><td>STRING</td><td>Project the exchange app belongs to.</td></tr>
    <tr><td>`interface_app_id`</td><td>STRING</td><td>The builder credited for the market. Every fill in the market has this one value, and a market's whole volume lands under one interface app.</td></tr>
    <tr><td>`chain_id`</td><td>STRING</td><td>Chain the market settles on.</td></tr>
    <tr><td>`exchange_app_id`</td><td>STRING</td><td>The venue that settles the trades. It matches `interface_app_id` on a venue's own markets and differs on a builder-deployed HIP-3 market, where the engine is `hyperliquid-perps` and the interface is the listing builder.</td></tr>
    <tr><td>`quote_asset_id`</td><td>STRING</td><td>The token positions settle in, keyed like `dimensions.assets`. Null on MUX markets, which accept several collateral tokens and price in USD.</td></tr>
    <tr><td>`base_reference_asset_id`</td><td>STRING</td><td>The reference asset whose price the market follows, keyed like `dimensions.reference_assets`. Null where the market's asset has no reference-asset mapping.</td></tr>
    <tr><td>`name`</td><td>STRING</td><td>Readable market name, for example `BTC Perpetual`.</td></tr>
    <tr><td>`status`</td><td>STRING</td><td>Listing status from the market registry, such as `active`. Null for markets identified from executions.</td></tr>
  </tbody>
</table>

## Sample queries

**Rank markets by volume**

Notional volume is published twice, once crediting the exchange app that settled the trades and once crediting the interface app they came through. Each table is a complete account of the same trades, so read one of them.

```sql theme={null}
select
    markets.name,
    markets.exchange_app_id,
    sum(volume.notional_trading_volume) as notional_volume
from `metrics_perp_markets.notional_trading_volume_exchange_daily` as volume
join `dimensions.perp_markets` as markets
    using (perp_market_id)
where volume.timestamp >= timestamp('2026-08-01')
  and volume.timestamp < timestamp('2026-08-08')
group by 1, 2
order by notional_volume desc
limit 20
```

**Open interest by settlement token**

`quote_asset_id` is the token positions settle in, so grouping by it splits open interest by settlement currency. Open interest is a balance, so read it on a single day.

```sql theme={null}
select
    markets.quote_asset_id,
    sum(oi.open_interest) as open_interest
from `metrics_perp_markets.open_interest_daily` as oi
join `dimensions.perp_markets` as markets
    using (perp_market_id)
where oi.timestamp = timestamp('2026-08-01')
group by 1
order by open_interest desc
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.