Glossary

What each metric means, its exact formula, the API request behind it, and why it can differ from other explorers.

For AI agents: llms.txt

APY (α / τ / $)

Your annualised return over a trailing window. α counts only the alpha you earned, τ adds what the alpha did against TAO, $ adds what TAO did against the dollar.

FormulaOrganic return = (end value rebuilt as if you had never deposited or withdrawn − starting value) / starting value, annualised over the days actually observed. A gain annualises linearly, × 365/days. A loss compounds, ((end / start)^(365/days) − 1), and reads exactly −100% only when the position is emptied. The alpha leg of your own flows is removed then repriced at the end of the window; the TAO leg is removed at the amount that actually moved.

The asymmetry is deliberate: a linear gain stays readable on a young position, while a compounded loss cannot print below −100%, which is the real floor. The starting point is not simply the first day you held something: it is the first day you held at least 1% of your peak alpha for that window, which is what stops a dust prefix from printing an astronomical return, and it is why "days observed" can be shorter than the window you picked. The three dimensions answer three different questions and diverge on purpose: a positive α with a negative τ means you earned tokens while their price fell. Empty cells have several causes, not one: an alpha return above 1000% blanks all three (the guard against emission-funded and faucet wallets, with the absolute change shown instead), a wallet holding only root or free TAO has no alpha dimension at all so that one alone stays empty, and a window with no qualifying starting day is empty throughout. On a 30-day window the app flags a sample shorter than 15 observed days.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldapy.alpha, apy.tao, apy.usd, apy.days_observed (each keyed 7d / 30d / all)

The confidence rules on top of it are ours.

Cost basis (WAC / FIFO) & USD method

Two ways of deciding what a token cost you. WAC averages every purchase into one blended price. FIFO matches each sale against your oldest purchases. Then two ways of putting that in dollars: "throughout" records the dollar value at every trade, "then" computes the result in TAO and converts it at today's rate.

FormulaWAC: one running (quantity, cost) pair per hotkey and subnet. A buy adds its cost, a sale drains the cost pro-rata, staking rewards enter at zero cost, and an internal swap carries its cost across to the destination subnet. FIFO: the same events against a queue of lots, oldest consumed first. usd_throughout books each leg at the TAO/USD rate of the day it happened; usd_then converts the finished TAO result at today's rate

WAC is smoother and easier to read; FIFO is what most tax regimes expect. Likewise "throughout" is the rigorous accounting answer and the only one that adds up over time, while "then" reprices your whole history at today's rate. Never read a difference between two dates in "then" mode: a week in which you did not trade at all can show a dollar gain or loss purely from the TAO/USD move, sometimes with the opposite sign to your TAO result. Where the toggles apply is narrower than it looks: the four flavours are all served, but only the PnL dialog lets you switch between them. The holdings table is fixed on WAC in TAO, and the CSV export always writes FIFO with the throughout dollars, whatever you had selected.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.*.tao.{wac,fifo}, pnl.*.{usd_throughout,usd_then}

PnL (Realized / Unrealized)

Realized is the profit or loss you have actually booked by closing positions. Unrealized is what you are up or down on what you still hold.

FormulaRealized: for every real sale, and every burn, the proceeds minus the cost basis consumed. Unrealized: what you hold on-chain × the latest hourly close of its subnet (root 1:1), minus the cost basis left against it

Unrealized marks your alpha at the hourly closing price, with no fee and no slippage, so it reads higher than the exit-value pricing used for validator and account totals: it answers "what is it worth", not "what would I get". Moving alpha between subnets or hotkeys realizes nothing, it carries its cost across; a burn, on the other hand, realizes the full loss. Sending stake to another wallet books a real disposal at the market price inside Realized, and receiving it opens a fresh position at the price on arrival rather than inheriting the sender's basis. Both figures come in a WAC and a FIFO flavour (see Cost basis) and in two USD flavours. Realized 24h is the change since the previous daily snapshot rather than a rolling 24 hours, so it steps once a day; the baseline is anchored to the snapshot date, so a late sync shifts the window instead of breaking it, and the payload names the date it started from. Unrealized 24h is a different animal: a live trailing window, what you hold right now × (price now − price 24 hours ago), recomputed on every request with no cost basis involved, so it moves with the market all day and exists from the first day you hold something.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.realized, pnl.unrealized (each: tao.wac, tao.fifo, usd_throughout, usd_then); rolling_24h.unrealized_tao (live 24h, global and per subnet)

Computed over your whole trade history.

Spot vs Realizable

Spot prices your tokens at the pool price, as if size did not matter. Realizable estimates what you would actually receive selling them through the pool, fee and slippage included.

Formulaspot = alpha held × the pool price; realizable = the alpha, less the subnet fee taken off the input, pushed through the weighted pool curve

The gap between the two is the honest cost of your own size: it widens with the position and with how thin the pool is. Note the fee comes off before the curve, not after. The simulation runs once per subnet on your whole alpha there, then splits the result pro-rata, so per-position figures DO add up to the subnet total and the subnets add up to the portfolio; what is true is that any one position sold on its own would fetch more per alpha than its share of the joint sale. For reference the chain refuses any single swap larger than 1000× the input-side reserve, but that guard is far beyond any real position and the simulation here does not model it.

Data source
GET https://api.taoswap.org/v2/subnets/

Response fieldresults[].root_in_pool, results[].alpha_in_pool

Realizable is simulated against the pool reserves, read live from the chain.

Stake transfers (in / out)

Alpha or TAO you moved to or received from another wallet, valued at the price when it moved. Shown for context, never added on top of your totals.

FormulaStake transfers: alpha that entered or left this wallet through a wallet-to-wallet transfer, counted at the TAO value the chain recorded for the move, plus its dollar value at that date. TAO transfers: plain TAO in and out of the free balance, whole-wallet only. Both are all-time cumulative

A transfer out is already counted inside Realized as a disposal at market price, which is why adding these on top would double-count. On the receiving side the alpha arrives with a fresh cost basis at the market price of the day rather than the sender's basis, so moving stake between two wallets you both own resets your entry price. Moving alpha between your own hotkeys or subnets is a different operation and is not counted here at all.

API request
GET https://api.taoswap.org/portfolio-pnl-apy/?account=<coldkey>

Response fieldpnl.transfer_stake_in / _out, pnl.transfer_tao_in / _out

Cumulative, all-time, valued at the market price when the transfer happened.

Value (τ) / Share

What a position is worth in TAO, and how much of the portfolio it represents.

FormulaSpot: value = alpha held × the pool price, free TAO and root at 1:1. Realizable: the subnet's whole alpha goes through the pool once and each position takes its pro-rata share. share = position value / portfolio total, both in the same mode

Live balances and pool reserves come straight from the chain, so the portfolio never lags behind your wallet. Switching to Realizable changes the value, and therefore every share, at once. If the chain connection drops, the app falls back to the API for the subnet list, which carries neither the pool weights nor the per-subnet fee, and Realizable quietly becomes a rougher estimate.

Data source
GET https://api.taoswap.org/portfolio-balance/?account=<coldkey>

Live positions are read from the chain, the balance chart is the historical record.