> Bull Launch docs. Every page is available as Markdown by adding `.md` to its URL; the index is https://bulllaunch.fun/llms.txt. This page on the web: https://bulllaunch.fun/docs/indexer-api

# Indexer API

The GraphQL and WebSocket endpoints the app itself reads, with an example query.

If you do not want to index the chain yourself, the indexer behind Bull Launch answers GraphQL over HTTP, and a WebSocket per token for live market and discussion updates. It is the same API the app uses.

|  |  |
| --- | --- |
| GraphQL | `https://api.bulllaunch.fun/graphql` |
| WebSocket | `wss://api.bulllaunch.fun/v1/tokens/{token}/market-stream` |
| Deadline | The backend enforces its own 10s query deadline and answers `DEADLINE_EXCEEDED`. |

Every paged response carries a `checkpoint { blockNumber timestamp }`. Check it before trusting a figure: it tells you how far behind the chain the answer is, and it is the fastest way to tell an indexer that is merely lagging from one following the wrong chain.

```js
// The newest launches, the same query the home page runs
const r = await fetch("https://api.bulllaunch.fun/graphql", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    query: `query { discoverLaunches(order: NEW, first: 5) {
      nodes {
        token { address symbol image description }
        market { poolId baseAsset { symbol } }
        bondingProgressBps
      }
      checkpoint { blockNumber timestamp }
      endCursor hasNextPage
    } }`,
  }),
});
```

> CORS is allowlisted per origin. If you are calling from a browser on your own domain, ask the team to add it, otherwise a preflight is refused and the browser discards every reply.
