Skip to content

Endpoint integration notes

Use https://www.blast.fun as the base URL and send X-Blast-Partner-Key on every call. All routes below accept GET and HEAD. See authentication and rate limits.

Open the interactive API reference for response schemas, JSON examples, and live requests beside each endpoint.

Path placeholders are values you supply, not literal braces. Object IDs in paths must be lowercase 0x followed by exactly 64 hexadecimal characters. A coin type is 0x<64 lowercase hex>::module::Name; preserve the case of the module and type name and encode it as a single path segment with encodeURIComponent(coinType).

Only the routes below are supported. Private account reads, viewer state, allowlists, transaction builders, admin routes, writes, and direct indexer /v1 calls are excluded. A valid key authorizes these reads independently of the frontend’s launch status; it does not unlock the Blast website.

GET /api/v1/presales

Parameter Values and default
status live (default), upcoming, ended
sort Depends on status; see below
partner_id Optional on-chain partner object ID: lowercase 0x plus 64 hex characters
limit Integer 1–50; default 20
cursor Previous response’s non-null next_cursor
verified_team Optional; only true is accepted
audited Optional; only true is accepted
Status Sorts (default first)
live ending, fastest, backed
upcoming opening, interest
ended recent, best, backed

Response: { presales, next_cursor, as_of }. Each presale is a public summary; viewer-specific commitments and watchlist state are not included. Keep status, sort, partner ID, and trust filters unchanged when paging. Stop when next_cursor is null. Each documented parameter may appear only once.

Terminal window
curl --fail-with-body --get 'https://www.blast.fun/api/v1/presales' \
-H "X-Blast-Partner-Key: $BLAST_PARTNER_KEY" \
--data-urlencode 'status=live' \
--data-urlencode 'sort=ending' \
--data-urlencode 'limit=20'

To list only one partner’s presales, add partner_id. This is the on-chain partner object ID, not the API-key account name or a wallet address. Filtering happens before sorting and pagination. The association is available after the indexer observes the sale’s PresaleOpened event. Omit the filter to include all partners; an unknown ID returns an empty list. This filter does not change what your key is authorized to read.

Set PARTNER_ID to the full partner object ID:

Terminal window
curl --fail-with-body --get 'https://www.blast.fun/api/v1/presales' \
-H "X-Blast-Partner-Key: $BLAST_PARTNER_KEY" \
--data-urlencode "partner_id=$PARTNER_ID" \
--data-urlencode 'status=live' \
--data-urlencode 'limit=20'

GET /api/v1/presales/featured

No query parameters are needed. Returns { presales }: Blast’s ordered featured presales that are open or pending. An empty list is valid. This route has no pagination.

GET /api/v1/presales/{presaleId}

No query parameters are needed. Returns presale plus public creator, quote_price, momentum, backers, theses, activity, raise, vesting, team_vesting, terms, and as_of; responses can also include buyer_vesting. Nullable fields, including unavailable terms or price data, must be handled explicitly. An unknown presale returns 404.

GET /api/v1/prices

Parameter Values and default
presale Repeatable presale ID; up to 50 unique IDs
coin Repeatable coin type; up to 4 unique types
window 24h (default) or launch; launch cannot be used with coin
points Integer 2–288; default 60

Provide at least one presale or coin. Repeated identical IDs/types are deduplicated. window and points may each appear only once.

Response: { window, clock_ms, prices, as_of }. Price entries include presale_id (null for a coin query), coin_type, tier, from_ms, points, price_usd, price_24h_usd, change_24h_bps, day_open_usd, and day_open_ms; some include a quote price series. Points are [timestamp_ms, decimal_price_string] pairs, oldest first. Price fields can be null, and requested items without a price can be absent. Match entries by ID/type, not array position. points controls sampling density; window-boundary observations can also be included, so do not assume an exact output length.

Set PRESALE_ID to a real full presale ID:

Terminal window
curl --fail-with-body --get 'https://www.blast.fun/api/v1/prices' \
-H "X-Blast-Partner-Key: $BLAST_PARTNER_KEY" \
--data-urlencode "presale=$PRESALE_ID" \
--data-urlencode 'window=24h' \
--data-urlencode 'points=60'

These routes return section states. available and stale sections contain data and provenance; stale also includes a reason. empty means a successful read with no results and has no data. unavailable has a reason, may include provenance or retryAfterSeconds, and has no data.

GET /api/v1/discovery

Parameter Values and default
view new (default), near_graduation, graduated
limit Integer 1–100; default 25
cursor Previous page’s section.data.nextCursor

Response: { view, section }. When data is present, section.data contains rows and nextCursor. Rows include launchId, coinType, quoteType, lifecycle, name, symbol, iconUrl, createdAtMs, graduatedAtMs, quoteRemaining, quoteDecimals, progressBps, and partner. Metadata and progress fields can be null.

Keep the same view when paging. Stop on a null cursor or an empty section. hot is not a supported view. Unknown or repeated query parameters are rejected.

GET /api/v1/search

Parameter Values and default
q Required search text, up to 200 characters; must contain searchable text
group Optional: onchain, wallets, coins, theses
limit Integer 1–25 per group; default 5
cursor Previous group’s section.data.nextCursor; requires group

Omit group to search all applicable groups. Address queries can produce onchain, wallets, and coins; other queries use coins. Theses are also searched. An explicit group must be applicable to the query. The ungrouped response includes a profiles section marked unavailable; profiles cannot be requested as a group.

Response: { groups }, where each entry has group and section. Readable sections contain { items, nextCursor }. Keep the same q and group when paging. Handle each group’s state independently: partial results can return 200, while all requested groups being unavailable returns 503. Unknown or repeated query parameters are rejected.

Market routes return their own JSON shapes with provenance. They reject unknown or repeated query parameters. Use the exact required view values below.

GET /api/v1/market/status

No query parameters. Returns checkpoint, timestamp_ms, lag_ms, cursor, and provenance, describing the indexed market checkpoint. A successful read does not guarantee zero lag; inspect freshness before presenting data as current.

GET /api/v1/market/coins/{coinType}/holders

Parameter Values and default
view Required: snapshot
limit Integer 1–100; default 25
cursor Previous page’s non-null next_cursor

Returns coin, snapshot, holder_count, held_supply, top_1, top_10, holders, next_cursor, and provenance. Holder rows contain address, balance, and share_bps, ordered by balance descending then address ascending.

Inspect snapshot.state: complete is a complete snapshot, behind is stale, and incomplete means facts including holders and next_cursor are null. Null is not an empty holder list. holder_count and balances are decimal strings. Balances can change between pages; deduplicate holders by address.

GET /api/v1/market/launches/{launchId}/activity

Parameter Values and default
view Required: classified
limit Integer 1–100; default 25
cursor Previous page’s non-null next_cursor

Returns { activity, next_cursor, provenance }. Rows include position, checkpoint, timestamp_ms, digest, kind, source, actor, lifecycle, and amounts. This is the classified launch activity view; venue swaps use the pool trades route below. Keep the same launch ID and view when paging.

GET /api/v1/market/pools/blast_curve/{poolId}

No query parameters. The curve pool ID is the launch ID. Returns { pool, candle, provenance }, including the curve’s summary and windowed market statistics. Plain pool summaries for cetus or bluefin are not exposed by this web API and return 404.

GET /api/v1/market/pools/{venue}/{poolId}/candles

Venues: blast_curve, cetus, bluefin.

Parameter Values and default
interval Required: 1s, 1m, 5m, 15m, 1h, 4h, 1d, 1w
from Optional inclusive Unix-millisecond start
to Optional exclusive Unix-millisecond end; must be greater than from when both are supplied
limit Integer 1–2,000; default 500

Returns { interval, candles, migration, provenance }. Candles are oldest first and include bucket_start, OHLC prices, volumes, and trade counts. migration can be null. Each pool contains only its own trades; this is not a merged coin chart.

The page contains the newest candles within the requested bounds, up to limit. To page backward, set to to the oldest returned candle’s bucket_start. Stop on an empty candle array. Gaps are valid: intervals without trades have no candle. Without to, the result can include the current open candle.

GET /api/v1/market/pools/{venue}/{poolId}/trades

Venues: cetus and bluefin only. For curve activity, use the classified launch activity route.

Parameter Values and default
limit Integer 1–200; default 50
before Last returned trade’s cursor, formatted as four colon-separated nonnegative integers

Returns { trades, provenance }, with archived_before when history reaches an archive boundary. Trades are newest first. To page backward, pass the last trade’s cursor as before; only strictly earlier trades are returned. Stop on an empty page or the reported archive boundary. This cursor is different from the opaque cursor tokens used by other routes.

Use full canonical path IDs, preserve decimal strings, and URL-encode query values. Treat cursor tokens as opaque and keep the original resource and filters. Handle nulls and freshness states before displaying data. For failures, follow rate limits and errors rather than repeatedly retrying every non-200 response.