https://www.floatpad.lol/api

Floatpad API

Launch coins, trade them and claim creator fees from your own app or bot. The same endpoints the site uses.

Prompt for your assistant

Paste this into Claude, ChatGPT or Cursor. It carries every endpoint and the signing flow.

I'm building on the Floatpad API (Solana launchpad on Meteora). Base URL: https://www.floatpad.lol

How it works:
- No API key. JSON in and out. Errors are { "error": string, "code": string } with a 4xx/5xx status.
- Amounts are integer strings: SOL in lamports (1e9), tokens with 6 decimals.
- Anything that moves funds returns an unsigned, already simulated base64 VersionedTransaction. The user's wallet signs it (@solana/web3.js), then POST it to /api/trade/send (trades and claims) or /api/launch/send (launches), then poll GET /api/tx/status until it is "confirmed", "failed" or "expired".
- A launch also needs a fresh mint Keypair that signs the launch transaction before the wallet does, and POST /api/launches afterwards to list the coin (repeat while it returns 202).

Endpoints:
- GET /api/coins: The 120 newest coins launched through Floatpad, newest first. Cached for 30 seconds.
- GET /api/stats: Totals across every coin, from Meteora's on-chain fee counters: fees and who they went to, volume, SOL in curves and pools, and launches per day. All SOL amounts are lamports. Cached for a minute.
- GET /api/coin/{mint}/state (path: mint: string): Where the coin trades right now and how far along its bonding curve it is. venue is curve, graduating (Meteora is moving it to its pool; trading pauses for about a minute) or pool.
- GET /api/coin/{mint}/position (query: mint: string (path), wallet: string): A wallet's SOL balance and its balance of this coin, in raw units.
- GET /api/trade/quote (query: mint: string, side: "buy" | "sell", amount: string, slippage?: number): What a trade returns at the current price: tokens out for a buy, lamports out for a sell. Both amounts are raw integers as strings.
- POST /api/trade/prepare (body: wallet: string, mint: string, side: "buy" | "sell", amount: string, slippage?: number): Builds and simulates the buy or sell, and returns it unsigned as a base64 versioned transaction. The wallet pays its own network fee. Sign it, then pass it to Send a transaction.
- POST /api/trade/send (body: tx: string, wallet: string, mint: string): Relays a signed trade or fee claim through Floatpad's RPC and returns its signature. Only transactions that the wallet pays for and that touch Meteora and token programs for this coin are accepted. Sent is not landed: check Transaction status next.
- GET /api/tx/status (query: signature: string, lastValidBlockHeight?: number): Whether a signature landed. expired means its blockhash is too old for it to ever land, so it is safe to try again. Poll about once a second.
- POST /api/metadata (form: name: string, symbol: string, image: file, description?: string, website?: string, twitter?: string, telegram?: string): Stores the image and the token's metadata JSON, and returns the metadata URI to launch with. Only URIs from this call can be launched.
- POST /api/launch/prepare (body: wallet: string, mint: string, name: string, symbol: string, uri: string, devBuySol?: number, shield?: boolean): One transaction that creates the coin's bonding curve on Floatpad's config with your wallet as creator, plus an optional first buy in the same transaction so nobody can buy before you. Generate a fresh mint keypair: it signs too.
- POST /api/launch/send (body: tx: string, mint: string): Relays the fully signed launch. Only a Meteora launch of this mint on Floatpad's config is accepted.
- POST /api/launches (body: signature: string, mint: string, lastValidBlockHeight?: number): Reads the launch back from chain and lists the coin on Floatpad. Safe to repeat. A 202 means it has not landed yet: call again in a second or two. A 410 means it never will.
- GET /api/claim (query: mint: string, wallet: string): What the creator can claim now, in lamports: curve trading fees, and LP fees once the coin has graduated.
- POST /api/claim (body: mint: string, wallet: string): An unsigned, simulated transaction that sends every waiting fee to the creator in SOL. Sign it and pass it to Send a transaction.
- GET /api/creator (query: wallet: string): Every coin a wallet launched, newest first, with its stage, curve progress, market cap and unclaimed fees in lamports.
- POST /api/creator (body: wallet: string): One unsigned, simulated claim per coin with fees waiting, largest first, up to 8 at a time. Sign them all (signAllTransactions takes one approval) and send each to Send a transaction. remaining counts coins left for the next call.

Before writing code, ask me for anything you need that is not here (wallet adapter, framework, RPC, hosting). Never ask for or hardcode a private key or seed phrase; signing must happen in the user's wallet.
Base URL
https://www.floatpad.lol
Format
JSON, no API key
Network
Solana mainnet · Meteora

Overview

Floatpad never holds your keys. Every call that moves funds returns an unsigned transaction that the server has already simulated. Your wallet signs it, you hand it back to be sent through Floatpad's RPC, and you poll until it lands.

  1. 01PrepareBuilt and simulated
  2. 02SignIn the user's wallet
  3. 03SendRelayed by Floatpad
  4. 04StatusConfirmed or expired
  • Amounts

    Raw integers as strings. SOL in lamports (1 SOL = 10^9), tokens with 6 decimals.

  • Transactions

    Base64 versioned transactions, in and out.

  • Errors

    Any failure returns { "error": "…", "code": "…" } with a 4xx or 5xx status. The message is safe to show users.

  • Rate limits

    Per IP, per minute, listed on each endpoint. Cached endpoints have none.

Fee terms

Every coin launches on one Meteora config written on-chain once, so these numbers are the same for every coin and can never change.

On the curveAfter graduation
Trading fee1%1%
Meteora20% of the fee20% of the fee
Creator50% of the rest50% of the rest
Liquidity49.5% of the rest49.5% of the rest
Floatpad0.5% of the rest0.51% of the rest
  • Supply

    1B tokens, 6 decimals. Fixed supply; the metadata can never be changed.

  • Graduation

    At 85 SOL in the curve the coin moves to a Meteora DAMM v2 pool with 20% of supply. All of that liquidity is locked forever.

  • Liquidity half

    Saved in the coin's pool wallet on the curve and added as locked liquidity at graduation; after that it compounds into the pool inside every trade.

Coins and stats

Read-only. Nothing here needs a wallet.

List coins

GET/api/coins

The 120 newest coins launched through Floatpad, newest first. Cached for 30 seconds.

Cached, no rate limit

curl https://www.floatpad.lol/api/coins
{  "coins": [    {      "mint": "7xKp…pump",      "name": "Floatie",      "symbol": "FLOAT",      "description": "Rides every wave.",      "image": "https://…/images/3f1c….png",      "creator": "9WzD…AWWM",      "curvePool": "MxWN…qKZv",      "graduatedPool": null,      "graduatedAt": null,      "website": null,      "twitter": "https://x.com/floatpad_",      "telegram": null,      "createdAt": "2026-10-27T10:12:44.120Z"    }  ]}

Platform stats

GET/api/stats

Totals across every coin, from Meteora's on-chain fee counters: fees and who they went to, volume, SOL in curves and pools, and launches per day. All SOL amounts are lamports. Cached for a minute.

Cached, no rate limit

curl https://www.floatpad.lol/api/stats
{  "coins": 2,  "graduated": 0,  "fees": {    "total": 111000,    "creators": 44400,    "liquidity": 43956,    "meteora": 22200,    "floatpad": 444  },  "creatorsClaimed": 40400,  "volumeLamports": 11100000,  "curveLamports": 10989000,  "poolLamports": 0,  "marketCapUsd": 8120.4,  "volume24hUsd": 312.9,  "solUsd": 182.4,  "launches": [    {      "day": "2026-10-27",      "count": 2    }  ],  "top": [    {      "mint": "7xKp…pump",      "name": "Floatie",      "symbol": "FLOAT",      "stage": "curve",      "feesLamports": 101000,      "creatorLamports": 40400,      "liquidityLamports": 39996,      "marketCapUsd": 5210.2    }  ],  "updatedAt": "2026-10-27T12:04:00.000Z"}

Coin state

GET/api/coin/{mint}/state

Where the coin trades right now and how far along its bonding curve it is. venue is curve, graduating (Meteora is moving it to its pool; trading pauses for about a minute) or pool.

60 requests a minute

Path

mintstring · required
The coin's mint address.
curl https://www.floatpad.lol/api/coin/7xKp…pump/state
{  "venue": "curve",  "progress": 0.1176,  "liquidityLamports": "9999000",  "priceLamportsPerToken": 0.0000286}

Wallet position

GET/api/coin/{mint}/position

A wallet's SOL balance and its balance of this coin, in raw units.

60 requests a minute

Query

mintstring (path) · required
The coin's mint address.
walletstring · required
The wallet to look up.
curl "https://www.floatpad.lol/api/coin/7xKp…pump/position?wallet=9WzD…AWWM"
{  "lamports": 1520400000,  "tokens": "35120000000",  "decimals": 6}

Trading

Buys and sells route to the coin's bonding curve or, after graduation, its Meteora pool. You never pick the venue.

Get a quote

GET/api/trade/quote

What a trade returns at the current price: tokens out for a buy, lamports out for a sell. Both amounts are raw integers as strings.

90 requests a minute

Query

mintstring · required
The coin's mint address.
side"buy" | "sell" · required
Buy spends SOL, sell spends tokens.
amountstring · required
Lamports for a buy, raw tokens (6 decimals) for a sell.
slippagenumber
Percent, 0.5 to 50. Default 5.
curl "https://www.floatpad.lol/api/trade/quote?mint=7xKp…pump&side=buy&amount=100000000"
{  "venue": "curve",  "out": "3482194021"}

Prepare a trade

POST/api/trade/prepare

Builds and simulates the buy or sell, and returns it unsigned as a base64 versioned transaction. The wallet pays its own network fee. Sign it, then pass it to Send a transaction.

30 requests a minute

JSON body

walletstring · required
The trader's wallet; it signs and pays.
mintstring · required
The coin's mint address.
side"buy" | "sell" · required
Buy spends SOL, sell spends tokens.
amountstring · required
Lamports for a buy, raw tokens for a sell.
slippagenumber
Percent, 0.5 to 50. Default 5.
curl -X POST https://www.floatpad.lol/api/trade/prepare \  -H "content-type: application/json" \  -d '{"wallet":"9WzD…AWWM","mint":"7xKp…pump","side":"buy","amount":"100000000"}'
{  "tx": "AQAAAAAAAAAA…",  "lastValidBlockHeight": 312004518,  "venue": "curve",  "expectedOut": "3482194021"}

Send a transaction

POST/api/trade/send

Relays a signed trade or fee claim through Floatpad's RPC and returns its signature. Only transactions that the wallet pays for and that touch Meteora and token programs for this coin are accepted. Sent is not landed: check Transaction status next.

30 requests a minute

JSON body

txstring · required
The signed transaction, base64.
walletstring · required
The signer; must be the fee payer.
mintstring · required
The coin the transaction is for.
curl -X POST https://www.floatpad.lol/api/trade/send \  -H "content-type: application/json" \  -d '{"tx":"AQAB…","wallet":"9WzD…AWWM","mint":"7xKp…pump"}'
{  "signature": "5h3K…qW9e"}

Transaction status

GET/api/tx/status

Whether a signature landed. expired means its blockhash is too old for it to ever land, so it is safe to try again. Poll about once a second.

120 requests a minute

Query

signaturestring · required
From Send a transaction.
lastValidBlockHeightnumber
From the prepare call. Without it the status never turns expired.
curl "https://www.floatpad.lol/api/tx/status?signature=5h3K…qW9e&lastValidBlockHeight=312004518"
{  "status": "confirmed"}

Launching

A launch is four calls: upload the details, prepare the transaction, send it signed, then record it so the coin shows up on Floatpad.

Upload token details

POST/api/metadata

Stores the image and the token's metadata JSON, and returns the metadata URI to launch with. Only URIs from this call can be launched.

10 requests a minute

Form fields

namestring · required
Up to 32 characters.
symbolstring · required
The ticker, up to 10 characters.
imagefile · required
PNG, JPG, GIF or WebP, under 4 MB.
descriptionstring
Up to 600 characters.
websitestring
A URL.
twitterstring
A URL or @handle.
telegramstring
A URL or @handle.
curl -X POST https://www.floatpad.lol/api/metadata \  -F name=Floatie -F symbol=FLOAT \  -F description="Rides every wave." \  -F image=@floatie.png
{  "uri": "https://…/metadata/1b6c…json",  "image": "https://…/images/3f1c….png"}

Prepare a launch

POST/api/launch/prepare

One transaction that creates the coin's bonding curve on Floatpad's config with your wallet as creator, plus an optional first buy in the same transaction so nobody can buy before you. Generate a fresh mint keypair: it signs too.

12 requests a minute

JSON body

walletstring · required
The creator; signs, pays and earns the creator fees.
mintstring · required
Public key of a new keypair you generated.
namestring · required
Same as uploaded.
symbolstring · required
Same as uploaded.
uristring · required
From Upload token details.
devBuySolnumber
First buy in SOL, 0 to 1. Default 0.
shieldboolean
Launch with the sniper shield: the fee starts at 50% and falls to 1% over the first 2 seconds. Your first buy pays 1%. Default false.
curl -X POST https://www.floatpad.lol/api/launch/prepare \  -H "content-type: application/json" \  -d '{"wallet":"9WzD…AWWM","mint":"7xKp…pump","name":"Floatie","symbol":"FLOAT","uri":"https://…json","devBuySol":0.1}'
{  "launchTx": "AgAAAAAAAAAA…",  "launchLastValidBlockHeight": 312004518}

Send a launch

POST/api/launch/send

Relays the fully signed launch. Only a Meteora launch of this mint on Floatpad's config is accepted.

12 requests a minute

JSON body

txstring · required
The launch, signed by the mint and the wallet, base64.
mintstring · required
The new coin's mint address.
curl -X POST https://www.floatpad.lol/api/launch/send \  -H "content-type: application/json" \  -d '{"tx":"AgAB…","mint":"7xKp…pump"}'
{  "signature": "3vZr…8Lpa"}

Record a launch

POST/api/launches

Reads the launch back from chain and lists the coin on Floatpad. Safe to repeat. A 202 means it has not landed yet: call again in a second or two. A 410 means it never will.

40 requests a minute

JSON body

signaturestring · required
From Send a launch.
mintstring · required
The new coin's mint address.
lastValidBlockHeightnumber
From Prepare a launch, so an expired launch reports 410.
curl -X POST https://www.floatpad.lol/api/launches \  -H "content-type: application/json" \  -d '{"signature":"3vZr…8Lpa","mint":"7xKp…pump","lastValidBlockHeight":312004518}'
{  "ok": true,  "mint": "7xKp…pump"}

Creator fees

Creators claim their half of every fee, from the curve and from their locked position after graduation, in one transaction. Only the creator wallet can.

Unclaimed fees

GET/api/claim

What the creator can claim now, in lamports: curve trading fees, and LP fees once the coin has graduated.

60 requests a minute

Query

mintstring · required
The coin's mint address.
walletstring · required
The creator's wallet.
curl "https://www.floatpad.lol/api/claim?mint=7xKp…pump&wallet=9WzD…AWWM"
{  "curveLamports": "40400",  "lpLamports": "0"}

Claim fees

POST/api/claim

An unsigned, simulated transaction that sends every waiting fee to the creator in SOL. Sign it and pass it to Send a transaction.

12 requests a minute

JSON body

mintstring · required
The coin's mint address.
walletstring · required
The creator's wallet; signs and pays.
curl -X POST https://www.floatpad.lol/api/claim \  -H "content-type: application/json" \  -d '{"mint":"7xKp…pump","wallet":"9WzD…AWWM"}'
{  "tx": "AQAAAAAAAAAA…",  "lastValidBlockHeight": 312004518,  "lamports": "40400"}

A creator's coins

GET/api/creator

Every coin a wallet launched, newest first, with its stage, curve progress, market cap and unclaimed fees in lamports.

20 requests a minute

Query

walletstring · required
The creator's wallet.
curl "https://www.floatpad.lol/api/creator?wallet=9WzD…AWWM"
{  "coins": [    {      "mint": "7xKp…pump",      "name": "Floatie",      "symbol": "FLOAT",      "image": "https://…png",      "createdAt": "2026-10-27T12:00:00.000Z",      "shielded": false,      "venue": "curve",      "progress": 0.42,      "marketCapUsd": 18250,      "unclaimedLamports": "40400"    }  ]}

Claim fees from every coin

POST/api/creator

One unsigned, simulated claim per coin with fees waiting, largest first, up to 8 at a time. Sign them all (signAllTransactions takes one approval) and send each to Send a transaction. remaining counts coins left for the next call.

6 requests a minute

JSON body

walletstring · required
The creator's wallet; signs and pays.
curl -X POST https://www.floatpad.lol/api/creator \  -H "content-type: application/json" \  -d '{"wallet":"9WzD…AWWM"}'
{  "claims": [    {      "mint": "7xKp…pump",      "symbol": "FLOAT",      "tx": "AQAAAAAAAAAA…",      "lastValidBlockHeight": 312004518,      "lamports": "40400"    }  ],  "remaining": 0}

Errors

Branch on code, show error.

CodeStatusMeaning
BAD_REQUEST400A parameter is missing or malformed.
AMOUNT400The amount is zero or too small to trade.
SIMULATION400The transaction failed in simulation; the message says why.
SLIPPAGE400The price moved past your slippage before it landed.
FUNDS400The wallet does not have enough SOL or tokens.
EXPIRED400 / 410The blockhash expired. Prepare again.
GRADUATING400The coin is moving to its pool. Trading reopens in about a minute.
BAD_TX400The signed transaction is not one Floatpad relays.
NOTHING400No creator fees are waiting.
FOREIGN400The coin was not launched through Floatpad.
FORBIDDEN403Only the coin's creator can do this.
NOT_FOUND400 / 404No such coin on Floatpad.
MINT_EXISTS409The mint address is taken. Generate a new keypair.
DUPLICATE409This coin was already recorded with another signature.
RATE_LIMIT429Too many requests from your IP. Wait a minute.
NOT_CONFIGURED503Launching is switched off on this deployment.
INTERNAL500Something broke on our side. Try again.