---
title: "Protocol TVL across all supported chains"
method: GET
path: "/v1/tvl"
tags: ["Public"]
---

# Protocol TVL across all supported chains

`GET /v1/tvl`

## Request

- Base URL: `https://api.spiralstake.xyz`
- URL: `https://api.spiralstake.xyz/v1/tvl`
- Auth: none declared

Aggregated over every open Spiral position (each held by a UserProxy on a Morpho Blue market). `tvlUsd` = net user equity (collateral − debt) — the figure DefiLlama lists as TVL; `grossTvlUsd` = total looped collateral; `borrowedUsd` = total debt owed to Morpho. `tvlUsd + borrowedUsd = grossTvlUsd`. `positions` counts open positions with non-zero collateral and `users` the distinct wallets holding one. Top-level `asOf` is the oldest chain snapshot and `stale` is true if any chain is stale. Chains not yet computed are omitted; 503 until at least one is.

## Response `200`

TVL envelope

- object
  - `asOf` string, date-time, required: Oldest chain snapshot.
  - `stale` boolean, required: True if any chain's snapshot is past its freshness budget.
  - `total` object, required
    - `tvlUsd` number, required: Net user equity in USD (collateral − debt); the DefiLlama TVL. 2 decimals.
    - `grossTvlUsd` number, required: Total looped collateral in USD. 2 decimals.
    - `borrowedUsd` number, required: Total debt owed to Morpho in USD. 2 decimals.
    - `positions` integer, required: Open positions with non-zero collateral.
    - `users` integer, required: Distinct users with at least one such position.
  - `chains` object[], required
    - `chainId` integer, required
    - `asOf` string, date-time, required
    - `stale` boolean, required
    - `tvlUsd` number, required: Net user equity in USD (collateral − debt); the DefiLlama TVL. 2 decimals.
    - `grossTvlUsd` number, required: Total looped collateral in USD. 2 decimals.
    - `borrowedUsd` number, required: Total debt owed to Morpho in USD. 2 decimals.
    - `positions` integer, required: Open positions with non-zero collateral.
    - `users` integer, required: Distinct users with at least one such position.

## Other responses

- `503`: Not ready (no chain computed yet)

---

[API](https://skmtc.dev/spiralstake/apis/spiral-stake-read-api-v1.md) · [All operations](https://skmtc.dev/spiralstake/apis/spiral-stake-read-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/spiralstake/apis/spiral-stake-read-api-v1/revisions/e58af20cd747?raw)
