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.
Presales and prices
Section titled “Presales and prices”List presales
Section titled “List presales”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.
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:
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'Featured presales
Section titled “Featured presales”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.
Presale detail
Section titled “Presale detail”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.
Price history
Section titled “Price history”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:
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'Discovery and search
Section titled “Discovery and search”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.
Discover launches · Coming soon
Section titled “Discover launches · Coming soon”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.
Search
Section titled “Search”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 data
Section titled “Market data”Market routes return their own JSON shapes with provenance. They reject unknown or repeated query parameters. Use the exact required view values below.
Market status
Section titled “Market status”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.
Holder snapshot · Coming soon
Section titled “Holder snapshot · Coming soon”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.
Launch activity · Coming soon
Section titled “Launch activity · Coming soon”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.
Curve pool summary · Coming soon
Section titled “Curve pool summary · Coming soon”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.
Pool candles · Coming soon
Section titled “Pool candles · Coming soon”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.
Venue pool trades · Coming soon
Section titled “Venue pool trades · Coming soon”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.
Integration checklist
Section titled “Integration checklist”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.