Skip to content

x402 Algorand DEX prices API

This API returns the price of any Algorand asset (ASA) at any round or time since round 19,247,000. Prices come from the on-chain state of DEX pools. It costs 0.001 USDC per call, paid with x402.

  • Endpoints: GET https://x402.api.nodely.io/v1/prices/{price,history,pairs,pools}.
  • A call that finds no data isn’t charged, and neither is a call rejected as invalid (400).
  • The same data is free, with a rate limit, at algoprices.api.nodely.io. Use x402 when you want to pay per call instead of hitting that limit.

The state of every pool is replayed from its on-chain state changes, so a price is exact to the round. Pools come from Tinyman V2, Pact, Pact StableSwap, Pact weighted, Humble, Algofi, LiquiHog and Biatec. Mint and redeem rates of tALGO, xALGO and Folks lending are tracked as well.

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.

Using the 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());

Free routes in this namespace: