unbound

Read API

The app serves what its indexer knows over three read-only JSON endpoints, at the app's own address (for example https://app.your-domain/api/...). There's no key and no write access.

Amounts are in base units, as strings, because they can exceed what a JavaScript number holds exactly: lamports for SOL (1 SOL = 1,000,000,000), millionths for USDC, and the token's own decimals for tokens. Prices are numbers, in the quote token per whole token. Times are Unix seconds.

GET /api/launches

Every Unbound launch the indexer has seen, or one with ?mint=.

Parameter
mintOptional. A token's mint address.
[
  {
    "mint": "3AkzSyqA1f16jtS7iqeN1ugA4LwMRNWDXk7kF5T51KuV",
    "pool": "6TEGAtrjQwusMAHeiSVEg931binBKZHBi7sdVDDXWSbi",
    "createdAt": 1792046903,
    "completedAt": null,
    "migrated": false,
    "lastPrice": 3.0064e-8,
    "volume24h": "8572443955",
    "trades": 9
  }
]
Field
poolThe launch's DBC pool, so you can read it directly.
createdAtWhen trading opened. null until the indexer has read the launch's first transaction.
completedAtWhen the curve completed, or null.
migratedMoved to its Meteora pool.
lastPricePrice after the latest trade, or null before any trade.
volume24hQuote token traded in the last 24 hours, base units.
tradesAll trades so far.

Only on-chain state the indexer derives is here. Names, supply, reserves and fees owed come from the chain itself, for example through the SDK's getLaunches.

GET /api/trades

A launch's trades, newest first, 50 at a time.

Parameter
mintRequired.
beforeOptional. A trade id: returns the 50 trades before it (for paging back).
[
  {
    "id": 13,
    "signature": "5bcy…wCGz",
    "side": "buy",
    "trader": "Hacv…NU8p",
    "quoteAmount": "50000000",
    "baseAmount": "1644762000000",
    "fee": "500000",
    "price": 3.0064e-8,
    "timestamp": 1792049870
  }
]

quoteAmount is what the buyer paid including the fee, or what the seller received after it. fee is the whole trading fee. price is the price after the trade.

GET /api/candles

Price candles for a chart.

Parameter
mintRequired.
interval1m, 5m (default), 15m, 1h, 4h or 1d.
[{ "time": 1792049700, "open": 3.0e-8, "high": 3.04e-8, "low": 3.0e-8, "close": 3.0064e-8, "volume": 0.05 }]

Oldest first, only for intervals that had trades. time is the start of the interval; volume is in whole quote tokens. A candle opens at the previous trade's price (the launch's start price for the first one).

Errors

StatusWhen
400A missing or invalid parameter; the body says which: { "error": "mint must be a token address" }
404/api/candles for a launch the indexer hasn't picked up yet.
503The indexer isn't running.

The endpoints don't send CORS headers, so browsers only allow them from the app itself; call them from a server or a script.