Title: x402 Algorand DEX prices and account value API
Source: https://nodely.io/docs/x402/prices/

# x402 Algorand DEX prices and account value API

This API returns the price of any Algorand asset (ASA) at any round or time since round 19,247,000, OHLC candles for charts, and the total USD value of an Algorand account across its wallet, DeFi and staking positions. Prices come from the on-chain state of DEX pools. It is paid with [x402](https://nodely.io/docs/x402/payment) in USDC on Algorand. This API doesn’t take payment on Base or Arc.

| Endpoint | Price |
| --- | --- |
| `GET https://x402.api.nodely.io/v1/prices/{price,history,pairs,pools,candles}` | 0.001 USDC per call |
| `GET https://x402.api.nodely.io/v1/prices/account` | 0.002 USDC per call |

-   A call that finds no data isn’t charged (`404`), and neither is a call rejected as invalid (`400`).
-   `price`, `history`, `pairs` and `pools` are also free, with a rate limit, at [algoprices.api.nodely.io](https://algoprices.api.nodely.io/v1/api-docs/). Use x402 when you want to pay per call instead of hitting that limit. `candles` and `account` are x402 only.

<a id="how-prices-are-computed"></a>

## How prices are computed

The state of every pool is replayed from its on-chain state changes, so a price is exact to the round. Pools come from 12 venues: Tinyman V2, Pact, Pact StableSwap, Pact weighted, Humble, Algofi, LiquiHog, Biatec and NanoSwap, plus the mint and redeem rates of tALGO, xALGO and Folks lending.

A USD price is a route search to USDC across the pools, weighted by liquidity. A price in any other quote asset is the ratio of the two USD prices. Every price carries three numbers:

-   `price`, in the quote you asked for
-   `usdc`, in USD
-   `algo`, in ALGO

<a id="assets-and-times"></a>

## Assets and times

Wherever a parameter takes an asset (`asset`, `quote`), you can pass an ASA id, `algo` (= 0) or `usdc` (= 31566704). Times (`ts`, `from`, `to`) take unix seconds, RFC 3339 or `YYYY-MM-DD` (UTC).

<a id="get-v1pricesprice"></a>

## `GET /v1/prices/price`

The price of an asset at one round or one time.

| Parameter | Notes |
| --- | --- |
| `asset` | Required |
| `quote` | Default `usdc` |
| `round` or `ts` | One of them. Omit both for the latest price |
| `details` | `1` lists every pool quote used: venue, pool, intermediate asset, implied USD price, weight, and whether it was kept |
| `min_liq` | Minimum pool liquidity in USD for routing, default 50 |
| `max_hops` | Maximum route length to USDC, default 4 |
| `stale_days` | Ignore pools with no activity for this many days, default 30 |
| `max_dev` | Drop pool quotes further than this fraction from the median, default 0.2 |

```json
{
  "asset": { "id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6 },
  "quote": { "id": 31566704, "unit": "USDC", "name": "USDC", "decimals": 6 },
  "round": 65552798,
  "ts": "2026-10-01T00:00:00Z",
  "price": 0.12426479033114125,
  "usdc": 0.12426479033114125,
  "algo": 1,
  "asset_usd": { "usd": 0.12426479033114124, "liquidity_usd": 1035359.008177, "hops": 1 },
  "quote_usd": { "usd": 1 }
}
```

<a id="get-v1priceshistory"></a>

## `GET /v1/prices/history`

Prices over a time range, split into equal-width bins. Each point is the price at the end of its bin.

| Parameter | Notes |
| --- | --- |
| `asset`, `from`, `to` | Required |
| `quote` | Default `usdc` |
| `bins` | Number of bins, default 100, at most 2000 |
| `min_liq`, `max_hops`, `stale_days`, `max_dev` | As for `price` |

```json
{
  "from": "2026-10-01T00:00:00Z",
  "to": "2026-10-03T00:00:00Z",
  "bin_seconds": 86400,
  "pools": 8,
  "points": [
    { "ts": "2026-10-02T00:00:00Z", "price": 0.12227, "usdc": 0.12227, "algo": 1, "liquidity_usd": 1025247.3 },
    { "ts": "2026-10-03T00:00:00Z", "price": 0.12720, "usdc": 0.12720, "algo": 1, "liquidity_usd": 1046091.07 }
  ]
}
```

<a id="get-v1pricespairs"></a>

## `GET /v1/prices/pairs`

All pairs with a live pool on a day, with reserves, volume and TVL.

| Parameter | Notes |
| --- | --- |
| `date` | `YYYY-MM-DD` (UTC), default the last finalized day |
| `active` | `1` returns only pairs with at least one swap that day |
| `min_tvl` | Minimum TVL in USD |
| `kind` | `amm` returns tradable pools only; `rate` returns mint/redeem and lending rate venues only |

<a id="get-v1pricespools"></a>

## `GET /v1/prices/pools`

The pools that hold an asset (`asset`, required): venue, pool id, app id, both assets, fee and first round.

<a id="get-v1pricescandles"></a>

## `GET /v1/prices/candles`

OHLC candles in USD for charts, in bins aligned to UTC (weeks start on Monday), at most 2000 per call. Each candle is the **main pool’s**: of the asset’s AMM pools with activity in the bin, the one holding the most of the asset at the bin’s open, with at least `min_liq` USD of depth and a USD close within `max_dev` of the asset’s routed price. `volume_usd` sums the traded amount over all of the asset’s AMM pools.

| Parameter | Notes |
| --- | --- |
| `asset`, `from`, `to` | Required. `from` is floored to its bin; `to` is rounded up to the end of its bin and clamped to the indexed tip |
| `interval` | `1h` (default), `2h`, `4h`, `6h`, `8h`, `12h`, `1d` or `1w` |
| `min_liq` | Minimum main-pool depth in USD at the bin’s open, default 50 |
| `max_dev` | Maximum deviation of the main pool’s USD close from the routed price, default 0.2 |

Bins without a candle are left out. The bin still open at the tip is included with `partial: true` and changes until it closes. `pool_switch: true` marks a candle whose main pool differs from the previous one. A close can differ slightly from `/v1/prices/history`, which is a routed price over all pools. A range with no candle answers `404` and isn’t charged.

The shape of a response (illustrative values):

```json
{
  "asset": { "id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6 },
  "quote": "usd",
  "interval": "1d",
  "interval_seconds": 86400,
  "from": "2026-11-01T00:00:00Z",
  "to": "2026-11-03T00:00:00Z",
  "candles": [
    {
      "ts": "2026-11-01T00:00:00Z",
      "open": 0.0951, "high": 0.0968, "low": 0.0933, "close": 0.0942,
      "volume_usd": 412000, "liquidity_usd": 610000,
      "swaps": 9800, "events": 10400, "pools": 9,
      "pool": { "venue": "tinyman2", "pool_id": 1002590888, "pair_asset": 31566704 },
      "pool_switch": false
    }
  ]
}
```

<a id="get-v1pricesaccount"></a>

## `GET /v1/prices/account`

The total value of an Algorand account at the chain tip, in USD and ALGO, across its wallet, DeFi and staking positions. It costs **0.002 USDC per call**.

| Parameter | Notes |
| --- | --- |
| `address` | Required, a 58-character Algorand address |
| `min_liq`, `max_hops`, `stale_days`, `max_dev` | As for `price` |

What is counted:

-   **Wallet:** the ALGO balance (including the minimum balance) and every ASA except single-unit NFTs.
-   **Liquidity:** LP tokens of Tinyman v1 and V2, Pact, Pact StableSwap, Pact weighted, NanoSwap, Humble, LiquiHog and Algofi pools, as the account’s share of the pool reserves (pools without recent trades included).
-   **Lending:** Folks Lending v2 and v1, Algofi v1 and v2, CompX, DorkFi and MagnetFi: deposits, collateral, and loans as debt with accrued interest (a loan’s net value is floored at 0).
-   **Staking:** Pact farms, Algofi staking, Reti pools, the HAY staking box, Alpha-style stakes, TINY locked in the Tinyman governance vault (veTINY), Tinyman Staked tALGO; tALGO, xALGO and Myth dualSTAKE tokens at what their contract pays on redemption now. Unclaimed rewards are counted and shown in `rewards_usd`.
-   **Other:** PEX positions, Alpha Arcade outcome shares, Vestige token locks, Tinyman v2 order escrows, the ARC-59 inbox and Tinyman v1 redeemable excess.

Every amount is priced by the same routed DEX prices as `/v1/prices/price`. In the response:

-   `total_usd` is `assets_usd - debt_usd`; `total_algo` is the same in ALGO.
-   `total_liquid_usd` nets each asset across positions and caps it at the asset’s routed liquidity, which is what a sale could realize. `over_liquidity` lists the assets it caps.
-   `by_protocol_usd` and `by_kind_usd` (balance, liquidity, deposit, loan, stake, …) break the total down.
-   `positions` lists every position: protocol, kind, value, the app and escrow account holding it, and each asset leg with amount, price and liquidity.
-   `unpriced` lists assets without a route, which are left out of the totals. `unvalued` lists positions found but not decodable, and `not_checked` lists sources that could not be read.

An address never seen on chain answers `404` and isn’t charged.

An example answer for `H3A7GQA62RWHF2B7M7VOB3WFEZXCTL63J56SFITK7PAJ6OWLCCQYVR6UTI`, an account with positions in 16 protocols, among them a DorkFi loan (debt and collateral, the tALGO collateral valued at its burn rate), LP in four venues, farm and staking rewards, a veTINY lock, a Tinyman order and an ARC-59 inbox. The live answer has 76 positions; this one keeps the largest of each protocol and kind, at most two asset legs each, and one entry of each list:

```json
{
  "address": "H3A7GQA62RWHF2B7M7VOB3WFEZXCTL63J56SFITK7PAJ6OWLCCQYVR6UTI",
  "round": 66791198,
  "ts": "2026-11-09T13:14:14Z",
  "total_usd": 11117.1129,
  "total_algo": 120584.5686,
  "total_liquid_usd": 11108.1568,
  "over_liquidity": [
    {"asset": {"id": 2700230095, "unit": "BURNS", "name": "Mr. Burns", "decimals": 8}, "usd": 59.3352, "liquidity_usd": 50.3791}
  ],
  "assets_usd": 12542.9758,
  "debt_usd": 1425.8629,
  "rewards_usd": 4.4732,
  "algo_usd": 0.0921935,
  "by_protocol_usd": {"arc59_inbox": 0, "backed_token": 0.0132446, "compx": 0.405364, "dorkfi": 1289.9156, "haystack": 101.4902, "liquihog": 24.1925, "pact": 0.024473, "pact_farm": 4539.344, "pactw": 467.5531, "staking": 0.393108, "tinyman2": 2112.8725, "tinyman_orders": 2.1108, "tinyman_stalgo": 4.54214e-06, "tinyman_vault": 362.6134, "vestige_lock": 0.207689, "wallet": 2215.9769},
  "by_kind_usd": {"balance": 2215.9769, "claimable": 0, "deposit": 0.405364, "liquidity": 2604.6426, "loan": 1289.9156, "lock": 362.8211, "order": 2.1108, "receipt": 0.0132446, "stake": 4641.2274},
  "algo": {"balance": 323.225, "min_balance": 286.9045},
  "positions": [
    {
      "protocol": "wallet",
      "kind": "balance",
      "usd": 2215.9769,
      "unpriced_legs": 81,
      "assets": [
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 323.225, "price_usd": 0.0921935, "usd": 29.7992, "liquidity_usd": 904023.8123},
        {"asset": {"id": 2154668640, "unit": "MOOJ", "name": "MoonJuiceRocketFuel", "decimals": 8}, "amount": 485000.4958, "price_usd": 0.00205084, "usd": 994.6567, "liquidity_usd": 7696.1189}
      ]
    },
    {
      "protocol": "pact_farm",
      "kind": "stake",
      "app": 3744606182,
      "usd": 2059.2378,
      "assets": [
        {"asset": {"id": 2994233666, "unit": "POW", "name": "Power", "decimals": 6}, "amount": 6500000, "price_usd": 0.000316799, "usd": 2059.1952, "liquidity_usd": 8566.4383},
        {"asset": {"id": 2994233666, "unit": "POW", "name": "Power", "decimals": 6}, "amount": 134.5136, "reward": true, "price_usd": 0.000316799, "usd": 0.0426138, "liquidity_usd": 8566.4383}
      ]
    },
    {
      "protocol": "dorkfi",
      "kind": "loan",
      "app": 3333688282,
      "usd": 1289.9156,
      "assets": [
        {"asset": {"id": 31566704, "unit": "USDC", "name": "USDC", "decimals": 6}, "amount": 1202.1183, "debt": true, "price_usd": 1, "usd": -1202.1183},
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 10314.9782, "price_usd": 0.0921935, "usd": 950.9739, "liquidity_usd": 904023.8123, "via": {"lp_asset": 2537013734, "lp_amount": 9359740975, "venue": "talgo", "pool_id": 2537013674, "share": 0.000292348}}
      ]
    },
    {
      "protocol": "tinyman2",
      "kind": "liquidity",
      "usd": 392.037,
      "assets": [
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 2128.0853, "price_usd": 0.0921935, "usd": 196.1956, "liquidity_usd": 904023.8123, "via": {"lp_asset": 3760582745, "lp_amount": 5555180723, "venue": "tinyman2", "pool_id": 3760582745, "share": 0.83306}},
        {"asset": {"id": 3760522314, "unit": "STACKED", "name": "STACKED", "decimals": 6}, "amount": 14712.6763, "price_usd": 0.0133111, "usd": 195.8414, "liquidity_usd": 1642.6592, "via": {"lp_asset": 3760582745, "lp_amount": 5555180723, "venue": "tinyman2", "pool_id": 3760582745, "share": 0.83306}}
      ]
    },
    {
      "protocol": "tinyman_vault",
      "kind": "lock",
      "app": 2200606875,
      "note": "locked until 2029-02-08",
      "usd": 362.6134,
      "assets": [
        {"asset": {"id": 2200000000, "unit": "TINY", "name": "TINY", "decimals": 6}, "amount": 569130.045, "price_usd": 0.000637136, "usd": 362.6134, "liquidity_usd": 35017.7533}
      ]
    },
    {
      "protocol": "pactw",
      "kind": "liquidity",
      "app": 3754618063,
      "usd": 156.163,
      "assets": [
        {"asset": {"id": 3738683004, "unit": "CRED", "name": "Colony Credit", "decimals": 6}, "amount": 6341778.9625, "price_usd": 1.25023e-05, "usd": 79.287, "liquidity_usd": 3205.5329, "via": {"lp_asset": 3754618066, "lp_amount": 4446734080043, "venue": "pactw", "pool_id": 3754618063, "share": 1.0}},
        {"asset": {"id": 3738669733, "unit": "DUCAT", "name": "DUCAT", "decimals": 6}, "amount": 3129029.2975, "price_usd": 2.45687e-05, "usd": 76.8761, "liquidity_usd": 6378.0442, "via": {"lp_asset": 3754618066, "lp_amount": 4446734080043, "venue": "pactw", "pool_id": 3754618063, "share": 1.0}}
      ]
    },
    {
      "protocol": "haystack",
      "kind": "stake",
      "app": 3321763884,
      "usd": 101.4902,
      "assets": [
        {"asset": {"id": 3160000000, "unit": "HAY", "name": "Haystack", "decimals": 6}, "amount": 11999.2179, "price_usd": 0.00845663, "usd": 101.473, "liquidity_usd": 48854.5026},
        {"asset": {"id": 31566704, "unit": "USDC", "name": "USDC", "decimals": 6}, "amount": 0.016538, "reward": true, "price_usd": 1, "usd": 0.016538}
      ]
    },
    {
      "protocol": "liquihog",
      "kind": "liquidity",
      "app": 3730769955,
      "usd": 22.4902,
      "assets": [
        {"asset": {"id": 2700230095, "unit": "BURNS", "name": "Mr. Burns", "decimals": 8}, "amount": 599569.5186, "price_usd": 1.89953e-05, "usd": 11.389, "liquidity_usd": 50.3791, "via": {"lp_asset": 3730769968, "lp_amount": 16053064035714, "venue": "liquihog", "pool_id": 3730769955, "share": 1.0}},
        {"asset": {"id": 3728317002, "unit": "POVERTY", "name": "POVERTY", "decimals": 6}, "amount": 4429484.9464, "price_usd": 2.50621e-06, "usd": 11.1012, "liquidity_usd": 1016.0335, "via": {"lp_asset": 3730769968, "lp_amount": 16053064035714, "venue": "liquihog", "pool_id": 3730769955, "share": 1.0}}
      ]
    },
    {
      "protocol": "tinyman_orders",
      "kind": "order",
      "app": 3150295170,
      "account": "DA6RBEPGWENG3TWXW66JCLQ5SEJCDYRFEMYJ7JLSZZVQG5C52GS3GYL6GQ",
      "note": "open limit / recurring order funds",
      "usd": 2.1108,
      "assets": [
        {"asset": {"id": 31566704, "unit": "USDC", "name": "USDC", "decimals": 6}, "amount": 1.392, "price_usd": 1, "usd": 1.392},
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 7.7952, "price_usd": 0.0921935, "usd": 0.718667, "liquidity_usd": 904023.8123}
      ]
    },
    {
      "protocol": "compx",
      "kind": "deposit",
      "app": 3425976099,
      "note": "deposit receipt valued at the market's exchange rate",
      "usd": 0.405364,
      "assets": [
        {"asset": {"id": 2200000000, "unit": "TINY", "name": "TINY", "decimals": 6}, "amount": 636.2285, "price_usd": 0.000637136, "usd": 0.405364, "liquidity_usd": 35017.7533, "via": {"lp_asset": 3310764958, "lp_amount": 634138461, "venue": "compx", "pool_id": 3425976099, "share": 0.00244582}}
      ]
    },
    {
      "protocol": "staking",
      "kind": "stake",
      "app": 3626756314,
      "usd": 0.393108,
      "assets": [
        {"asset": {"id": 31566704, "unit": "USDC", "name": "USDC", "decimals": 6}, "amount": 0.393108, "reward": true, "price_usd": 1, "usd": 0.393108}
      ]
    },
    {
      "protocol": "vestige_lock",
      "kind": "lock",
      "app": 1128697057,
      "account": "KYHKUFNXJUJHZWVVILBPVBENFK7IUY24J7B6CXD3EMJLLDJCCIUKPIBA5M",
      "note": "tokens locked or vesting in a Vestige lock",
      "usd": 0.207689,
      "assets": [
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 2.2527, "price_usd": 0.0921935, "usd": 0.207689, "liquidity_usd": 904023.8123}
      ]
    },
    {
      "protocol": "pact",
      "kind": "liquidity",
      "app": 2614663940,
      "usd": 0.024473,
      "assets": [
        {"asset": {"id": 2154668640, "unit": "MOOJ", "name": "MoonJuiceRocketFuel", "decimals": 8}, "amount": 6.3003, "price_usd": 0.00205084, "usd": 0.012921, "liquidity_usd": 7696.1189, "via": {"lp_asset": 2614663946, "lp_amount": 6172458490, "venue": "pact", "pool_id": 2614663940, "share": 1}},
        {"asset": {"id": 2614577662, "unit": "ATARD", "name": "ALGOTARDIO", "decimals": 6}, "amount": 72481.8881, "price_usd": 1.59378e-07, "usd": 0.011552, "liquidity_usd": 7210.5784, "via": {"lp_asset": 2614663946, "lp_amount": 6172458490, "venue": "pact", "pool_id": 2614663940, "share": 1}}
      ]
    },
    {
      "protocol": "backed_token",
      "kind": "receipt",
      "app": 3338877570,
      "note": "valued as the issuing contract's holdings / circulating supply",
      "usd": 0.0132346,
      "assets": [
        {"asset": {"id": 0, "unit": "ALGO", "name": "Algorand", "decimals": 6}, "amount": 0.143552, "price_usd": 0.0921935, "usd": 0.0132346, "liquidity_usd": 904023.8123, "via": {"lp_asset": 3338881950, "lp_amount": 1, "venue": "backing", "pool_id": 3338877570, "share": 0.000891266}}
      ]
    },
    {
      "protocol": "tinyman_stalgo",
      "kind": "stake",
      "app": 2537022861,
      "note": "staked tALGO (decrease_stake returns it 1:1) plus unclaimed TINY rewards; claiming needs veTINY power >= 5,000",
      "usd": 4.54214e-06,
      "assets": [
        {"asset": {"id": 2200000000, "unit": "TINY", "name": "TINY", "decimals": 6}, "amount": 0.007129, "reward": true, "price_usd": 0.000637136, "usd": 4.54214e-06, "liquidity_usd": 35017.7533}
      ]
    },
    {
      "protocol": "arc59_inbox",
      "kind": "claimable",
      "app": 2449590623,
      "account": "VRKYZKT7ZAF3NXHPXNIWXRAAIKRWV6VCGBH6XWKJXFEMIVEPYWDJ5PJMFA",
      "note": "assets waiting in the ARC-59 inbox, claimable by the account",
      "usd": 0,
      "unpriced_legs": 2,
      "assets": [
        {"asset": {"id": 3292986008, "unit": "ALGNVCHR", "name": "Gift Allocation", "decimals": 0}, "amount": 1, "price_usd": null, "usd": null},
        {"asset": {"id": 3612111137, "unit": "MKV", "name": "Moon Kitten V3", "decimals": 6}, "amount": 10000, "price_usd": null, "usd": null}
      ]
    }
  ],
  "unpriced": [
    {"asset": {"id": 3179991867, "unit": "justtard", "name": "Just a Atardio", "decimals": 0}, "amount": 1, "protocol": "wallet"}
  ],
  "nfts": 714,
  "unvalued": [
    {"protocol": "compx", "app": 2400334372, "reason": "CompX gen1 cToken or cAlgo: market wound down 2026-01-30 (contract_state 2, cash removed) or unbacked; not redeemable", "raw_amount": 1}
  ],
  "not_checked": []
}
```

<a id="example"></a>

## Example

Using the Algorand paid fetch client from [Pricing & payment](https://nodely.io/docs/x402/payment#algorand-client):

```js
const res = await paidFetch("https://x402.api.nodely.io/v1/prices/price?asset=algo&ts=2026-10-01");
console.log(await res.json());

const acct = await paidFetch("https://x402.api.nodely.io/v1/prices/account?address=H3A7GQA62RWHF2B7M7VOB3WFEZXCTL63J56SFITK7PAJ6OWLCCQYVR6UTI");
console.log((await acct.json()).total_usd);
```

Free routes in this namespace:

-   [`/v1/prices/pricing`](https://x402.api.nodely.io/v1/prices/pricing)
-   [`/v1/prices/health`](https://x402.api.nodely.io/v1/prices/health)
-   [`/v1/prices/status`](https://x402.api.nodely.io/v1/prices/status), which shows how far the dataset is built
-   [`/v1/prices/openapi.json`](https://x402.api.nodely.io/v1/prices/openapi.json)
