Aurelia

Prices API

GET/prices

The USD price of up to 100 tokens on any chains, now or at a past moment, and the swap each comes from. The cheapest read the API has.

GET /prices gives up to 100 tokens' USD prices on any chains in one request, now or at a past moment. Token lists and the token carry the same price with its changes; every trade carries priceUsd; the token channel pushes it as trades land.

A price is always the base token's: see Base, quote and side. A token that is never the base, such as USDC, is priced as the quote by /prices and in token lists, and has no price on its page.

Parameters

NameInTypeDefaultAllowed values
tokensquerystringrequiredUp to 100 <chain>:<address> items, comma-separated, on any chains: solana:So111…,evm:56:0xbb4c…
atqueryintegernowUnix ms: the price at that moment

Response

FieldTypeMeaning
prices[]arrayOne entry per item, in request order, or null for a token Aurelia has never stored.
prices[].chain, addressstringThe token.
prices[].priceUsdnumber | nullUSD price in the swap below. null when it was not priced, or when the token had no priced swap in the last 24 h (with at: none before then).
prices[].time, poolnumber | null, string | nullWhen and where that swap happened: unix ms, and the token's chart pool.
prices[].at, txnumber, string | nullWith at: the time asked for, and the swap's transaction.

Example

Captured 2026-09-28 18:03 UTC on a test instance.

curl -s -H 'Authorization: Bearer <key>' 'https://app.aurelia.build/api/prices?tokens=evm:56:0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777,solana:So11111111111111111111111111111111111111112,solana:Cs6pmAnogKf3eaouzrM4oCefKP34nVxoEQhtjT7Cpump'
{
  "prices": [
    {
      "chain": "evm:56",
      "address": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
      "priceUsd": 0.006,
      "time": 1790618578665,
      "pool": "0x702e6533e0182381606adbe3ccbb77f682ccc58b"
    },
    {
      "chain": "solana",
      "address": "So11111111111111111111111111111111111111112",
      "priceUsd": 150,
      "time": 1790618141920,
      "pool": "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2"
    },
    {
      "chain": "solana",
      "address": "Cs6pmAnogKf3eaouzrM4oCefKP34nVxoEQhtjT7Cpump",
      "priceUsd": 0.00000675,
      "time": 1790618141920,
      "pool": "8sN9549P3Zn6xpQRqpApN5jE6mHYrqJKeTsKr8idYDqi"
    }
  ]
}

Notes

  • Now: the token page's price, the latest swap where the token was the base in its chart pool, the pool where it was the base with the most USD volume over the last 24 hourly buckets. A priced swap worth under $0.01 sets no price. A token that is never the base, such as USDC or USDT, is priced as the quote in its busiest priced pool, where the token answers price: null.
  • Now is current to the last indexed block: the price comes from the token's newest swaps, kept in memory. Which pool is the chart pool is decided again every 30 s. A token whose chart pool has no swap among its 100 newest is read from history, and kept for a tenth of that swap's age: 2 s to a minute.
  • With at: of the latest hour at or before at in which the token was the base anywhere, the pool where it was the base with the most USD volume; in it, the last priced swap worth at least $0.01 at or before at. Only what Aurelia indexed: before indexing began, the fields are null. Kept an hour once at is 2 minutes old, 5 s before.
  • 400 when tokens is missing, holds more than 100 items or a malformed one (the error names it), or at is not a whole number. A token listed twice is answered twice. A warm batch is answered from memory; its misses are read together, in one database query.

Try it in the interactive docsCreate a free account