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.
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 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 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.
Example
Section titled “Example”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:
/v1/prices/pricing/v1/prices/health/v1/prices/status, which shows how far the dataset is built/v1/prices/openapi.json