Launch a coin
Launch a coin on the woopcurve from your app. Name, ticker, image and pair are required.
A launch takes the same form as woop's launch page. It goes on the woopcurve, opens with a 60-second fair opening, and shows on woop as soon as it lands.
1. Upload the image
Send the coin's picture (PNG, JPG, WebP or GIF, up to 8 MB). woop crops it square and stores it on its CDN.
curl https://usewoop.xyz/api/v1/uploads \
-H "Authorization: Bearer woop_…" \
-F file=@coin.png{ "url": "https://…/coins/img/3f2a….webp", "kind": "image" }For a banner, add -F kind=banner (cropped to 3:1, 1500 × 500). You can also send JSON: {"url": "https://…"} to have woop fetch it, or {"data": "<base64>"}.
You can skip this step and pass any https image URL in the launch: woop fetches and stores it for you.
2. Pick a pair
The pair is what the coin trades against, and what its holders get paid in. Only open pairs work:
curl https://usewoop.xyz/api/v1/pairs \
-H "Authorization: Bearer woop_…"[{ "symbol": "SOL", "name": "Solana", "mint": "So111…112", "category": "Crypto", "logo": "https://…", "decimals": 9, "graduationRaise": 125.8 }]Pass the pair's symbol or mint.
Check a ticker first if you like: GET /api/v1/tickers/MOON returns whether it's free. A ticker someone already has costs 1 SOL, paid to that coin's holders.
3. Build the launch
curl https://usewoop.xyz/api/v1/launches \
-H "Authorization: Bearer woop_…" \
-H "Content-Type: application/json" \
-d '{
"wallet": "8hyP…vMh6",
"name": "Moon Cat",
"symbol": "MCAT",
"image": "https://…/coins/img/3f2a….webp",
"pair": "SOL",
"description": "The cat that went to the moon.",
"banner": "https://…/coins/banner/9c1d….webp",
"links": { "website": "https://mooncat.xyz", "x": "https://x.com/mooncat", "telegram": "https://t.me/mooncat" },
"firstBuy": "0.5"
}'| Field | ||
|---|---|---|
wallet | required | The creator's wallet. It signs and pays for the launch |
name | required | 1–32 characters |
symbol | required | The ticker: 2–10 letters or numbers |
image | required | From /uploads, or any https image URL |
pair | required | A pair's symbol or mint from /pairs |
description | optional | Up to 280 characters |
banner | optional | A 3:1 banner, from /uploads (kind=banner) or a URL |
links | optional | website, x, telegram (https only) |
firstBuy | optional | The creator's buy in the fair opening, in the pair token |
unlockDays | optional | Days the creator's coins unlock over after graduation (default 10) |
cliffDays | optional | Days after graduation before they start unlocking (default 0) |
{
"mint": "7xKX…",
"transaction": "AQAAAA…",
"lastValidBlockHeight": 312345678,
"pair": { "symbol": "SOL", "mint": "So111…112" },
"costSol": 0.0297,
"next": "Sign `transaction` with `wallet`, then POST it to /api/v1/transactions."
}mint is the new coin's address. costSol is what the launch costs the creator in network fees and rent; a first buy is on top. The transaction is valid for about a minute.
4. Sign and send
The creator's wallet signs transaction (base64, a versioned transaction already signed by the new mint). Then:
curl https://usewoop.xyz/api/v1/transactions \
-H "Authorization: Bearer woop_…" \
-H "Content-Type: application/json" \
-d '{ "transaction": "<signed base64>", "lastValidBlockHeight": 312345678 }'{ "kind": "launch", "signature": "5Jx…", "mint": "7xKX…", "url": "https://usewoop.xyz/coin/7xKX…" }The coin is live. It's on woop's Pulse and Coins pages within seconds, and counts toward your key's launches.
In code
// Node, with @solana/web3.js and a wallet that can sign
import { VersionedTransaction } from '@solana/web3.js';
const api = (path, body) => fetch(`https://usewoop.xyz/api/v1${path}`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.WOOP_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify(body),
}).then((r) => r.json());
const launch = await api('/launches', { wallet: wallet.publicKey.toBase58(), name: 'Moon Cat', symbol: 'MCAT', image, pair: 'SOL' });
const tx = VersionedTransaction.deserialize(Buffer.from(launch.transaction, 'base64'));
tx.sign([wallet]); // the mint's signature stays
const sent = await api('/transactions', { transaction: Buffer.from(tx.serialize()).toString('base64'), lastValidBlockHeight: launch.lastValidBlockHeight });
console.log(sent.url);What the coin gets
Everything a coin launched on woop gets: a fair opening, Fair Blocks, the Exit Queue, holders paid every hour, ticker protection, the creator's coins locked until graduation, and its own WAMM pool with liquidity locked for good. The creator earns from every trade. See the woopcurve and creator fees.
