Start building
Tokens

Launch a token

Your server prepares the launch, your user's own wallet signs it last. Fuel never holds its keys or money.

A launch creates a pump.fun token with its fee route locked in the same transaction. The token's creator is the wallet that signs it and pays for it: your user, or you. Fuel builds the transaction, checks it by simulation and signs it with the new mint, but never holds the creator's keys or money.

Step Who How
1. Prepare Your server POST /launches/prepare
2. Sign The creator's wallet The wallet signs last
3. Send You, or Fuel POST /launches/{id}/submit
4. Confirm Solana launch.confirmed

What a launch costs

The creator's wallet pays, all inside the launch transaction:

Part About What for
pump.fun's accounts 0.03 SOL The token, its bonding curve and its fee route
Fuel's fee 0.02 SOL Our launch fee
The token's vault 0.0009 SOL Opens the vault the AI's share is paid to
An opening buy Optional The creator buys first, up to 100 SOL

Each route wallet that holds nothing yet is opened the same way, for about 0.0009 SOL: pump.fun can't pay an empty wallet less than that.

Step by step

Prepare

Your server calls POST /launches/prepare with the creator's wallet and the token's details. The image is a base64 data URI, up to 2 MB.

TypeScript
import { Fuel } from "@fuelpad/sdk";

const fuel = new Fuel(); // reads FUEL_SECRET_KEY

// Your own idempotency key: a rerun of this job never launches twice.
const launch = await fuel.launches.prepare(
  {
    creator: userWallet,
    name: "Acme",
    symbol: "ACME",
    description: "The agent that reads Solana for you.",
    image: await fuel.files.dataUri(imageFile),
  },
  { idempotencyKey: `launch:${draftId}` },
);

The answer is the launch in state prepared, with its mint, its route and the transaction to sign. Ask for "transaction_version": 0 when the creator's wallet can't sign version 1.

Sign in the browser

The creator's wallet signs last. Every Solana wallet in the browser (Phantom, Solflare, Backpack and others) offers the Wallet Standard's solana:signTransaction, which takes the transaction's bytes as they are. The SDK's @fuelpad/sdk/solana does it in one call, and refuses a transaction the wallet changed while signing:

TypeScript
import { pickTransactionVersion, signWithWallet } from "@fuelpad/sdk/solana";

// `wallet` and `account`: the Wallet Standard wallet your user connected.
const transactionVersion = pickTransactionVersion(wallet);

// Your server prepares the launch for this wallet (step 1)...
const launch = await prepareOnYourServer({ creator: account.address, transactionVersion });

// ...the wallet signs it...
const signed = await signWithWallet(wallet, account, launch.transaction);

// ...and your server sends it (step 3).
await submitOnYourServer(launch.id, signed);

prepareOnYourServer and submitOnYourServer are your own server's routes: the secret key never reaches the browser.

Send

Post the signed transaction to POST /launches/{id}/submit and Fuel sends it, or send it to Solana yourself. Do it within about a minute of preparing: the transaction expires with its blockhash.

TypeScript
await fuel.launches.submit(launchId, { transaction: signedBase64 });

Confirm

Poll GET /launches/{id} until state is confirmed (fuel.launches.wait(id) does it for you), or listen for the launch.confirmed webhook. The token then has a credit account and a proof page.

State Means
prepared Built and waiting for the creator's wallet
sent Sent to Solana, not confirmed yet
confirmed On chain with its route. The token is live
failed It did not land: error says why
expired Never sent in time: prepare it again

The token's route

The route comes from your fee strategy. Three fields shape it:

  • preset: the strategy to use (fps_...). Your default when left out.

  • split: the creator's pick of the AI's and the creator's shares, in basis points of your part, within the strategy's creator_choice. The strategy's own split when left out.

  • creator_fees_to: where the creator's share goes. The creator's own wallet when left out.

    { "split": { "ai_share": 7000, "creator_share": 1000 } }

Here the AI takes 70% of your part and the creator 10%, and Standard's wallet keeps its 20%. A launch is refused before anything is signed when a route wallet can't be paid, such as a program's address or Fuel's own. The answer's route lists every shareholder with its roles, in basis points of the whole fee, Fuel's 20% among them.

Quote tokens

A token trades against SOL unless you name a quote_mint: USDC, or a token on pump.fun's quote-control list. It then trades, pays its creator fees and pays its route in that token. Fuel credits USDC at $1, and sells any other quote token for USDC before crediting it.

Its opening buy is opening_buy_amount, in the quote token's base units: 5000000 is 5 USDC, paid from the creator's own account for it. Every amount in the API is base units, as on chain. A Token-2022 quote with a scaled UI amount (an xStock) or interest reads differently in wallets: turn a typed amount into base units with Token-2022's UiAmountToAmount.

Older wallets

Launches are version 1 transactions, Solana's newer format. A wallet that can't sign version 1 yet says so in supportedTransactionVersions; ask for "transaction_version": 0 for it: a version 0 transaction that loads shared accounts from Fuel's lookup table. A version 0 launch carries no opening buy.

Without a server

A project with no developer launches from the dashboard's Launch page. It builds the same launch with your strategy and route preview, and signs with the Solana wallet connected in your browser.