AgoraDevelopers
Guides ↗

Agora API

Every coin, trade, holder and wallet on every Elysium launchpad, and the best swap across all of them, from one API. It's the same data and swap routing agoradex.app runs on. Free to use: get a key in the Dashboard, and earn 30% of Agora's fee on every swap you send with your builder code.

Base URL

https://api.agoradex.app/api/v1

Auth

x-api-key header

Format

JSON, CORS open

Authentication & limits

Send your key in the x-api-key header (or ?key=). Keys are free: sign in with a wallet in the Dashboard to make up to 5. Keep them on your server.

With a key300 requests / minute per key
Without a key30 requests / minute per IP

Every response carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset (unix seconds). Need more? Reach out on X.

Builder rewards

Building a bot, wallet or terminal on Agora? Claim a builder code in the Dashboard and pass it as ref on /quote. Every swap with it pays you 30% of Agora's fee, on-chain, in HYPE, and your users get 10% off. The first trade with your code links the wallet to you for good, so you also earn on its later trades on agoradex.app. Claim any time.

swap
// 1. quote + build (with your builder code)
const q = await fetch("https://api.agoradex.app/api/v1/quote?token=0x…&side=buy&amount=0.5&recipient=" + user + "&ref=yourapp",
  { headers: { "x-api-key": KEY } }).then(r => r.json());
// 2. any approvals first (sells: ERC-20 approve, or Permit2 for Universal Router venues)
for (const a of q.approvals) { /* approve a.token to a.spender (via a.permit2 if kind == "permit2") */ }
// 3. send the transaction (Elysium, chain id 99901)
await wallet.sendTransaction({ to: q.transaction.to, data: q.transaction.data, value: BigInt(q.transaction.value) });

Errors

Errors come back with an HTTP status and one shape:

{ "error": { "code": "rate_limited", "message": "Rate limit: 300 requests a minute." } }

Codes: bad_address, bad_request, not_found, no_route, invalid_key, rate_limited, internal. Prices are numbers; on-chain amounts in /quote are wei strings. Times are ISO 8601. Fields are only ever added, never renamed or removed, within v1. The full spec: openapi.json.

Tokens

List tokens

GET /tokens

Every coin from every Elysium launchpad Agora aggregates, with price, market cap (HYPE and USD), change, volume, links and pool keys. Search, filter by launchpad, sort and page through them.

q

query · string

Search by name, symbol or address.

launchpad

query · string

Only this launchpad's coins (an id from /launchpads).

sort

query · string · volume

Order.

window

query · string · 24h

The window volume, gainers and trades sort by.

limit

query · integer · 50

Results per page, at most 100.

offset

query · integer · 0

Skip this many (paging).

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens?limit=5" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "tokens": [{
    "address": "0xd662…cf38", "name": "CHAMELEON", "symbol": "CHAMELEON",
    "image": "https://www.agoradex.app/api/img?src=…", "launchpad": "montra", "base": "HYPE",
    "verified": false, "tradable": true, "createdAt": "2026-11-05T03:14:39.000Z",
    "priceBase": 0.0000207, "priceHype": 0.0000207, "priceUsd": 0.00161,
    "marketCapHype": 20729.5, "marketCapUsd": 1610116,
    "change": { "1h": 0.67, "6h": 7.16, "24h": 2.12, "7d": 436.6 },
    "volumeHype": { "1h": 758.9, "6h": 2606.2, "24h": 7382.7, "7d": 12028.1 },
    "trades24h": 1819, "buys24h": 1099, "lastTradeAt": "2026-11-06T06:39:39.000Z",
    "url": "https://www.agoradex.app/token/0xd662…cf38",
    "creator": "0x…", "links": { "website": null, "x": "https://x.com/…", "telegram": null },
    "pools": [{ "venue": "Montra", "pool": "0x61a7…aac" }]
  }],
  "total": 8123, "limit": 5, "offset": 0
}

Get a token

GET /tokens/{address}

One coin: everything in the list, plus its creator, description, links, holder count, tax and the pools it trades in.

address *

path · string

The coin's contract address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens/0xd662d66ec991a3eae4ecbda34327264c53d4cf38" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xd662…cf38", "symbol": "CHAMELEON", "priceHype": 0.0000207, "…": "…",
  "creator": "0x…", "description": "…", "links": { "website": null, "x": "…", "telegram": null },
  "holders": 395, "tax": null,
  "pools": [{ "venue": "Montra", "pool": "0x61a7…aac" }]
}

Price candles

GET /tokens/{address}/candles

OHLC candles in the coin's base (HYPE or KNTQ), with volume. Pick a candle size with `interval` (1s to 1d), or a time span with `range`.

address *

path · string

The coin's contract address.

interval

query · string

Candle size. History: 1s: 15 min, 1m: 8 h, 5m: 2 days, 15m: 5 days, 1h: 20 days, 4h: 80 days, 1d: since launch.

range

query · string · 24h

Used when interval is not set: how far back, with a fitting candle size.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens/0xd662d66ec991a3eae4ecbda34327264c53d4cf38/candles" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xd662…cf38", "base": "HYPE", "range": "24h",
  "candles": [{ "time": "2026-11-05T06:30:00.000Z", "open": 0.00000663, "high": 0.00000664, "low": 0.00000648, "close": 0.00000648, "volumeBase": 6.57 }]
}

Recent trades

GET /tokens/{address}/trades

The coin's latest trades on every venue, newest first. `kind` marks arbitrage bots and $AGORA buyback burns.

address *

path · string

The coin's contract address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens/0xd662d66ec991a3eae4ecbda34327264c53d4cf38/trades" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xd662…cf38", "base": "HYPE",
  "trades": [{ "time": "2026-11-06T06:39:39.000Z", "side": "sell", "priceBase": 0.0000207, "amountBase": 10.61, "wallet": "0x…", "tx": "0xee70…b8ee" }]
}

Top holders

GET /tokens/{address}/holders

The coin's largest holders with their share of supply, value, cost basis and P&L (in the coin's base).

address *

path · string

The coin's contract address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens/0xd662d66ec991a3eae4ecbda34327264c53d4cf38/holders" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xd662…cf38", "count": 395, "updatedAt": "2026-11-06T06:39:48.976Z",
  "holders": [{ "wallet": "0xe2e1…23f1", "amount": 45157953.3, "shareOfSupply": 0.045, "valueBase": 936.1, "costBase": 512.4, "realizedBase": 0, "unrealizedBase": 423.7, "pnlBase": 423.7, "pnlPct": 0.83 }]
}

Bubble map

GET /tokens/{address}/bubbles

Who holds the coin and how those holders are connected. `nodes` are the top holders (tag: pool, burn, launchpad, or linker for a non-holder wallet that moved the coin between 2+ holders, such as a funder or bundler). `links` are transfers of the coin between them, and `clusters` are groups connected that way (often one owner, a bundle or a team). If `complete` is false, history is still being read, so call again in a few seconds.

address *

path · string

The coin's contract address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/tokens/0xd662d66ec991a3eae4ecbda34327264c53d4cf38/bubbles" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xd662…cf38", "complete": true, "progress": 1,
  "nodes": [
    { "wallet": "0xe2e1…23f1", "amount": 48484698.7, "shareOfSupply": 0.0485, "tag": "pool", "cluster": null },
    { "wallet": "0x710d…d021", "amount": 21000000, "shareOfSupply": 0.021, "tag": null, "cluster": 1 }
  ],
  "links": [{ "from": "0x710d…d021", "to": "0x99f2…6a25", "transfers": 1, "amount": 10000000 }],
  "clusters": [{ "id": 1, "wallets": 2, "shareOfSupply": 0.0364 }]
}

Wallets

Wallet portfolio

GET /wallets/{address}

A wallet's coins with value, cost and P&L in HYPE, its HYPE balance, and its trading totals.

address *

path · string

The wallet address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/wallets/0xe2e105d3f7209a9da11f83ccf3e7398a753823f1" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xe2e1…23f1", "isContract": false, "hypeBalance": 12.4, "hypeUsd": 77.6,
  "totals": { "worthHype": 20.68, "pnlHype": 4.92, "realizedHype": 6.96, "unrealizedHype": -2.04, "volumeHype": 15.39, "trades": 29, "buys": 23, "sells": 6, "firstSeen": "…", "lastActive": "…" },
  "holdings": [{ "token": "0x7a7a…c60b", "symbol": "ELYSP", "launchpad": "elyspump", "amount": 6016106.5, "shareOfSupply": 0.006, "valueHype": 20.68, "costHype": 22.7, "pnlHype": -2.04 }]
}

Wallet trades

GET /wallets/{address}/trades

A wallet's latest 100 trades across every launchpad, newest first.

address *

path · string

The wallet address.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/wallets/0xe2e105d3f7209a9da11f83ccf3e7398a753823f1/trades" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "address": "0xe2e1…23f1",
  "trades": [{ "time": "2026-11-03T15:28:09.000Z", "token": "0x7a7a…c60b", "symbol": "ELYSP", "side": "buy", "amount": 144.01, "amountBase": 0.00056, "base": "HYPE", "tx": "0xb4dc…" }]
}

Trading

Quote & build a swap

GET /quote

The best price for a buy or sell across every launchpad and DEX (or coin to coin with `payToken`), and, with `recipient`, the ready-to-sign transaction. Swaps go through AgoraRouter: pass your builder code as `ref` and you earn 30% of Agora's fee on every trade (your users get 10% off). Send any `approvals` first, then `transaction`. Also accepts POST with a JSON body.

token *

query · string

The coin to buy or sell.

side *

query · string

buy: spend HYPE. sell: sell the coin for HYPE.

amount *

query · string

HYPE to spend (buy) or coins to sell (sell), as a decimal.

recipient

query · string

The trader's wallet. Needed to get a transaction (and for the fee: $AGORA holders pay none).

ref

query · string

Your builder code (claim one in the Dashboard).

slippageBps

query · integer · 100

Max slippage in basis points, 10 to 5000.

pay

query · string

KNTQ-paired coins: HYPE to trade them with HYPE (routed through KNTQ).

payToken

query · string

Coin to coin: pay with this coin instead of HYPE (amount is in this coin; side is ignored). One transaction through AgoraHop: sells it for HYPE, buys token. Builder codes don't earn on coin-to-coin swaps.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/quote?token=0xd662d66ec991a3eae4ecbda34327264c53d4cf38&side=buy&amount=0.1" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "token": "0xd662…cf38", "side": "buy",
  "amountIn": "100000000000000000", "amountOut": "4765264362342729945029", "minAmountOut": "4717611718719302645578",
  "venue": "Montra", "priceImpact": 0.0102, "feeBps": 100, "builderCode": "yourapp",
  "venues": [{ "venue": "Montra", "amountOut": "4765264362342729945029" }],
  "approvals": [],
  "transaction": { "to": "0xaf8d…a295", "data": "0x07d9…", "value": "100000000000000000", "chainId": 99901 }
}

Launchpads

List launchpads

GET /launchpads

Every launchpad Agora aggregates: its id (for the tokens filter), name, site, X account, logo and number of coins.

Without a key: 30 requests a minute. Add your key above for 300.

curl "https://api.agoradex.app/api/v1/launchpads" \
  -H "x-api-key: YOUR_API_KEY"

Example response

{
  "launchpads": [{ "id": "boxa", "name": "BOXA", "site": "https://boxa.club", "x": "https://x.com/Boxa_Elysium", "logo": "https://www.agoradex.app/launchpads/boxa.jpg", "tokens": 4548 }],
  "otherTokens": 12
}