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,pairsandpoolsare 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.candlesandaccountare x402 only.
How prices are computed
Section titled “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 forusdc, in USDalgo, in ALGO
Assets and times
Section titled “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).
GET /v1/prices/price
Section titled “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 |
{ "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 }}GET /v1/prices/history
Section titled “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 |
{ "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 } ]}GET /v1/prices/pairs
Section titled “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 |
GET /v1/prices/pools
Section titled “GET /v1/prices/pools”The pools that hold an asset (asset, required): venue, pool id, app id, both assets, fee and first round.
GET /v1/prices/candles
Section titled “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):
{ "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 } ]}GET /v1/prices/account
Section titled “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_usdisassets_usd - debt_usd;total_algois the same in ALGO.total_liquid_usdnets each asset across positions and caps it at the asset’s routed liquidity, which is what a sale could realize.over_liquiditylists the assets it caps.by_protocol_usdandby_kind_usd(balance, liquidity, deposit, loan, stake, …) break the total down.positionslists every position: protocol, kind, value, the app and escrow account holding it, and each asset leg with amount, price and liquidity.unpricedlists assets without a route, which are left out of the totals.unvaluedlists positions found but not decodable, andnot_checkedlists 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": []}Example
Section titled “Example”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:
/v1/prices/pricing/v1/prices/health/v1/prices/status, which shows how far the dataset is built/v1/prices/openapi.json