Skip to documentation
Resources/Docs
DevelopersSinjoh v2

Read-only API

Endpoints, pagination, amount formats and observation context for applications and analytics.

3 min read·
On this page

The API reads; wallets transact

The public read API exposes market and account state under /v1. It does not hold a wallet or execute a user’s trade. Obtain its generated schema at /v1/openapi.json on the configured API origin. Do not confuse the read API with the hosted app’s private provider-quote handler or authenticated profile-write endpoints.

http
GET /v1/launches?sort=age&limit=20
GET /v1/tokens/{tokenAddress}
GET /v1/markets/{hook}/{poolId}
GET /v1/openapi.json

Endpoint reference

EndpointResponse purpose
GET /v1/launchesPaged launch/migrated feed; sort by age, marketCap or volume.
GET /v1/openingsApproved migration openings with reference pool, status and timing.
GET /v1/tokens/{address}Resolve token identity to its canonical market.
GET /v1/markets/{hook}/{poolId}Metadata, price, backing, floor, coverage, treasury and migration details.
…/ratesModels, current rates, surcharges and smoothed average.
…/rolesCreator, recipient, Safe roles and prepared operations.
…/routeActions, held allocations, results and reward configuration.
…/trades, …/pricesPaged trade/price history; prices support a Unix-seconds from filter.
…/rewardsPosted rounds, publication CIDs, winners and commitment context.
…/rewards/payments, …/rewards/creditsPaid and reserved reward records.
GET /v1/accounts/{address}/launchesMarkets of which the account is currently creator.
…/accounts/{address}/payments, …/credits, …/tradesCross-market account history and retained credits.

Pagination and chain observations

Use limit up to the configured maximum and pass the returned nextCursor unchanged to request the next page. Never infer that the first page contains every market. Keep each response’s observation, indexer block/lag and confirmation flags with its data.

Current market reads are pinned to an observation block; feeds/history come from indexed events. A recent indexed record can be available before finalization. Confirmation uses the chain’s finalized block, not a local elapsed-time assumption. Raw token amounts and large numeric columns are string-encoded to preserve precision.

typescript
let cursor: string | null = null;
do {
  const url = new URL('/v1/launches', API_ORIGIN);
  url.searchParams.set('limit', '20');
  if (cursor) url.searchParams.set('cursor', cursor);
  const response = await fetch(url);
  if (!response.ok) throw new Error('Read API unavailable');
  const page = await response.json();
  consume(page.items, page.observation, page.indexer);
  cursor = page.nextCursor;
} while (cursor);

Caching, errors and 24-hour statistics

Successful responses carry configured public cache/stale headers. Errors use no-store; rate limiting is separate from response correctness. Retry transient reads with appropriate backoff rather than turning an error into an empty successful list.

A market path without its hook is rejected because a bare pool ID is ambiguous. API 24-hour market statistics use indexed history and their documented hour buckets; Portfolio’s weighted price movement uses current holdings and historical prices. They are related displays with different measurement definitions.