> ## 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.

# Metrics

> Daily perpetual and order-book figures per project, app, market and token.

Notional volume, open interest, funding, liquidations, trading volume, fees and revenue, in USD. One row per thing per day, at eight grains: project, project and chain, app, app and chain, and each market kind with its token grain.

## Tables

> [!NOTE]
>
> Daily perpetual and order-book fees, revenue and volume cover closed UTC days and follow the availability cutoff of each market’s chain.

A tab per grain. [Coverage](https://tokenterminal.com/docs/catalog/perpetuals.md) shows which apps report which measure.

**Project**

One row per project per day. Notional volume comes in two lenses, exchange and interface; read one of them.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_projects.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the project whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_projects.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the project whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_projects.trading_volume_daily`</td><td>`trading_volume`</td><td>Total value of trades executed.</td></tr>
    <tr><td>`metrics_projects.fees_daily`</td><td>`fees`</td><td>Total fees paid by users.</td></tr>
    <tr><td>`metrics_projects.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees paid out to the supply side.</td></tr>
    <tr><td>`metrics_projects.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol.</td></tr>
  </tbody>
</table>

**Project × chain**

One row per project and chain per day.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_projects_by_chain.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the project whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_projects_by_chain.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the project whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_projects_by_chain.trading_volume_daily`</td><td>`trading_volume`</td><td>Total value of trades executed.</td></tr>
    <tr><td>`metrics_projects_by_chain.fees_daily`</td><td>`fees`</td><td>Total fees paid by users.</td></tr>
    <tr><td>`metrics_projects_by_chain.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees paid out to the supply side.</td></tr>
    <tr><td>`metrics_projects_by_chain.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol.</td></tr>
  </tbody>
</table>

**App**

One row per app per day. The exchange lens credits the venue whose matching engine settled the trade and the interface lens the app the trade was placed through.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_apps.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the app whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_apps.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the app whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_apps.trading_volume_daily`</td><td>`trading_volume`</td><td>Value of trades executed by the app, measured on the quote leg at execution price.</td></tr>
    <tr><td>`metrics_apps.fees_daily`</td><td>`fees`</td><td>Fees paid by users of the app across every chain it runs on.</td></tr>
    <tr><td>`metrics_apps.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees the app passed through to builders and, on HIP-3 markets, to market deployers.</td></tr>
    <tr><td>`metrics_apps.revenue_daily`</td><td>`revenue`</td><td>Fees the app retained across every chain it runs on.</td></tr>
  </tbody>
</table>

**App × chain**

One row per app and chain per day.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_apps_by_chain.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the app whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_apps_by_chain.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value of perpetual futures traded, attributed to the app whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_apps_by_chain.trading_volume_daily`</td><td>`trading_volume`</td><td>Value of trades executed by the app, measured on the quote leg at execution price.</td></tr>
    <tr><td>`metrics_apps_by_chain.fees_daily`</td><td>`fees`</td><td>Fees paid by users of the app across every chain it runs on.</td></tr>
    <tr><td>`metrics_apps_by_chain.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees the app passed through to builders and, on HIP-3 markets, to market deployers.</td></tr>
    <tr><td>`metrics_apps_by_chain.revenue_daily`</td><td>`revenue`</td><td>Fees the app retained across every chain it runs on.</td></tr>
  </tbody>
</table>

**Perp market**

One row per perpetual market per day. The money tables also have `chain_id`, `project_id` and `app_id`; the position and trader tables are keyed on the market alone.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_perp_markets.price_daily`</td><td>`price`</td><td>Mark price of the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value traded in the perpetual futures market, attributed to the app whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_perp_markets.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value traded in the perpetual futures market, attributed to the app whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_perp_markets.trade_count_daily`</td><td>`trade_count`</td><td>Number of trades executed in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.daily_active_traders_daily`</td><td>`daily_active_traders`</td><td>Distinct traders active in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.open_interest_daily`</td><td>`open_interest`</td><td>Notional value of open positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.open_interest_long_daily`</td><td>`open_interest_long`</td><td>Notional value of open long positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.open_interest_short_daily`</td><td>`open_interest_short`</td><td>Notional value of open short positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.volume_to_open_interest_daily`</td><td>`volume_to_open_interest`</td><td>Notional trading volume divided by open interest.</td></tr>
    <tr><td>`metrics_perp_markets.daily_active_traders_long_daily`</td><td>`daily_active_traders_long`</td><td>Distinct traders with long positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.daily_active_traders_short_daily`</td><td>`daily_active_traders_short`</td><td>Distinct traders with short positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.position_size_average_long_daily`</td><td>`position_size_average_long`</td><td>Average notional size of long positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.position_size_average_short_daily`</td><td>`position_size_average_short`</td><td>Average notional size of short positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.position_size_median_long_daily`</td><td>`position_size_median_long`</td><td>Median notional size of long positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.position_size_median_short_daily`</td><td>`position_size_median_short`</td><td>Median notional size of short positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.trader_share_long_top10_daily`</td><td>`trader_share_long_top10`</td><td>Share of long open interest held by the ten largest long traders.</td></tr>
    <tr><td>`metrics_perp_markets.trader_share_short_top10_daily`</td><td>`trader_share_short_top10`</td><td>Share of short open interest held by the ten largest short traders.</td></tr>
    <tr><td>`metrics_perp_markets.funding_rate_daily`</td><td>`funding_rate`</td><td>Daily funding rate paid between long and short positions in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.liquidation_volume_long_daily`</td><td>`liquidation_volume_long`</td><td>Notional value of long positions force-closed in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.liquidation_volume_short_daily`</td><td>`liquidation_volume_short`</td><td>Notional value of short positions force-closed in the perpetual futures market.</td></tr>
    <tr><td>`metrics_perp_markets.fees_daily`</td><td>`fees`</td><td>Fees paid by traders on the perpetual market.</td></tr>
    <tr><td>`metrics_perp_markets.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol on the perpetual market, net of the builder tip and HIP-3 deployer cut.</td></tr>
    <tr><td>`metrics_perp_markets.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees passed through on the perpetual market, being the builder-code tip plus the HIP-3 deployer's cut.</td></tr>
  </tbody>
</table>

**Perp market token**

One row per perpetual market and settlement token per day. Amounts become dollars here, and `fees` equals `revenue` plus `fees_supply_side` for the same market, token and day.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_perp_markets_by_token.notional_trading_volume_daily`</td><td>`notional_trading_volume`</td><td>Notional value traded in the perpetual futures market, price times trade amount over crossed (taker) legs.</td></tr>
    <tr><td>`metrics_perp_markets_by_token.notional_trading_volume_exchange_daily`</td><td>`notional_trading_volume`</td><td>Notional value traded in the perpetual futures market, attributed to the app whose matching engine settled the trade.</td></tr>
    <tr><td>`metrics_perp_markets_by_token.notional_trading_volume_interface_daily`</td><td>`notional_trading_volume`</td><td>Notional value traded in the perpetual futures market, attributed to the app whose interface the trade was placed through.</td></tr>
    <tr><td>`metrics_perp_markets_by_token.fees_daily`</td><td>`fees`</td><td>Fees paid by traders on the perpetual market.</td></tr>
    <tr><td>`metrics_perp_markets_by_token.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol on the perpetual market, net of the builder tip and HIP-3 deployer cut.</td></tr>
    <tr><td>`metrics_perp_markets_by_token.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees passed through on the perpetual market, being the builder-code tip plus the HIP-3 deployer's cut.</td></tr>
  </tbody>
</table>

**Order book market**

One row per order-book market per day. Every table also has `chain_id`, `project_id` and `app_id`.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_order_book_markets.trading_volume_daily`</td><td>`trading_volume`</td><td>Value of trades executed in the order book market, measured on the quote leg at execution price.</td></tr>
    <tr><td>`metrics_order_book_markets.fees_daily`</td><td>`fees`</td><td>Fees paid by traders on the order-book market.</td></tr>
    <tr><td>`metrics_order_book_markets.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol on the order-book market, net of the builder tip.</td></tr>
    <tr><td>`metrics_order_book_markets.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees passed through on the order-book market, being builder-code tips.</td></tr>
  </tbody>
</table>

**Order book market token**

One row per order-book market and quote token per day. Amounts become dollars here, and `fees` equals `revenue` plus `fees_supply_side` for the same market, token and day.

<table>
  <thead>
    <tr>
      <th width="330">Table</th>
      <th width="190">Value column</th>
      <th>What it holds</th>
    </tr>
  </thead>

  <tbody>
    <tr><td>`metrics_order_book_markets_by_token.trading_volume_daily`</td><td>`trading_volume`</td><td>Value of trades executed in the order book market, measured on the quote leg at execution price.</td></tr>
    <tr><td>`metrics_order_book_markets_by_token.fees_daily`</td><td>`fees`</td><td>Fees paid by traders on the order-book market.</td></tr>
    <tr><td>`metrics_order_book_markets_by_token.revenue_daily`</td><td>`revenue`</td><td>Fees retained by the protocol on the order-book market, net of the builder tip.</td></tr>
    <tr><td>`metrics_order_book_markets_by_token.fees_supply_side_daily`</td><td>`fees_supply_side`</td><td>Fees passed through on the order-book market, being builder-code tips.</td></tr>
  </tbody>
</table>

## Sample queries

**Apps by volume**

The same trades also sit in `metrics_apps.notional_trading_volume_exchange_daily` credited to the matching venue, and summing both lenses counts every trade twice.

```sql theme={null}
select
    app_id,
    sum(notional_trading_volume) as volume
from `metrics_apps.notional_trading_volume_interface_daily`
where timestamp >= timestamp('2026-08-01')
  and timestamp < timestamp('2026-08-08')
group by app_id
order by volume desc
```

**Project volume by chain**

`chain_id` on a per-chain table is the chain the market settled on, and one project's chain rows add back to its `metrics_projects` row for the same day.

```sql theme={null}
select
    chain_id,
    sum(notional_trading_volume) as volume
from `metrics_projects_by_chain.notional_trading_volume_interface_daily`
where project_id = 'hyperliquid'
  and timestamp >= timestamp('2026-08-01')
  and timestamp < timestamp('2026-08-08')
group by chain_id
order by volume desc
```

**One market's series**

Each measure is its own table, so a row with all three is a join on `perp_market_id` and `timestamp`. Join with `full join`: a market has open interest on a day nothing traded.

```sql theme={null}
with price as (
    select timestamp, price
    from `metrics_perp_markets.price_daily`
    where perp_market_id = 'hlbtc-hypercore'
      and timestamp >= timestamp('2026-06-01')
),

volume as (
    select timestamp, notional_trading_volume
    from `metrics_perp_markets.notional_trading_volume_exchange_daily`
    where perp_market_id = 'hlbtc-hypercore'
      and timestamp >= timestamp('2026-06-01')
),

open_interest as (
    select timestamp, open_interest
    from `metrics_perp_markets.open_interest_daily`
    where perp_market_id = 'hlbtc-hypercore'
      and timestamp >= timestamp('2026-06-01')
)

select
    timestamp,
    price.price,
    volume.notional_trading_volume,
    open_interest.open_interest
from price
full join volume
    using (timestamp)
full join open_interest
    using (timestamp)
order by timestamp
```

**Pool liquidations**

Long and short liquidation measures are separate USD tables. Join each to the registry on `perp_market_id` to select the venue and settlement chain.

```sql theme={null}
with liquidations as (
    select timestamp, perp_market_id, 'long' as side, liquidation_volume_long as value
    from `metrics_perp_markets.liquidation_volume_long_daily`
    where timestamp >= timestamp('2026-08-01')
      and timestamp < timestamp('2026-08-08')

    union all

    select timestamp, perp_market_id, 'short' as side, liquidation_volume_short as value
    from `metrics_perp_markets.liquidation_volume_short_daily`
    where timestamp >= timestamp('2026-08-01')
      and timestamp < timestamp('2026-08-08')
)

select
    liquidations.timestamp,
    liquidations.side,
    sum(liquidations.value) as liquidated_notional_usd
from liquidations
join `dimensions.perp_markets` as markets
    using (perp_market_id)
where markets.exchange_app_id = 'mux-perps'
  and markets.chain_id = 'arbitrum'
group by liquidations.timestamp, liquidations.side
order by liquidations.timestamp, liquidations.side
```

**Order books by volume**

`order_book_market_id` joins the registry for the pair name, and `trading_volume` counts one side of each match.

```sql theme={null}
select
    daily.order_book_market_id,
    markets.name,
    daily.app_id,
    daily.trading_volume
from `metrics_order_book_markets.trading_volume_daily` as daily
join `dimensions.order_book_markets` as markets
    using (order_book_market_id)
where daily.timestamp = timestamp('2026-08-01')
order by daily.trading_volume desc
limit 25
```

**Sector total**

Filter on `primary_market_sector`, the sector the Explorer lists the project under, so the total matches the Explorer and counts every project once.

```sql theme={null}
select
    daily.timestamp,
    sum(daily.notional_trading_volume) as sector_volume
from `metrics_perp_markets.notional_trading_volume_exchange_daily` as daily
join `dimensions.projects` as projects
    on projects.project_id = daily.project_id
where projects.primary_market_sector = 'derivatives'
  and daily.timestamp >= timestamp('2026-08-01')
group by daily.timestamp
order by daily.timestamp
```


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