Liquidity and Size
Overview
Liquidity and size metrics describe how large a protocol market is: the total value supplied, the total value borrowed against it, and what remains available to borrow. Each is published in the market's native asset units, and in U.S. dollars where available. They are part of the Protocol Metrics family. See that page for the shared entity model (protocol, chain, market), the beginning-of-interval timestamp convention, and for what an instantaneous value versus a _mean value represents at each frequency.
At a Glance
| Data type | Entities | Frequency / cadence | Unit | Primary endpoint | Coverage |
|---|---|---|---|---|---|
| Total market size, total borrowed, and total available liquidity | Protocol markets (protocol + chain + market) | 1d and 1m | Native units, and U.S. dollars where available | /timeseries/protocol-metrics | coming soon.... |
Metrics
Each of the three quantities (market size, borrowed, available liquidity) is published in four forms: native units, U.S. dollars, and the _mean of each.
Total market size
The sum of everything supplied to the market: what is currently borrowed plus what remains available.
| Metric | Description | Frequency |
|---|---|---|
market_size_total_ntv | Total value supplied to the market, in the market's native asset units, closing value for the interval. | 1d, 1m |
market_size_total_usd | Total value supplied to the market, in U.S. dollars, closing value for the interval. | 1d, 1m |
market_size_total_mean_ntv | The mean market_size_total_ntv value over the time interval. | 1d, 1m |
market_size_total_mean_usd | The mean market_size_total_usd value over the time interval. | 1d, 1m |
Total borrowed
The sum of everything currently borrowed from the market.
| Metric | Description | Frequency |
|---|---|---|
borrowed_total_ntv | Total value borrowed from the market, in the market's native asset units, closing value for the interval. | 1d, 1m |
borrowed_total_usd | Total value borrowed from the market, in U.S. dollars, closing value for the interval. | 1d, 1m |
borrowed_total_mean_ntv | The mean borrowed_total_ntv value over the time interval. | 1d, 1m |
borrowed_total_mean_usd | The mean borrowed_total_usd value over the time interval. | 1d, 1m |
Total available liquidity
The sum of everything supplied to the market that is not currently borrowed (total market size minus total borrowed).
This metric is often referred to as Total Value Locked (TVL) in the industry for many protocols.
| Metric | Description | Frequency |
|---|---|---|
liquidity_total_available_ntv | Value available to borrow or withdraw from the market, in the market's native asset units. For lending pools, this metric is often referred to as Total Value Locked (TVL) in the industry for many protocols. | 1d, 1m |
liquidity_total_available_usd | Value available to borrow from the market, in U.S. dollars. For lending pools, this metric is often referred to as Total Value Locked (TVL) in the industry for many protocols. | 1d, 1m |
liquidity_total_available_mean_ntv | The mean liquidity_total_available_ntv value over the time interval.For lending pools, this metric is often referred to as Total Value Locked (TVL) in the industry for many protocols. | 1d, 1m |
liquidity_total_available_mean_usd | The mean liquidity_total_available_usd value over the time interval.For lending pools, this metric is often referred to as Total Value Locked (TVL) in the industry for many protocols. | 1d, 1m |
Conventions.
- Metric values are returned as JSON strings to preserve precision.
timemarks the beginning of the interval a row covers (see Protocol Metrics: Conventions).- The
_ntvvariants are denominated in the market's own asset (for example WETH for the Aave v3 WETH market). - The
_usdvariants convert the native value to U.S. dollars, where available: a market whose underlying asset has no Reference Rate in our coverage universe has no_usdvalues, even though its_ntvvalues are published. market_size_total=borrowed_total+liquidity_total_available, in either unit, at the same instant.
Methodology
See Protocol Metrics: Frequency and the daily mean for how the instantaneous and _mean forms differ at each frequency, and the worked example below for how close the two forms are in practice.
Total borrowed and available liquidity by protocol type
borrowed_total and liquidity_total_available are not computed the same way across protocol types: each reads a different piece of on-chain state depending on how the protocol itself represents "what is out on loan" versus "what could still be lent."
- For Aave v3 markets, available liquidity is the market's aToken total supply minus the sum of its outstanding stable and variable debt, read live from Aave's Pool and ProtocolDataProvider contracts.
- For Morpho v1 (MetaMorpho) vaults, available liquidity is the sum, across every market in the vault's withdraw queue, of the lesser of (a) the vault's own supplied position in that market and (b) that market's idle (unborrowed) cash. This reflects that a depositor can withdraw at most the vault's own position, further capped by whatever unborrowed liquidity the underlying market actually holds.
Accessing the Data
Python Client
import os
from coinmetrics.api_client import CoinMetricsClient
client = CoinMetricsClient(os.environ["CM_API_KEY"])
df = client.get_protocol_metrics(
protocols="aave_v3",
markets="core-weth",
metrics=["market_size_total_usd", "borrowed_total_usd", "liquidity_total_available_usd"],
frequency="1d",
).to_dataframe()
Shell
curl --compressed "https://api.coinmetrics.io/v4/timeseries/protocol-metrics?protocols=aave_v3&markets=core-weth&metrics=market_size_total_usd,borrowed_total_usd,liquidity_total_available_usd&frequency=1d&page_size=10000&api_key=$CM_API_KEY"
Python
import os, requests
response = requests.get(
"https://api.coinmetrics.io/v4/timeseries/protocol-metrics",
params={"protocols": "aave_v3", "markets": "core-weth",
"metrics": "market_size_total_usd,borrowed_total_usd,liquidity_total_available_usd",
"frequency": "1d", "page_size": 10000, "api_key": os.environ["CM_API_KEY"]},
).json()
print(response)
Full parameter reference: see the API Reference for /timeseries/protocol-metrics.
Examples
The examples below are live pulls, returned as JSON strings, and change on each pull.
Example: instantaneous vs. mean
borrowed_total_usd (closing value) alongside borrowed_total_mean_usd (mean of the day's hourly closes) for the same market and day. The two values are close but not identical, consistent with Protocol Metrics: Frequency and the daily mean (browser):
[
{
"protocol": "aave_v3",
"market": "core-weth",
"chain": "ethereum",
"time": "2026-08-08T00:00:00.000000000Z",
"borrowed_total_mean_usd": "3320124519.06076767475416114713670911616",
"borrowed_total_usd": "3319583954.5182641728724592"
},
{
"protocol": "aave_v3",
"market": "core-weth",
"chain": "ethereum",
"time": "2026-08-09T00:00:00.000000000Z",
"borrowed_total_mean_usd": "3310788004.28508721667503704457928648472",
"borrowed_total_usd": "3312187009.3059277421429076"
}
]
Example: total market size at the 1m frequency
market_size_total_usd for the same market, close to real time (browser):
[
{
"protocol": "aave_v3",
"market": "core-weth",
"chain": "ethereum",
"time": "2026-08-10T19:57:00.000000000Z",
"market_size_total_usd": "4067596112.53438854564029603356"
},
{
"protocol": "aave_v3",
"market": "core-weth",
"chain": "ethereum",
"time": "2026-08-10T19:58:00.000000000Z",
"market_size_total_usd": "4067614906.322207655579850468638"
}
]
Coverage
See Protocol Metrics: Coverage for how to check current availability against the catalog directly.
Related
- Protocol Metrics: the parent page, with the shared entity model and frequency semantics.
- Rates and Yield:
utilization_rate, which is computed fromborrowed_totalandmarket_size_total. - Risk Parameters: the supply and borrow caps that bound how large these figures can grow.