← Articles
StonkFun: public HTTP launch API logo
solana

StonkFun: public HTTP launch API

· SEP 6, 2026 ·
Read
Share

Prepare returns an unsigned payment transaction. Sign it locally. Submit. Poll the payment signature. Never pay twice.

devrels.xyz/a/303

StonkFun is a Solana launch venue with a public HTTP API. Read market data and launch tokens. There is no API key and nothing to sign up for. A launch is authorised by the creator wallet signing the fee payment. The platform never asks for, accepts, or stores a private key. No endpoint signs on your behalf.

Base URL https://www.stonkfun.xyz/api/public/v1. OpenAPI at /api/public/v1/openapi.json. Docs live at stonkfun.xyz/developers. X: @launchonsf.

Launch

Two calls. POST /launches/prepare returns an unsigned payment transaction. Sign it with the creator wallet. Hand it to POST /launches/submit with the same logo bytes. A processing status means the launch is on chain. Poll GET /launches/{paymentSignature} until completed. Never pay twice. A second payment creates a second token. If the bundle does not land, submit answers service_unavailable with charged: false. Get a fresh quote from prepare.

Pick a quote from GET /pairs?launchable=true and pass it as quoteMint. Pairs include tokenized stocks (xStocks), pre-IPO stocks (PreStocks), currencies, leveraged tokens, SOL, or a custom mint. Read GET /stats before offering a launch button: config.paidLaunchesEnabled and config.launchLabEnabled say which path is live.

javascript
const API = "https://www.stonkfun.xyz/api/public/v1"

const prepared = await fetch(API + "/launches/prepare", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    creatorWallet,
    quoteMint,
    name: "My Token",
    symbol: "MYTKN",
    mode: "standard",
  }),
}).then((r) => r.json())

// Sign prepared.data.paymentTransaction locally.
// POST /launches/submit with signedQuote + signedTransaction.
// If status is processing, poll GET /launches/{paymentSignature}.
// Never pay twice.

Modes

mode: "standard" is a fee coin. Default pool is 1%. Fees split 50/50, so the creator earns 0.5% of every trade. Optional feeTier: "2%" opens a 2% pool. Creator earns 1.5%. Platform keeps 0.5%. Claim from the token page or over this API.

mode: "reward" is a 1% pool plus a transfer tax paid to holders. 1% by default, or 3% at launch, in the paired token, on every transfer, on any venue. No creator fee position. Optional airdropPercent holds back up to 50% of supply for holders of the quote token. Snapshot is frozen by prepare, before the mint exists. Optional devBuyPercent or devBuySol, never both, up to 50% of supply as the pool's first trade in the same atomic bundle.

Build your own

Skip prepare and submit. Construct the launch against Raydium LaunchLab. Two reads: GET /pairs and GET /launchlab/pricing. Bake the platform id into the pool. StonkFun scans attributed pools every minute and adopts matches. Use raise.raw from pricing. Do not pass the SDK's 85 SOL constant as totalFundRaisingB on an 8-decimal xStock. There is no launch fee on this path. Watch GET /tokens/{mint} until launchpad: "launchlab". Land a standard launch first before a taxed one. Wrong tax shape withholds for nobody.

Claim

Fee coins: GET /tokens/{mint}/fees, then POST /tokens/{mint}/fees/claim/prepare, sign, POST .../claim/submit. Prepare expires in 90 seconds. LaunchLab launches have no Fee Key NFT. The platform forwards the creator share automatically. Reward coins answer 403 on claim.

Reads

GET /tokens with sort, mode, status, quoteMint, category. Page size 1-100, default 25. Also /tokens/{mint}, burns, rewards, airdrop, backing (pump launches only). GET /launches, /pairs, /rewards, /revenue, /revenue/history, /stats. Unversioned GET /api/public/total-assets is identity only: mint, name, symbol, decimals, logo.

Every response carries X-RateLimit-Remaining and X-RateLimit-Reset. A 429 adds Retry-After.

SurfacePer minute per IP
Reads, both submits, status300
POST /launches/prepare25
POST /tokens/{mint}/fees/claim/prepare20

Errors are { error: { code, message } }. Branch on code: invalid_request 400, forbidden 403, not_found 404, conflict 409, rate_limited 429, internal 500, service_unavailable 503. For a launch, 409 means the payment landed. Never retry or re-pay.

Keep reading

Get new articles in your inbox

Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.

StonkFun: public HTTP launch API | devrels.xyz