Skip to content

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 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. Use x402 when you want to pay per call instead of hitting that limit. candles and account are x402 only.

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

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).

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
{
"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 }
}

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
{
"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 }
]
}

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

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

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):

{
"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
}
]
}

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:

{
"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": []
}

Using the Algorand paid fetch client from Pricing & payment:

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: