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

# Data methodology

> What each PnL, APR, fee, impermanent loss, and risk figure represents.

Figures below are what the API returns. USD amounts and percents are decimal strings. `0` and `"0"` are a confirmed zero. `null` means the value is missing: a logo, a 24-hour price change, or a pagination URL.

## How the data is produced

Position state is read from protocol contracts and indexed in-house by protocol-specific indexers — 19 of them across 10+ chains. Every figure on this page is calculated from that indexed data and reconciled against on-chain state, with measured position-level accuracy of 99.79%.

## PnL

Uniswap V3 and Aerodrome V3 use the same definitions.

* `pnl_usd_value` — total profit or loss on the position: everything the position has returned (current value, withdrawals, claimed fees and claimed rewards) net of the capital deposited.
* `pnl_percentage` — that PnL relative to net invested capital, times 100. It is `0` when net invested capital is not positive.
* `realized_usd_value` — value already taken out: withdrawals plus claimed fees and claimed rewards.
* `unrealized_usd_value` — the current position value, which includes unclaimed fees and rewards.
* `position_usd_value` — token principal plus unclaimed fees and unclaimed rewards.

## APR

APR figures are simple (not compounded), annualized from the position's own history and capital.

* `earned_apr_percentage` — three percent strings: `yield` (fees plus rewards), `fees`, and `rewards`. Each is `0` when capital or total yield is not positive.
* `projected_yield_apr` — the yearly in-range APR. It applies only while the position is open and in range, and is `0` otherwise.
* `estimated_total_yield` — the observed average fee and reward pace, scaled to a day, week, month, and year. It is not the in-range projection.

## Fees, rewards, and impermanent loss

* `total_fees` — collected, compounded, and still-uncollected fees. `claimed_fees` is the collected part. `unclaimed_fees` is the uncollected part.
* `total_rewards`, `claimed_rewards`, `unclaimed_rewards` — the reward-token equivalents. Uniswap positions have no reward token, so those totals are `0`. Aerodrome rewards are AERO.
* On `.../events`, each row carries the token price at that transaction, and USD value is amount times that price. There is no separate historical price series.
* `pure_impermanent_loss` — the position compared with holding the net deposited tokens at the current price, token principal only.
* `net_impermanent_loss` — the same comparison using the current position value, so unclaimed fees and rewards are included.
* The matching `*_percentage` fields express that difference relative to the held value, and are `0` when either value is not positive.
* `hodl_gross_benchmark_usd_value` — every deposited token marked at the current price, without subtracting withdrawals. `market_pnl_usd_value`, `alpha_vs_hodl_gross_usd_value`, and `lp_divergence_pnl_usd_value` measure the position against that benchmark.

## Lending risk

* `at_risk` — true when the health factor is a finite number below 1.5. `MAX` and `∞` are not at risk. A summary's `total_at_risk` counts chains (Aave, Morpho) or obligations (Kamino) in that state.
* Health factor — each protocol's own liquidation-risk measure: `MAX` when there is no debt (Aave V3, Morpho), `∞` when LTV is 0 (Kamino).
* `target_health_factor` — the level used for safe-borrow and safe-withdraw figures. The default is 1.5.
* Morpho risk and yield are per market, so those routes require `market_id`. Aave risk, yield, events, and snapshots default `market_id` to `main`. Summary, the position list, the bundle, and batch return every market on the chain when you omit it. On Ethereum, `lido` and `horizon` are separate markets.
* Supply and borrow APY fields are the rates on the indexed position.

## Freshness

| Data | What you are reading |
| - | - |
| Uniswap V3 and Aerodrome V3 position, list, snapshot, PnL, and yield | Indexed position state. Snapshot, PnL, and yield use the indexed token price. |
| `.../full` | The same position, also calculated at the current token price. |
| `.../snapshots` on those two protocols | One row per UTC day: value, fees, rewards, and the yearly in-range fee APR. `timestamp` is unix seconds. |
| Aave V3 and Morpho positions, risk, and yield | Indexed lending state. |
| Aave and Morpho `.../snapshots` | Daily history. `max_snapshots` is how many UTC days to return. |
| Kamino obligation state | Live obligation state. History health factor uses liquidation LTV / LTV. |
| Portfolio balance and assets | Fetched live for that call. `meta.lastUpdatedAt` is unix milliseconds. A transient failure is 502. |

Orca has no events, snapshots, PnL, or yield route. See [Protocols and chains](/protocols) for which chain each protocol covers.


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