# Whitelabel TVL & APR

Display real-time TVL (Total Value Locked) and APR (Annual Percentage Rate) on your custom incentives hub. Fuul automatically calculates and refreshes these metrics for programs built on lending, liquidity, and staking protocols.

## How it works

Fuul computes TVL and APR at the conversion level for pool-based incentive programs:

* **TVL** — total value currently locked in the underlying protocol pool, denominated in USD
* **APR** — estimated annualized return based on the configured reward rate and current TVL

Metrics are automatically refreshed every \~3 hours for active pool incentives.

## Fetching TVL & APR

Use the public incentives endpoint — no API key required ([API reference](https://fuul.readme.io/reference/get_v1-incentives)):

```typescript
// GET /v1/incentives?protocol=your-protocol-code
```

The response includes TVL and APR per conversion:

```json
{
  "conversions": [
    {
      "name": "Deposit USDC",
      "tvl": "12500000.00",
      "apr": "0.145",
      "liquidity_pool_protocol": {
        "code": "morpho-vaults",
        "name": "Morpho Vaults"
      }
    }
  ]
}
```

Display `apr` as a percentage (e.g., `0.145` → `14.5% APR`).

## Protocol support

| Protocol type                              | TVL source                    |
| ------------------------------------------ | ----------------------------- |
| **Uniswap V3 and V3-style DEXs**           | Subgraph query                |
| **Lending pools** (Morpho, Compound, etc.) | `totalSupply()` contract call |
| **Morpho Vaults**                          | Subgraph query                |
| **Euler V2 looping**                       | Subgraph query                |

## Use cases

* Show depositors the current APR next to each incentive
* Display protocol TVL to signal liquidity depth and program health
* Build comparison tables of multiple active incentives with their live rates

{% hint style="info" %}
APR is calculated based on the reward rate configured in your program divided by the current TVL. It updates automatically as TVL changes — no manual refresh needed.
{% endhint %}
