LaunchpadDevelopers
Log in
Public API

Developers

Everything on this site is built on these endpoints, and all of them are public: JSON over HTTPS, no key needed. Use them for bots, dashboards, alerts or your own front end. Please keep it under a few requests per second.

Getting started

Every example uses $HOST; the copy button fills in this site's address. Responses are JSON. Errors come back with a 4xx or 5xx status and an error message.

Try it
curl "$HOST/api/tokens?sort=trending&limit=3"

API keys

Not needed today: every endpoint is public, and a few writes have their own limits (a payout request, once a minute per wallet). Keys for higher limits and webhooks are planned; when they ship you'll create and revoke them here.

NameKeyCreatedLast used
No keys. You don't need one to use the API.

Coins

GET/api/tokens

Every listed coin. Filters combine.

lane
all | genesis | open
sort
new | trending | volume | progress | graduated | mcap | holders | fees
pair
all | sol | stable | stock | other
module
all | claim | keep | burn | holders | basket
mints
comma-separated mints: only these coins (a watchlist)
q
search name, ticker or mint
limit
up to 100
Request
curl "$HOST/api/tokens?sort=volume&pair=stable&limit=5"
Response
{ "tokens": [ { "mint", "name", "symbol", "lane", "status", "quote": { "mint", "symbol", "decimals" },
  "taxBps", "module", "priceSol", "priceUsd", "mcapUsd", "volumeUsd", "volume24hUsd",
  "change24h", "holders", "burned", "progress", "dammPool", ... } ] }

GET/api/tokens/:mint

One coin: the token, recent trades, price series, Passport, fee breakdown, fee module and its latest payouts.

Request
curl "$HOST/api/tokens/<mint>"
Response
{ "token", "trades", "series", "passport", "fees": { "model", "table", "breakdown" },
  "module": { "id", "label", "keeperMinutes", "lastRoundAt", "pots" }, "payouts", "links" }

GET/api/tokens/:mint/holders

The largest holders with their share of the supply; the curve or pool vault is labelled. Cached for 60 seconds.

Request
curl "$HOST/api/tokens/<mint>/holders"
Response
{ "holders": [ { "owner", "account", "amount", "share", "label", "program" } ], "top10Share" }

GET/api/stats

Platform totals, and every launch option (pairs, fee choices, Sniper Shield, fee models, modules).

Request
curl "$HOST/api/stats"

GET/api/stats/series

Platform totals for a period, with a series per stat for sparklines.

period
24h | 7d | all
Request
curl "$HOST/api/stats/series?period=7d"

GET/api/pairs

Tokens a coin can be paired with. No query: the built-ins with USD prices.

q
search Jupiter's token list (stocks, stablecoins, anything)
mint
check one token on this cluster
Request
curl "$HOST/api/pairs?q=NVDA"

Trading

The server quotes and builds transactions; nothing is signed server-side. Your wallet signs and sends. Amounts are integers in base units.

GET/api/quote

A price for a buy or sell. On the bonding curve until the coin graduates, then in its Meteora pool.

mint
the coin
side
buy | sell
amount
buy: pair-token base units (e.g. lamports). sell: coin base units (6 decimals)
slippageBps
default 100
payMint
optional: pay a buy with another token, routed through Jupiter (mainnet)
Request
curl "$HOST/api/quote?mint=<mint>&side=buy&amount=100000000&slippageBps=100"
Response
{ "amountIn", "amountOut", "minimumAmountOut", "feeLamports", "priceAfter", "priceImpact", "venue" }

POST/api/trade

A ready-to-sign swap transaction for the wallet in `owner`.

Request
curl -X POST "$HOST/api/trade" -H "content-type: application/json" \
  -d '{"mint":"<mint>","owner":"<wallet>","side":"buy","amount":100000000,"slippageBps":100}'
Response
{ "tx": "<base64>", "versioned": false, "quote": { ... } }

POST/api/ingest

Tell the indexer about a transaction you just sent so it shows up at once. The server re-reads it from the chain; nothing in the request is trusted.

Request
curl -X POST "$HOST/api/ingest" -H "content-type: application/json" -d '{"signature":"<sig>"}'

Payouts

Coins with a keeper module (Keep it, Holder payouts, Buyback & burn, Stock basket) have their fees claimed and routed every round. Every movement is written here.

GET/api/payouts

The public payouts ledger, newest first.

mint
one coin
wallet
one recipient
kind
claim | creator | holders | buyback | burn | basket | platform
sig
one transaction
days
only the last N days
before
id cursor for the next page (use `next`)
limit
up to 500
Request
curl "$HOST/api/payouts?wallet=<wallet>"
Response
{ "payouts": [ { "id", "mint", "symbol", "kind", "wallet", "token_mint", "token_symbol",
  "token_decimals", "amount", "usd", "sig", "note", "at" } ],
  "totals": [ { "kind", "n", "usd" } ],  // per kind, over the whole filter
  "next" }

GET/api/pnl/:wallet

A wallet's PNL from its trades here (average cost): per coin, totals, and realized PNL per day.

mint
only one coin
tz
the viewer's getTimezoneOffset() in minutes, for day boundaries
month
YYYY-MM: include that month's calendar
Request
curl "$HOST/api/pnl/<wallet>?tz=0"
Response
{ "totals": { "totalUsd", "realizedUsd", "unrealizedUsd", "boughtUsd", "pnlPct", ... },
  "coins": [ { "mint", "symbol", "totalUsd", "pnlPct", ... } ], "days": { "YYYY-MM-DD": { "pnl", "trades", "volume" } } }

GET/api/portfolio/:wallet

A wallet's launchpad coins and their value, payments received, and payouts still waiting.

Request
curl "$HOST/api/portfolio/<wallet>"
Response
{ "sol", "holdings": [ { "token", "tokens", "valueUsd" } ], "totalUsd", "received", "receivedUsd", "waiting", "created" }

GET/api/rewards

Payouts waiting for a wallet: too small to send in their round, or waiting for a token account.

wallet
the wallet
Request
curl "$HOST/api/rewards?wallet=<wallet>"

POST/api/rewards/claim

Send a wallet what it's owed now. Always pays the wallet itself; the keeper pays the network fee. Once a minute per wallet.

Request
curl -X POST "$HOST/api/rewards/claim" -H "content-type: application/json" -d '{"wallet":"<wallet>"}'

Live events

The same feed that drives the KRYVEX world. Kinds: launch.created, trade, curve.progress, curve.complete, pool.graduated, fees.claimed, keeper.round, burn, passport.registered, launch.hidden, launch.shown.

GET/api/events/stream

Server-sent events: one `event: <kind>` per world event; the SSE id resumes with Last-Event-ID.

after
event id to start after
mint
only one coin
Request
const es = new EventSource("$HOST/api/events/stream");
es.addEventListener("trade", (m) => console.log(JSON.parse(m.data)));
es.addEventListener("keeper.round", (m) => console.log(JSON.parse(m.data)));

GET/api/events

The polling version: events after an id, oldest first, or the latest few.

after
event id
latest
the most recent N
mint
only one coin
limit
page size
Request
curl "$HOST/api/events?latest=20"

Notes

  • Coins have 6 decimals and a fixed supply of 1,000,000,000. Pair-token amounts use the pair's decimals (SOL 9, USDC 6).
  • Prices in priceSol are in the coin's pair token (the name is historical); priceUsd is in dollars.
  • Transactions from /api/trade expire after about a minute. Build, sign and send right away.
  • The ledger's rows without sig are bookkeeping (KRYVEX's share held by the keeper, or a skipped step with its reason).
  • See the payouts ledger and how it works.

Coins on this launchpad are collectibles, not investments. Open Launch coins are not reviewed. Most new coins lose most of their value. Nobody here promises returns. Where a creator chose Holder payouts, holders receive part of trading fees, and those payments depend entirely on trading that may stop at any time.

KRYVEX Launchpad · Meteora Dynamic Bonding Curve · mainnet-beta · Payouts ledger · Developers · Terms · Privacy · Risk Disclosure