API reference
Launch
Launch a coin from code: the same four steps the launch form uses.
- GET
/api/v1/launch/status - POST
/api/v1/launch/prepare - POST
/api/v1/launch/submit - POST
/api/v1/launch/confirm
The flow
- 1Check that launching is open with
GET /api/v1/launch/status. - 2Send the form to
POST /api/v1/launch/prepare. You get the coin's address and an unsigned payment. - 3Sign the payment in the wallet. Sign only, do not send it.
- 4Send the signed payment to
POST /api/v1/launch/submit. Zpad sends it and starts the create once it lands. - 5Ask
POST /api/v1/launch/confirmevery 2 to 3 seconds whilestatusisworking.
These routes answer plain JSON (no envelope). Errors are { "error": "..." }.
Launch states
Launch status
/api/v1/launch/statusNo sign inWhether launching is open, and what it costs. feeSol is all a launcher pays; createCostSol is pump.fun's cost, paid by the launch wallet out of that fee.
- Sign in
- Not needed
- CSRF header
- Not needed
- Cached
- Never
- Rate limit
- None of its own
Response
{
"open": boolean,
"reason": "<plain words>" | null,
"feeSol": 0.05,
"createCostSol": 0.02,
"totalSol": 0.05,
"launchWallet": "<launch wallet address>" | null
}Example
curl -s "/api/v1/launch/status"Prepare a launch
/api/v1/launch/prepareSigned in, CSRF headerChecks the form, stores the picture and details, fixes the coin's address and builds the unsigned payment: 0.05 SOL from the launcher to the launch wallet, with a memo that names the launch.
- Sign in
- Needed (session cookie)
- CSRF header
- Needed:
x-zpad: zpad - Cached
- Never
- Rate limit
- 6 an hour per wallet
Body
Multipart form data.
Response
{
"mint": "<coin address>",
"tx": "<unsigned payment, base64>",
"lamports": "50000000",
"launchWallet": "<launch wallet address>",
"memo": "<launch memo>"
}Errors
Example
curl -s -X POST -b cookies.txt "/api/v1/launch/prepare" \
-H "x-zpad: zpad" \
-F "name=<coin name>" \
-F "symbol=<ticker>" \
-F "description=<about text>" \
-F "image=@<picture file>"Submit the payment
/api/v1/launch/submitSigned in, CSRF headerTakes the payment from prepare, signed by the launcher's wallet. Zpad checks that it is exactly the launch payment, sends it and follows it until it lands. Once the payment is proven on chain, the create starts.
- Sign in
- Needed (session cookie)
- CSRF header
- Needed:
x-zpad: zpad - Cached
- Never
- Rate limit
- None of its own
Body
Response
{
"status": "working" | "live" | "failed" | "paid_failed",
"phase": "paying" | "creating" | "live" | "failed",
"reason": "<plain words>" | null,
"signature": "<payment signature>" | null,
"mint": "<coin address>",
"preBuySol": number
}Errors
Example
curl -s -X POST -b cookies.txt "/api/v1/launch/submit" \
-H "x-zpad: zpad" \
-H "content-type: application/json" \
-d '{"mint":"<coin address>","tx":"<signed payment, base64>"}'Follow the launch
/api/v1/launch/confirmSigned in, CSRF headerMoves the launch on as far as it can and says where it is. Ask every 2 to 3 seconds while status is working.
- Sign in
- Needed (session cookie)
- CSRF header
- Needed:
x-zpad: zpad - Cached
- Never
- Rate limit
- None of its own
Body
Response
{
"status": "working" | "live" | "failed" | "paid_failed",
"phase": "paying" | "creating" | "live" | "failed",
"reason": "<plain words>" | null,
"signature": "<payment signature>" | null,
"mint": "<coin address>",
"preBuySol": number
}Errors
Example
curl -s -X POST -b cookies.txt "/api/v1/launch/confirm" \
-H "x-zpad: zpad" \
-H "content-type: application/json" \
-d '{"mint":"<coin address>"}'