# StonkFun (/docs/nodes/defi/stonkfun)

Launchpad for coins paired with anything (tokenized stocks, pre-IPO tokens, currencies, SOL): discovery feeds, holder rewards, burns and buybacks, launching a coin, and claiming creator fees.



The StonkFun node talks to the [StonkFun Developer API](https://www.stonkfun.xyz/developers). StonkFun is a Solana launchpad where every coin is priced against a quote token instead of SOL: tokenized stocks (SPYx, NVDAx, TSLAx), pre-IPO tokens (OPENAI, ANTHROPIC), currencies, leveraged tokens, SOL, or any custom mint. Coins launch on a Raydium LaunchLab bonding curve and graduate to a Raydium CPMM pool once they reach the platform's graduation market cap. Use a coin's mint with the [Jupiter](/docs/nodes/defi/jupiter) or [Relay](/docs/nodes/defi/relay) quote and swap operations; execution depends on the selected venue returning an available route for the pair and amount.

No API key is needed. The API is open behind a per-IP rate limit (300 requests per minute on reads, 25 per minute on launch prepare). The two operations that move funds, `launchToken` and `claimFees`, sign with your connected wallet: StonkFun builds an unsigned transaction, Solaris AI signs it through your embedded wallet, and the signed bytes go back to StonkFun. No private key ever leaves the platform, and both operations carry a **Dry run** switch that stops before any signature.

Prerequisites [#prerequisites]

* **Read operations**: nothing.
* **`launchToken` and `claimFees`**: a connected wallet with server-side signing authorized. A live launch pays the StonkFun launch fee in SOL (about 0.29 SOL when this page was written, plus any dev buy and airdrop fee). A claim only pays the network fee.

What to build with it [#what-to-build-with-it]

* **New-launch alerts**: a cron trigger every 5 minutes, a Code node that returns `new Date(Date.now() - 5 * 60 * 1000).toISOString()` (triggers do not expose a last-run time), `listLaunches` with `since` set to that value plus `mode` or a creator wallet filter, then a Telegram or Discord message per row. Filter `listTokens` by `quoteMint` to watch only coins paired with one stock.
* **Graduation watch**: `listTokens` with `status` set to `aboutToGraduate`, sorted by market cap, into a condition on `graduationProgress`, then a Jupiter or Relay swap on the mint. Graduated coins trade on Raydium CPMM.
* **Creator autopilot**: launch a coin from Solaris AI with `launchToken`, then a scheduled `claimFees` that collects the creator share whenever the quote amount crosses a threshold, followed by a Jupiter or Relay swap from the quote token into SOL.
* **Holder digest**: `getTokenRewards` and `getTokenBurns` for the coins you hold, plus `getRevenue` for the STONK buyback and burn feed, summarized by an AI node once a day.

Operations [#operations]

Discover [#discover]

**`listTokens`**: live market data for every coin with a platform pool. **Search** matches name, symbol, or mint. **Sort** is `marketCap` (default), `newest`, or `volume`. **Status** narrows to `new` (still on the curve), `aboutToGraduate` (between the platform's about-to-graduate and graduation market caps, read them from `getStats`), or `graduated`. **Fee Model** narrows to `standard` or `reward` coins. **Paired With** takes a quote-token mint and returns only coins priced against it; **Pair Category** does the same by category (`xstock`, `prestock`, `currency`, `leverage`, `collectible`, `solana`, `backpack`, `custom`). Rows carry `market.priceUsd`, `market.marketCapUsd`, `market.volume24hUsd`, `status`, `graduationProgress` (0 to 1), and the `quote` object naming the pair. Pages are 1 to 100 rows, default 25.

**`getToken`**: live market data plus the launch record for one mint, under `data.token` and `data.launch`.

**`listLaunches`**: launch records newest first, including self-built LaunchLab launches the platform adopted. Filter by **Creator Wallet**, **Fee Model**, and **Since** (an ISO 8601 timestamp; only launches at or after it). This is the cron-friendly feed: pass a rolling window that matches the trigger interval as `since` (computed in a Code node, since triggers do not expose a last-run time) and every row is new. A `since` template that resolves to nothing fails the run rather than silently returning every launch ever made.

**`listPairs`**: the quote tokens a coin can be launched against, with `category`, `decimals`, `tokenProgram` (xStocks use Token-2022), `launchable`, and `launchLabReady`. Use it to find the mint for **Paired With** or **Quote Mint** on the other operations.

**`listAllTokens`**: a flat identity index of every platform token with no market data: `address` (the mint), `name`, `symbol`, `decimals`, `tokenProgram`, `logoUrl`, `url`, `pool`, `quoteMint`, `quoteSymbol`, `creator`, `launchpad`, and `createdAt`. It pages by **Limit** (1 to 500, the default) and **Offset** rather than page numbers, with **Order** `oldest` (default) or `newest`, and `data.pagination.hasMore` says whether another page exists. Use it to mirror the whole catalog; use `listTokens` when you need prices or graduation status.

Token [#token]

**`getTokenBurns`**: burn totals for a mint (`totals.amountTokens`, `totals.valueUsdAtBurn`, `totals.burnCount`) and the most recent burns with a `source` of `buyback`, `flywheel`, `quote-revenue`, `reward`, or `auto`. **Limit** is 1 to 100.

**`getTokenRewards`**: holder-reward distribution totals for a reward coin: `distributedTokens` in the quote token, `payoutCount`, `holderCount`, `lastPayoutAt`.

**`getTokenAirdrop`**: what a coin launched with. `data.airdrop` is `null` when there was no airdrop; otherwise it carries the carve-out percent, recipient count, and tier.

**`getTokenBacking`**: the USD permanently locked behind a Pump-launched coin, summed from the platform's own locked positions. Pump launches only: a Raydium or LaunchLab coin answers 400 rather than zero, so read `launchpad` from `getToken` first. When this page was written StonkFun reported Pump launches disabled, so no live coin answered it yet.

**`getClaimableFees`**: what the creator of a standard coin can claim right now, with no wallet involved. `data.claimable` holds `base` and `quote` amounts (each with `symbol` and `amountTokens`) and is `null` with a `data.reason` when nothing is claimable. `data.creator` is the wallet that can claim.

Platform [#platform]

**`getStats`**: aggregate totals (tokens, graduated, reward launches, market cap, 24h volume, revenue, buybacks, burns) plus `config`, which carries the graduation thresholds (`graduationMarketCapUsd`, `aboutToGraduateMarketCapUsd`) and feature switches such as `apiLaunchesEnabled` and `devBuysEnabled`.

**`getRevenue`**: fee revenue, STONK buybacks (`totalBuybackUsd`, `boughtBackTokens`, `lastBuybackAt`), burns by source, and the most recent buyback transactions. **Limit** bounds the recent list.

**`getRevenueHistory`**: the whole daily history keyed by UTC day: `dailyRevenue`, `dailyHoldersRevenue`, and `dailyProtocolRevenue` in USD, plus a `coverage` block on how many rows were priced.

**`getRewards`**: lifetime holder payouts per reward coin, largest first, with `distributedTokens`, `payoutCount`, `holderCount`, and `lastPayoutAt`.

**`getLaunchLabPricing`**: curve sizing (`curve.configId`, `curve.supply`, `curve.totalSellA`, `raise.raw`) and the platform and curve-rule ids for a launch you build yourself against Raydium's LaunchLab program with a given **Quote Mint**. `launchToken` is the managed path; this read exists for workflows that construct the transaction themselves.

Creator [#creator]

**`launchToken`** signs a live transaction. It prepares the launch, checks the wallet's SOL balance against the quoted payment, signs the fee payment with your wallet, submits it, and polls until the launch completes.

* **Token Name** (up to 32 bytes), **Symbol** (up to 10 bytes), **Quote Mint** (from `listPairs`), and **Logo** are required. The logo is an `https://` PNG, JPEG, or WebP URL that the node fetches and encodes at run time (up to 2 MB), or a `data:image/…;base64` URI. An inline data URI is stored inside the workflow itself, so it must stay under 256 KB; host anything larger and paste the URL.
* **Mode** is `standard` (default) or `reward`. Standard coins trade on a 1% pool whose creator share you claim with `claimFees`: 0.5% of every trade by default, or 1.5% with **Pool Fee Tier** set to `2%`. Reward coins are Token-2022 mints with an immutable **Transfer Tax** of 1% (`100`) or 3% (`300`) paid to holders in the quote token on every transfer; there is no creator fee. A fee tier set on a reward launch, or a transfer tax set on a standard launch, is dropped because StonkFun rejects it.
* **Dev Buy** is optional: a percent of supply (max 50) or a SOL amount, never both. It fills as the pool's first trade in the same atomic bundle as the launch, so it cannot be front-run, and its SOL cost is added to the payment.
* **Airdrop** is reward mode only: carve out up to 50% of supply for holders of the quote token, reaching `top100` (default) through `top5000` of its holder ranking. The recipient list is frozen when the launch is prepared. An airdrop configured on a standard launch fails the run rather than launching without it.
* **Max Payment (SOL)** is an independent spending ceiling for the whole payment (launch fee plus dev buy plus airdrop fee). The quoted recipient and amount arrive in the same response as the transaction, so this is the one limit the platform cannot move. It defaults to 1 SOL; a quote above it is refused, and a dry run reports it as `paymentCapWarning`. Raise it deliberately for a large dev buy. The node also checks that the quote adds up (fee plus dev buy plus airdrop fee equals the payment) before signing.
* With **Dry run** on (the default for a freshly configured node), the node returns the quote (`payment.sol`, `devBuy`, `airdrop`, `expiresAt`) with `status: "quoted"` and never signs; nothing is charged. With it off, the output carries `mint`, `paymentSignature`, `tokenUrl`, and `status`.

Launches are all-or-nothing: payment, mint, pool, and liquidity land in one bundle or none of them do. A `status` of `processing` means the launch is on chain and the record is still being written; the node polls for about a minute and, if the record is still pending, returns `processing` with the `paymentSignature` so `getLaunchStatus` can finish the wait. Never pay twice: if the submit call fails after signing, the error names the payment signature to check with `getLaunchStatus` before running again. A `service_unavailable` answer with `charged: false` means the bundle did not land and nothing was paid; re-running fetches a fresh quote.

**`claimFees`** signs a live transaction. It reads what is claimable, has StonkFun prepare the claim (valid for 90 seconds), signs it with your wallet, and submits it. Fees land in your own token accounts for both tokens of the pair. Only the coin's creator wallet, the holder of its Fee Key NFT, can claim, so this works for coins launched from Solaris AI; when the connected wallet is not the creator the node fails and names the wallet that is. When nothing is claimable the node completes normally with `claimed: false` and a `reason`, so a scheduled claim loop stays green; put a Condition on `{stonkfunResponse.data.claimed}` in front of anything that should only run after a real claim. With **Dry run** on, it only reads `claimable` and also reports `claimed: false`. Submitting is idempotent: a retry of the same claim returns the original `signature` with `alreadySubmitted: true`.

Before signing either transaction, Solaris AI decodes what StonkFun built and refuses anything outside the expected shape: a launch payment must be exactly one SOL transfer from your wallet to the quoted recipient for the quoted amount, and a claim must be exactly Raydium's collect-fees instruction on the locking program for this coin's mint (plus compute-budget instructions capped at 0.01 SOL of priority fee, creation of the wallet's own token accounts for the pair's two mints only, harmless token-account instructions, and memo instructions) with no SOL movement and no token transfers or approvals. A submit reply that names no launch status is reconciled against the launch record once and otherwise reported as ambiguous, never as an on-chain launch. Neither operation is retried by the engine after a failure, because a retry after an ambiguous submit could pay twice; the error names the payment signature to check with `getLaunchStatus` instead.

**`getLaunchStatus`**: poll a launch by its **Payment Signature** until `data.status` reads `completed`; `data.mint` is the new token.

Configuration [#configuration]

| Field                       | Type           | Required          | Description                                                                                                                                                                                              |
| --------------------------- | -------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| query                       | string         | No                | `listTokens` search over name, symbol, or mint                                                                                                                                                           |
| sort                        | string         | No                | `listTokens`: `marketCap` (default) \| `newest` \| `volume`                                                                                                                                              |
| status                      | string         | No                | `listTokens`: `new` \| `aboutToGraduate` \| `graduated`                                                                                                                                                  |
| mode                        | string         | No                | Fee-model filter on the list operations; the launch's fee model on `launchToken` (default `standard`)                                                                                                    |
| quoteMint                   | string         | Per op            | Optional filter on `listTokens`; required on `getLaunchLabPricing` and `launchToken`                                                                                                                     |
| category                    | string         | No                | Pair category filter on `listTokens` and `listPairs`                                                                                                                                                     |
| mint                        | string         | Token ops         | Coin mint for `getToken`, `getTokenBurns`, `getTokenRewards`, `getTokenAirdrop`, `getTokenBacking`, `getClaimableFees`, `claimFees`                                                                      |
| creator                     | string         | No                | `listLaunches` creator wallet filter                                                                                                                                                                     |
| since                       | string         | No                | `listLaunches` ISO 8601 lower bound                                                                                                                                                                      |
| launchable, launchLabReady  | boolean        | No                | `listPairs` flags                                                                                                                                                                                        |
| page, pageSize              | number         | No                | `listTokens`, `listLaunches`; pageSize 1 to 100, default 25; templates accepted                                                                                                                          |
| limit                       | number         | No                | `getTokenBurns`, `getRevenue`, `getRewards`: 1 to 100, default 25. `listAllTokens`: 1 to 500, default 500 (StonkFun allows 1000, but that exceeds the 512 KB per-node output budget). Templates accepted |
| offset, order               | number, string | No                | `listAllTokens` row offset (default 0) and `oldest` (default) \| `newest`                                                                                                                                |
| paymentSignature            | string         | `getLaunchStatus` | Payment signature from `launchToken`                                                                                                                                                                     |
| name, symbol, logoUrl       | string         | `launchToken`     | Name up to 32 bytes, symbol up to 10 bytes, logo URL or data URI                                                                                                                                         |
| feeTier                     | string         | No                | `launchToken` standard mode: `1%` (default) \| `2%`                                                                                                                                                      |
| rewardTaxBps                | string         | No                | `launchToken` reward mode: `100` (default) \| `300`                                                                                                                                                      |
| devBuyPercent, devBuySol    | number         | No                | `launchToken` dev buy, one or the other                                                                                                                                                                  |
| airdropPercent, airdropTier | number, string | No                | `launchToken` reward mode airdrop                                                                                                                                                                        |
| maxPaymentSol               | number         | No                | `launchToken` spending ceiling for the whole payment; default 1 SOL                                                                                                                                      |
| website, twitter, telegram  | string         | No                | `launchToken` metadata links                                                                                                                                                                             |
| dryRun                      | boolean        | No                | `launchToken`, `claimFees`: stop before signing                                                                                                                                                          |

Output [#output]

Read operations return the standard envelope with StonkFun's `data` payload untouched and its `meta.generatedAt` timestamp:

```json
{
  "success": true,
  "operation": "listTokens",
  "data": {
    "tokens": [
      {
        "mint": "6GmAFSYs4gk3FDao5FzzySQpPZaWsa4rUJHacpMpUNgx",
        "symbol": "STONK",
        "quote": { "mint": "XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W", "symbol": "SPYX", "category": "xstock" },
        "mode": "standard",
        "market": { "priceUsd": 0.2014, "marketCapUsd": 173496715.2, "volume24hUsd": 1873378.17 },
        "status": "graduated",
        "graduationProgress": 1,
        "createdAt": "2026-07-23T19:08:03.348Z"
      }
    ],
    "pagination": { "page": 1, "pageSize": 25, "total": 1, "totalPages": 1 }
  },
  "meta": { "generatedAt": "2026-09-09T23:19:41.046Z" }
}
```

Reference fields downstream with the response name (default `stonkfunResponse`), for example `{stonkfunResponse.data.tokens[0].mint}` after `listTokens`, `{stonkfunResponse.data.launches[0].quote.symbol}` after `listLaunches`, or `{stonkfunResponse.data.paymentSignature}` after `launchToken`.
