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
| Name | In | Type | Default | Allowed values |
|---|---|---|---|---|
tokens | query | string | required | Up to 100 <chain>:<address> items, comma-separated, on any chains: solana:So111…,evm:56:0xbb4c… |
at | query | integer | now | Unix ms: the price at that moment |
Response
| Field | Type | Meaning |
|---|---|---|
prices[] | array | One entry per item, in request order, or null for a token Aurelia has never stored. |
prices[].chain, address | string | The token. |
prices[].priceUsd | number | null | USD 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, pool | number | null, string | null | When and where that swap happened: unix ms, and the token's chart pool. |
prices[].at, tx | number, string | null | With 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 beforeatin 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 beforeat. Only what Aurelia indexed: before indexing began, the fields are null. Kept an hour onceatis 2 minutes old, 5 s before. 400whentokensis missing, holds more than 100 items or a malformed one (the error names it), oratis 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.