> ## Documentation Index
> Fetch the complete documentation index at: https://docs.o1.exchange/llms.txt
> Use this file to discover all available pages before exploring further.

# Read endpoints

> Search tokens and read launch, pool, wallet, claim, holder, and transaction state.

All read endpoints except `/health` require an API key. Product queries require an explicit `chain_id`; the API never combines chains implicitly.

## Endpoint summary

| Method and path                                        | Returns                                                             |
| ------------------------------------------------------ | ------------------------------------------------------------------- |
| `GET /health`                                          | Process health and build version                                    |
| `GET /config`                                          | Production contract configurations, paired assets, and capabilities |
| `GET /tokens`                                          | Browsable and ranked token summaries                                |
| `GET /tokens/search`                                   | Token search results                                                |
| `GET /creators/{address}/tokens`                       | Launches created by one wallet                                      |
| `GET /tokens/{chain_id}/{token_address}`               | Token, launch, pool, market, and announcement detail                |
| `GET /tokens/{chain_id}/{token_address}/trades`        | Canonical trades                                                    |
| `GET /tokens/{chain_id}/{token_address}/announcements` | Creator announcements                                               |
| `GET /tokens/{chain_id}/{token_address}/holders`       | Provider-backed holder snapshot                                     |
| `GET /wallets/{address}`                               | Compact launchpad wallet overview                                   |
| `GET /wallets/{address}/activity`                      | Structured wallet activity                                          |
| `GET /wallets/{address}/fee-claims`                    | Fee positions                                                       |
| `GET /transactions/{chain_id}/{tx_hash}`               | Indexed transaction and launchpad operation state                   |

`GET /health` is public liveness only: it returns service status, API version, build ID, and time. It requires no API key, consumes no API-key units, and can be called from browser or server integrations. It does not guarantee that Convex, Redis, RPC, Pinata, or transaction preparation is available.

Ordinary token, wallet, activity, claim, and transaction-status reads use the existing indexed or materialized launchpad data and do not add a chain RPC per request. Holder snapshots use their documented holder provider. Live contract and paired-asset sections in `/config`, swap operations, claim preparation, creator actions, and launch preparation verify the chain state they need.

## Live configuration

`GET /config` accepts `include=chains,suites,quotes`. The field names `suites` and `quotes` are retained for API compatibility; they represent launch contract configurations and paired assets. The default returns all three sections.

* `include=chains` uses the static production chain registry and does not call an RPC. Its chain capabilities report the launch token mode; Base activation is `not_checked`, while Robinhood, Monad and Arc are `not_applicable`.
* Contract or paired-asset sections are read at one chain block and include `as_of_block`. On Base, the same block also verifies B20 activation.
* `active_only=true` omits earlier contract configurations and paired assets that cannot create new launches.
* Stock-paired markets follow the shared public chain allowlist, platform catalog, and live factory state. An active response includes stock-paired support only when catalogued assets are registered on the live factory and creation is enabled.
* Each `suites` item exposes supported route codes, integration capabilities, contract addresses, current supply, `config_version`, and creation state. Capabilities identify creator rights, atomic launch-buy support, generic fee components, paired-asset revisions, and the creation switch without requiring clients to infer behavior from an identifier.
* The active Base and Robinhood configurations each report both `standard` (crypto-paired) and `rwa` (stock-paired) in `supported_routes` and expose their `launch_buy_adapter_address`.
* `contracts.swapx_router` identifies SwapX where configured. `universal_router` and `permit2` are optional; use the returned transaction steps rather than assuming every chain uses the same router.
* A creation fee appears only when its live amount is nonzero.

Base creation is available only when `chain.capabilities.b20_asset_status` is `active`. If ActivationRegistry cannot be verified, the API returns `503 temporarily_unavailable` instead of reporting a potentially executable route.

Earlier contract configurations remain available with `active_only=false` so direct integrations can resolve existing launches safely.

## Poll the paired-asset catalog

Use `GET /v1/config?chain_id=8453&market=all&include=chains,suites,quotes&active_only=false` with an `x-api-key` that has `config:read`. Change `chain_id` to `4663` for Robinhood `143` for Monad or `5042` for Arc. Quote rows are in `data.quotes`; factory references and creation fees are in `data.suites`. Use `data.as_of_block` for the live-state observation block.

The API combines the platform catalog with live registration checks. `active_only=false` includes configured entries that are not registered or not currently usable; `active_only=true` filters to creation-available entries. It does not discover arbitrary addresses added by a factory owner outside the platform catalog. Pair registration monitoring with catalog polling and review any unknown address.

The current production schema exposes address, symbol, name, decimals, route, suite, registration status, selectability, and quote revision. `route` is a product classification, not an issuer identity or a complete asset taxonomy. The downloadable JSON snapshots are dated reference data; poll the API for current registration status.

When returned, `asset_type` and `issuer` describe the paired asset separately from its market route. Asset types distinguish native currency, stablecoins, wrapped crypto, direct protocol and ecosystem tokens (`crypto_token`), and tokenized securities, including stocks and ETFs. Issuer metadata includes an ID, name, legal entities and official sources. Clients should tolerate absent metadata fields.

A null issuer means native currency or unverified attribution; an empty legal-entity list means only the brand is confirmed. This metadata is not token security approval. Quote revisions track onchain settings, so compare issuer metadata separately. Catalog decimals apply to unregistered entries; factory decimals apply to registered quotes.

The paired-asset catalog includes these issuer groups:

| Chain            | Quote group              | Attribution                                                                                                                                                                             |
| ---------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Base             | 10 tokenized stocks      | Coinbase Onchain SPV Ltd, linked through the [official stock prospectuses](https://www.base.org/stocks)                                                                                 |
| Base             | 8 wrapped crypto assets  | [Coinbase Wrapped Assets](https://help.coinbase.com/en/coinbase/trading-and-funding/sending-or-receiving-cryptocurrency/coinbase-wrapped-btc); legal entity attribution is not asserted |
| Base             | USDC                     | [Circle](https://www.circle.com/legal/mica-usdc-whitepaper)                                                                                                                             |
| Robinhood        | 194 stock and ETF tokens | [Robinhood Assets (Jersey) Limited](https://robinhood.com/rhj/stocktokens/)                                                                                                             |
| Robinhood        | USDG                     | [Paxos](https://www.paxos.com/terms-and-conditions/usdg-eu-whitepaper)                                                                                                                  |
| Base / Robinhood | Native ETH               | No issuer                                                                                                                                                                               |
| Monad            | MON                      | Native currency; no issuer                                                                                                                                                              |
| Monad / Arc      | USDC                     | Circle                                                                                                                                                                                  |
| Monad            | WETH                     | Wrapped crypto; issuer attribution unverified                                                                                                                                           |

The factory owner controls quote registration; creators can use only registered quote tokens. The contracts do not enforce a fixed issuer set, and the catalog is not a promise that issuers will never change. In particular, cbZEC and cbHYPE are wrapped crypto despite sharing an address prefix with Base stock tokens.

Issuer metadata stays offchain, so it adds no contract storage or registration gas. `QuoteRegistered` and `quoteConfig(address)` remain the onchain registration evidence; issuer identity comes from the catalog's explicit source-backed attribution.

## Token browsing

`GET /tokens` browses and ranks tracked launches:

| Parameter       | Behavior                                                                   |
| --------------- | -------------------------------------------------------------------------- |
| `chain_id`      | `8453`, `4663`, `143` or `5042`, required                                  |
| `market`        | `standard` for crypto-paired, `rwa` for stock-paired, or `all`             |
| `quote_address` | Exact quote asset                                                          |
| `sort`          | `newest`, `oldest`, `trending`, `liquidity`, `market_cap`, or `volume_24h` |
| `cursor`        | Opaque continuation cursor                                                 |
| `limit`         | Default `25`, maximum `100`                                                |

Direction is part of `sort`, so there is no separate `order` parameter and every displayed sort is executable. Each result has stable sections:

* `token`: address, name, symbol, decimals, and effective image
* `launch`: backward-compatible creator, immutable original creator, current and pending creator rights when supported, current creator fee recipient, recorded contract configuration, pool, paired asset, feature flags, transaction provenance, creation time, and a creation fee only when the paid amount was nonzero
* `market_data`: price, market cap, liquidity, 1-hour, 6-hour, 24-hour, and lifetime activity, plus freshness fields

Missing market values are `null`, not zero. Trending returns ordinary market values and order only; ranking scores, scoring explanations, pins, and internal quality fields are private.

Quote decimals come from the indexed launch or the shared quote registry. A truly unknown historical admin-added quote returns `quote.decimals: null`; the API never guesses units.

Ranked lists are live rather than frozen snapshots. A cursor binds the filters and source position, not an immutable ranking snapshot, so tokens can move between pages while ranking updates. Deduplicate by `(chain_id, token.address)` and restart when the API returns `409 cursor_stale`.

## Token search and creator launches

Use the focused routes when the query has different ordering semantics:

```http theme={null}
GET /tokens/search?chain_id=8453&q=alpha
GET /creators/0x1111111111111111111111111111111111111111/tokens?chain_id=8453&sort=newest
```

Search accepts `chain_id`, `market`, `quote_address`, `q`, `cursor`, and `limit`. It matches token address, name, symbol, creator, pool ID, or launch transaction and uses one deterministic liquidity ordering.

Creator launches accept the same chain, market, quote, and pagination fields plus `sort=newest|oldest`. Search and creator cursors are not interchangeable with browsing cursors.

<Note>
  Earlier combined query forms remain available during migration and return deprecation headers. New integrations should use the focused routes described here. See the [migration guide](/launchpad/api/migration).
</Note>

## Token detail

```http theme={null}
GET /tokens/8453/0x...01?include=pool,market,announcements
```

The default include set is `pool,market`. `announcements_limit` defaults to 3 and is capped at 10. Supply it only when `include` contains `announcements`.

The detailed token object adds full metadata, links, total supply, historical contract addresses, and these optional sections:

* `pool`: currencies, PoolManager, hook, frozen fee split, anti-snipe clock, locked seed ranges, and initial seeded token amount
* `market_data`: ATH market cap in quote currency, unique traders, pool state, and fee revenue by currency
* `announcements`: recent creator messages and their on-chain provenance

Arbitrary token extra-metadata keys are not returned by default.

## Trades and announcements

Use independent collection routes:

```http theme={null}
GET /tokens/{chain_id}/{token_address}/trades
GET /tokens/{chain_id}/{token_address}/announcements
```

Trades contain structured token and quote amounts, pool state, fee credits, referrer, comment, timestamp, and on-chain provenance. Announcements contain the creator message, URI, timestamp, and provenance.

Trades accept one optional identity filter: `wallet`, `transaction_hash`, or `referrer`. `from` is inclusive and `to` is exclusive; both use Unix seconds. Announcements accept only pagination, so trade-only filters never appear on their reference page.

Token detail, activity, and holder routes first verify that the address is a visible launchpad token on the selected chain. An unknown or arbitrary external token returns `404 not_found` with the checked chain, token address, and a `suggested_endpoint` for token search. Verify the identifier or rediscover it through `GET /tokens` or `GET /tokens/search`; do not poll an unchanged `404`.

## Holder snapshots

A holder response has a normal page plus top-level `summary`:

```json theme={null}
{
  "summary": {
    "status": "ready",
    "total_holders": 128,
    "top_10_percent": 62.4
  }
}
```

Balances remain exact strings, and `supply_percent` is derived from indexed total supply. `meta.generated_at` records when the gateway formed the response; the API does not invent a provider snapshot timestamp. If the provider cannot produce a holder result, it returns `503 temporarily_unavailable` instead of a misleading empty list.

## Wallet activity and fee claims

Wallet activity is structured by `kind`; it does not return UI titles, raw metadata JSON, or internal event keys. Current launch flows use launch, launch fee, trade, fee credit or claim, announcement, and metadata activity kinds.

Fee positions use a separate cursor domain, default to 25 results, and are capped at 50.

* `GET /wallets/{address}/fee-claims` supports `state=claimable|all` and optional `currency_address`.
* A fee balance is scoped to escrow, recipient, and currency. It may represent credits from multiple pools, so it is not assigned to one launch incorrectly.

## Transaction status

`GET /transactions/{chain_id}/{tx_hash}` is the indexed public view, not a live RPC receipt endpoint. When indexed, it separates two states:

* `chain.status`: unknown, pending, succeeded, reverted, or replaced
* `indexing.status`: not seen, processing, or complete

`operations` contains only public launchpad actions with their transaction provenance. Raw worker jobs, provider responses, governance events, queue state, and internal errors are never returned.

Existing chain indexers and webhooks discover wallet-broadcast transactions normally, so the API does not expose a transaction-notification write. Before a hash is observed, `data` is `null`; use your own chain provider to poll the receipt for immediate confirmation and retry this endpoint for launchpad indexing state.

## Pagination and freshness

```json theme={null}
{
  "pagination": {
    "next_cursor": "opaque-signed-cursor",
    "has_more": true,
    "limit": 25
  },
  "meta": {
    "request_id": "req_...",
    "generated_at": "2026-07-31T12:00:00.000Z",
    "warnings": []
  }
}
```

Do not parse or edit cursors. They are bound to the route, filters, ordering, API version, and expiry.

`meta.generated_at` is when the gateway formed the response. Resource-level `updated_at`, observed or confirmed block, and finality fields describe source freshness. The gateway does not add another product-response cache.

## Monad configuration

Use `GET /v1/config?chain_id=143&market=standard&include=chains,suites,quotes&active_only=false`. The current suite supports `standard` only. MON is native, USDC is a Circle stablecoin and WETH is wrapped crypto with unverified issuer attribution. At the latest onchain snapshot, creation is enabled and all three quotes are registered. `active_only=true` filters to creation-available catalog entries; `false` also retains entries if creation is later disabled. Read the current configuration before preparing a transaction.

## Arc configuration

Use `GET /v1/config?chain_id=5042&market=standard&include=chains,suites,quotes&active_only=false`. Arc uses the standard crypto route with ERC-20 USDC at `0x3600000000000000000000000000000000000000` as its six-decimal pool quote. The native currency is USDC with 18 decimals. These are two interfaces to one balance, not two assets to add together.

Read the live launch fee from the suite configuration and the quote decimals from the paired-asset row. `active_only=true` filters by creation availability; it does not remove issuer metadata. Launches, trades and fee positions retain their currency-specific raw amounts. USD enrichment is separate from those amounts and may be absent without invalidating an indexed transaction.
