woopwoop

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.

bash
curl https://usewoop.xyz/api/v1/uploads \
  -H "Authorization: Bearer woop_…" \
  -F file=@coin.png
json
{ "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:

bash
curl https://usewoop.xyz/api/v1/pairs \
  -H "Authorization: Bearer woop_…"
json
[{ "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

bash
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
walletrequiredThe creator's wallet. It signs and pays for the launch
namerequired1–32 characters
symbolrequiredThe ticker: 2–10 letters or numbers
imagerequiredFrom /uploads, or any https image URL
pairrequiredA pair's symbol or mint from /pairs
descriptionoptionalUp to 280 characters
banneroptionalA 3:1 banner, from /uploads (kind=banner) or a URL
linksoptionalwebsite, x, telegram (https only)
firstBuyoptionalThe creator's buy in the fair opening, in the pair token
unlockDaysoptionalDays the creator's coins unlock over after graduation (default 10)
cliffDaysoptionalDays after graduation before they start unlocking (default 0)
json
{
  "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:

bash
curl https://usewoop.xyz/api/v1/transactions \
  -H "Authorization: Bearer woop_…" \
  -H "Content-Type: application/json" \
  -d '{ "transaction": "<signed base64>", "lastValidBlockHeight": 312345678 }'
json
{ "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

js
// 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.