Skip to main content
The GraphQL API is generated by Ponder from the indexer’s schema, so every table follows the same shape. Learn the conventions once and every query page reads the same way.

Two queries per table

Each table gets a singular query keyed by its primary key and a plural query that lists rows.
Ponder pluralises by appending s, so the plural queries are launchs and currencys, not launches and currencies.
The plural queries take the same arguments everywhere:
totalCount is only computed when you select it, so leave it out of queries you run often.

Pagination

Page forward with after: endCursor while hasNextPage is true, keeping where, orderBy and orderDirection identical between calls:
Cursors are opaque strings tied to the ordering; do not build them by hand.

Filters

The where object accepts the column name for equality plus operator suffixes. Which suffixes exist depends on the column type: Bigint comparisons take the value as a string:
Hex values are stored lowercase, so always lowercase addresses, transaction hashes, pool ids and codes in filters. A checksummed address does not match.

Currency codes

Currencies are keyed by their bytes32 code: the ASCII code right-padded with zeros, written as a 66-character hex string. INR is
Tables that have a decoded text column (launch.currency, currency.symbol) let you filter on the readable code instead. rate, vaultEvent and vaultSnapshot only carry the hex code, so encode it first:
USD is always registered. Its rate is fixed at 1e18 and never appears in rates.

Relations

Relations let you nest one table inside another instead of issuing a second query. Nested lists take the same where, orderBy, orderDirection and limit arguments.

Scalars and units

Every bigint column is returned as a decimal string, and every hex column as a lowercase 0x string. Timestamps are unix seconds. A USD price for display is priceQuote / rate. A price in any other currency is the USD price multiplied by that currency’s rate. The units page explains the same conventions from the contract side.
quoteDecimals on the launch tells you how to turn quote units back into the token’s own unit: divide by 10^(18 - quoteDecimals) to get the raw ERC-20 amount, or by 1e18 to get a human amount of the currency.

Semantics worth knowing

  • trade.priceQuote is the execution price of that trade, quoteAmount / tokenAmount. launch.lastPriceQuote and the candles use the spot price after the trade: the curve’s spotPrice() recomputed from the event’s tokensSold and realQuote while the launch is on the curve, and the pool price derived from sqrtPriceX96 after graduation.
  • A buy’s quoteAmount is the gross quote paid, fee included. A sell’s quoteAmount is the net quote received. fee is stored separately in both cases. For pool swaps fee is an estimate: the pool fee in pips applied to the input amount and converted to quote units.
  • trade.trader is the transaction sender. The contract-level caller is normally the Router or the Factory.
  • holder rows exclude the bonding curve, the Uniswap v4 PoolManager and the burn address, and rows are deleted when a balance reaches zero, so launch.holderCount equals the number of holder rows for that launch.
  • vaultSnapshot reads vault.status() at the event’s block. When status() reverts because the oracle price is older than its stale limit, the same accounting is recomputed from vault.assets() and the last known rate, and the row is written with fresh: false.
  • currency rows are seeded from the registry the first time any handler needs them and kept in sync by CurrencySet and RatePosted. The oracle may post codes the registry does not list; those land in rates without a currency row.
  • On Robinhood Chain post-graduation swaps are not indexed (see how the data is produced). tradeCount, volumeQuote and the candles of a graduated launch cover its curve phase only there.

HTTP endpoints

The non-GraphQL routes (/health, /ready, /status, /metrics) and the web app’s /api/chains and /api/deployment are described by the OpenAPI document in this section’s “HTTP endpoints” group, with an interactive playground per endpoint. POST /graphql is listed there too so you can try a query without leaving the docs.