> For the complete documentation index, see [llms.txt](https://docs.novamp.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.novamp.io/developers/public-api.md).

# Public Data API

Novamp runs a public, read-only REST API for indexing launches — built for terminals, aggregators, and bots (GMGN / Axiom / Dexscreener-style). No auth, no API key, permissive CORS. It's the same data behind the in-app **Data** tab.

> `Base: https://app.novamp.io/api` · read-only · no API key

{% hint style="info" %}
Every token trades on a real Uniswap / PancakeSwap pool from birth, and every payload carries `chainId` / `chain` so multi-chain results are self-describing. Looking for identity protection instead of market data? See the [AntiVamp API Reference](https://antivamp.io/api).
{% endhint %}

## Overview

The Public Data API aggregates read-only market data across every Novamp chain. It is served by one indexer per chain behind a branded proxy, and it powers terminals, dashboards, and bots. For writes (launches), EVM chains are transaction-based and Solana is server-prepared — see [Launching: EVM vs Solana](#launching-evm-vs-solana).

### Supported chains

Novamp indexes **Robinhood Chain (4663)**, **Base (8453)**, **BNB Smart Chain (56)**, **Ethereum (1)**, and **Solana**. BNB Chain and Ethereum went **live 2026-07-20**. Every EVM payload carries `chainId` / `chain`; Solana results are identified by `chain: "solana"`.

## Base URLs

One indexer per chain, identical API surface. Prefer the branded host — the `novamp.io` frontend proxies `/api/*` to the correct per-chain indexer.

|                                 | URL                                                         |
| ------------------------------- | ----------------------------------------------------------- |
| Branded (recommended)           | `https://app.novamp.io/api`                                 |
| Direct — Robinhood Chain (4663) | `https://novamp-rhc-indexer-production.up.railway.app/api`  |
| Direct — Base (8453)            | `https://novamp-base-indexer-production.up.railway.app/api` |
| Direct — BNB Smart Chain (56)   | `https://novamp-bnb-indexer-production.up.railway.app/api`  |
| Direct — Ethereum (1)           | `https://novamp-eth-indexer-production.up.railway.app/api`  |

Each direct origin also serves `/health` and its OpenAPI spec at `/openapi.json` and `/openapi.yaml`.

### Chain-scoped indexers

There is **one indexer service per chain**, and each service only knows about launches on its own chain. The frontend routes requests by a per-chain environment variable (`VITE_<CHAIN>_INDEXER_URL`), so:

* **Cross-chain reads** — `/api/ticker/availability`, `/api/discovery`, `/api/search`, and `/api/tokens` (via the branded host) aggregate across chains.
* **Chain-scoped reads** — `/api/tokens/:chainId/:address` only resolves a token whose `chainId` matches the indexer that serves it. Querying an Ethereum token (chainId `1`) against the BNB origin (chainId `56`) returns `404`.

To read launches or trades for a specific chain, hit that chain's direct origin (or the branded host, which proxies to it). The raw per-chain launch feed is exposed **without** the `/api` prefix on the direct origins (see [Per-chain launch feed](#per-chain-launch-feed-evm)).

## Authentication

Most public routes are **unauthenticated** (read-only, permissive CORS). A few operational routes require a header:

| Header                   | Used by                          |
| ------------------------ | -------------------------------- |
| `x-admin-secret`         | Admin backfill / reindex routes. |
| `x-novamp-ticker-secret` | Ticker hub cross-chain sync.     |
| `x-pin-secret`           | Metadata/logo pinning.           |

## Token endpoints

| Method | Path                            | Description                                                                                                                                                       |
| ------ | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| GET    | `/api/tokens`                   | All tokens. `?limit= &offset= &sort=recent\|mcap\|volume`                                                                                                         |
| GET    | `/api/tokens/recent`            | Newest launches first.                                                                                                                                            |
| GET    | `/api/tokens/graduated`         | Tokens live on a tradable Uniswap / PancakeSwap pool (all Novamp tokens).                                                                                         |
| GET    | `/api/tokens/:chainId/:address` | Single token by chainId (`4663` / `8453` / `56` / `1`) + address. **Chain-scoped:** only returns a token whose `chainId` matches the indexer serving the request. |
| GET    | `/api/logo/:chainId/:token`     | Durable logo image proxy (immutable, year-long cache).                                                                                                            |

List endpoints return `{ tokens: [...], count, limit, offset, ethUsd }`, where `ethUsd` is `{ rate, source, asOf }`. Money values are **string decimals**; unknown values are `null`.

### Example

```bash
curl "https://app.novamp.io/api/tokens?limit=25&sort=volume"
```

### Key token fields

| Field                                        | Meaning                                                                     |
| -------------------------------------------- | --------------------------------------------------------------------------- |
| `chainId` / `chain`                          | `4663` `robinhood`, `8453` `base`, `56` `bnb`, `1` `ethereum`, or `solana`. |
| `tokenAddress` / `pairAddress`               | Token contract and its Uniswap pool/pair.                                   |
| `poolType`                                   | `univ2` (tax token) or `univ3` (zero-fee token).                            |
| `marketCapUsd` / `liquidityUsd` / `priceUsd` | USD figures (string decimals).                                              |
| `volume24hUsd` / `volumeTotalUsd`            | Trailing-24h and lifetime traded volume.                                    |
| `holders`                                    | Distinct positive-balance wallets.                                          |
| `factoryAddress`                             | The NovampLaunchFactory that created it.                                    |
| `socials`                                    | `{ website, twitter, telegram, discord, instagram }`.                       |

## Ticker & reservations

Name/ticker identity is checked **cross-chain** so a symbol can't be duplicated across networks.

| Method | Path                                               | Description                                                                                                                                                                                |
| ------ | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| GET    | `/api/ticker/availability?symbol=&name=&creator=`  | Cross-chain name/ticker availability. Returns `{ available, canLaunch, symbolHash, nameHash }`. Pass `creator` (EVM or Solana address) to account for that wallet's own open reservations. |
| GET    | `/api/ticker/reservations?creator=<evm-or-solana>` | Open reservation holds for a creator wallet.                                                                                                                                               |

Use `/api/ticker/availability` before a launch to confirm a name+ticker is free and not copycat-locked. `symbolHash` / `nameHash` are the on-chain hashes used by the `TickerReservationRegistry` and `GraduatedTokenRegistry`.

{% hint style="info" %}
This is Novamp's on-chain availability view. For a signed, enforceable launch decision across launchpads, integrate AntiVamp's validate-launch endpoint — see <https://antivamp.io/api>.
{% endhint %}

## Per-chain launch feed (EVM)

Each EVM chain's indexer exposes a raw launch/market feed **without** the `/api` prefix, served directly from that chain's origin (the frontend routes by `VITE_<CHAIN>_INDEXER_URL`). These are chain-scoped — hit the origin for the chain you want.

| Method | Path                       | Description                                   |
| ------ | -------------------------- | --------------------------------------------- |
| GET    | `/launches`                | Launches indexed on this chain, newest first. |
| GET    | `/tokens/:market`          | A single market (token/pool) on this chain.   |
| GET    | `/tokens/:market/trades`   | Trade history for the market.                 |
| GET    | `/tokens/:market/candles`  | OHLC candles for the market.                  |
| GET    | `/tokens/:market/holders`  | Current holders of the market's token.        |
| GET    | `/tokens/:market/metadata` | Token metadata (name, symbol, socials, logo). |
| GET    | `/creators/:address`       | Launches created by a wallet on this chain.   |
| GET    | `/trades`                  | Recent trades across this chain's markets.    |

## Discovery & search

Cross-chain discovery aggregates over every configured chain (BNB and Ethereum included).

| Method | Path                                   | Description                                                                   |
| ------ | -------------------------------------- | ----------------------------------------------------------------------------- |
| GET    | `/api/discovery`                       | Aggregated discovery feed across chains.                                      |
| GET    | `/api/discovery/pulse?networks=`       | Live "pulse" activity; filter with `networks=` (comma-separated chain slugs). |
| GET    | `/api/discovery/token/:chain/:address` | Discovery detail for one token on a given chain.                              |
| GET    | `/api/search?q=`                       | Cross-chain search over names, tickers, and addresses.                        |
| GET    | `/api/trenches`                        | Lifecycle board (fresh / graduating / graduated).                             |
| GET    | `/api/milestones/candidates`           | Tokens approaching market-cap milestones.                                     |

## Launching: EVM vs Solana

**EVM launches are transaction-based.** There is **no** server-side "launch" POST for EVM. The client builds and sends a transaction to `NovampLaunchFactory.launch(p)` on the target chain (Robinhood, Base, BNB, or Ethereum); the indexer then picks it up and exposes it through the read/query endpoints above. See [Launching a token](/creators/launching-a-token.md) and [Contracts & addresses](/protocol/contracts-and-addresses.md) for the per-chain factory address.

**Solana launches are server-prepared.** Solana has no user-deployed factory contract, so the API prepares the transaction for the client to sign:

| Method | Path                          | Description                                    |
| ------ | ----------------------------- | ---------------------------------------------- |
| POST   | `/api/launch/pumpfun/prepare` | Build an unsigned Pump.fun launch transaction. |
| POST   | `/api/launch/pumpfun/confirm` | Confirm/finalize a submitted Pump.fun launch.  |
| POST   | `/api/solana/launch/prepare`  | Prepare a Solana launch transaction.           |
| GET    | `/api/solana/launches`        | Solana launches indexed by Novamp.             |
| GET    | `/api/creator/launches`       | Launches created by a wallet.                  |

## Quotes & swaps

Multi-chain quote routing (including BNB `56` and Ethereum `1`):

| Method | Path                 | Description                           |
| ------ | -------------------- | ------------------------------------- |
| GET    | `/api/zerox/quote`   | 0x aggregator swap quote.             |
| GET    | `/api/relay/quote`   | Relay cross-chain/bridge quote.       |
| GET    | `/api/uniswap/quote` | Uniswap / PancakeSwap on-chain quote. |

## Data plane

Low-level multi-chain data helpers:

| Method | Path                                     | Description                         |
| ------ | ---------------------------------------- | ----------------------------------- |
| GET    | `/api/data/chains`                       | Supported chains and their config.  |
| POST   | `/api/data/rpc/:chain`                   | Proxied JSON-RPC call for a chain.  |
| GET    | `/api/data/market/token/:chain/:address` | Market data for a token on a chain. |
| GET    | `/api/data/portfolio`                    | Wallet portfolio across chains.     |

## DEX adapter (GeckoTerminal / Dexscreener)

A standardized on-host adapter implementing the GeckoTerminal / CoinGecko on-chain DEX standard and the Dexscreener Adapter spec v1.1. Reports `dexKey: "novamp"`. Base URL: `https://app.novamp.io/api/dex` (or the per-chain direct origins + `/api/dex`).

| Method | Path                                  | Description                                  |
| ------ | ------------------------------------- | -------------------------------------------- |
| GET    | `/api/dex/latest-block`               | Latest indexed block.                        |
| GET    | `/api/dex/asset?id=`                  | Asset (token) metadata; also serves WETH.    |
| GET    | `/api/dex/pair?id=`                   | Immutable pair info (the Uniswap pool/pair). |
| GET    | `/api/dex/events?fromBlock=&toBlock=` | Swap events in a block range.                |

Pairs are quoted in native ETH exposed as WETH (`asset1`). Submit the adapter base URL to GeckoTerminal / Dexscreener via their listing forms; the same URL works for both.

## OpenAPI

Machine-readable OpenAPI 3.1 specs are served from each direct origin (`/openapi.json`, `/openapi.yaml`) and mirrored in the repo under `docs/openapi.json` / `docs/openapi.yaml`.

## Errors

Non-`2xx` responses use standard HTTP status codes: `404` for unknown or wrong-chain tokens (see [Chain-scoped indexers](#chain-scoped-indexers)) and `429` when rate-limited (with `Retry-After`).

## Idempotency & rate limits

* **Pagination:** `?limit=` (default 100, max 500), `?offset=`.
* **CORS:** `Access-Control-Allow-Origin: *` on all public GETs.
* **Caching:** token endpoints `max-age=20`; DEX-adapter `max-age=5`; logos immutable (\~1 year).
* **Rate limits:** per-IP token bucket (\~10 req/sec sustained, bursts \~120); over-limit returns `429` with `Retry-After`. `/health` and the logo proxy are exempt.

## Continue exploring

* [🧑‍💻 Developer Overview](/developers/overview.md)
* [🏗️ Architecture](/developers/architecture.md)
* [📡 AntiVamp API Reference](https://antivamp.io/api)
* [🚀 Launching a token](/creators/launching-a-token.md)
* [📜 Contract Addresses](/protocol/contracts-and-addresses.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.novamp.io/developers/public-api.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
