Docs menuLaunch

API reference

Launch

Launch a coin from code: the same four steps the launch form uses.

The flow

  1. 1Check that launching is open with GET /api/v1/launch/status.
  2. 2Send the form to POST /api/v1/launch/prepare. You get the coin's address and an unsigned payment.
  3. 3Sign the payment in the wallet. Sign only, do not send it.
  4. 4Send the signed payment to POST /api/v1/launch/submit. Zpad sends it and starts the create once it lands.
  5. 5Ask POST /api/v1/launch/confirm every 2 to 3 seconds while status is working.

These routes answer plain JSON (no envelope). Errors are { "error": "..." }.

Launch states

statusphaseMeaning
workingpayingThe payment is on its way.
workingcreatingPaid. The coin is being created. It keeps going on its own.
liveliveThe create is proven on chain. The coin is live.
failedfailedNothing was paid. reason says why. Start again.
paid_failedfailedPaid, but no coin after 5 tries or 24 hours. The payment goes on the refund list and is sent back by hand.

Launch status

GET/api/v1/launch/statusNo sign in

Whether 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

200
{
  "open": boolean,
  "reason": "<plain words>" | null,
  "feeSol": 0.05,
  "createCostSol": 0.02,
  "totalSol": 0.05,
  "launchWallet": "<launch wallet address>" | null
}

Example

Terminal
curl -s "/api/v1/launch/status"

Prepare a launch

POST/api/v1/launch/prepareSigned in, CSRF header

Checks 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.

NameTypeWhat it is
nametext1 to 32 characters, at most 32 bytes.
symboltext1 to 10 letters or numbers. A leading $ is dropped.
descriptiontextOptional, up to 500 characters.
imagefileJPEG, PNG, GIF or WEBP (checked by its bytes), up to 4 MB and 4096 x 4096 pixels.
twitterUrltextOptional. An x.com or twitter.com link.
telegramUrltextOptional. A t.me link.
websiteUrltextOptional.
preBuySoltextOptional, 0 to 100. Only recorded: the launcher signs that buy in their own wallet once the coin is live.

Response

200
{
  "mint": "<coin address>",
  "tx": "<unsigned payment, base64>",
  "lamports": "50000000",
  "launchWallet": "<launch wallet address>",
  "memo": "<launch memo>"
}

Errors

StatusMessageWhen
400Give the coin a name.A form rule failed. Each rule has its own message, for example: The ticker is 1 to 10 letters or numbers.
400The launch wallet cannot launch a coin itself. Sign in with another wallet.Signed in as the launch wallet.
401Connect your wallet and sign in first.No session cookie, or it expired.
403Missing request header.No CSRF header.
403Launching is not open yet. Nothing is created and nothing is charged until it opens.Launching is closed.
409That coin address is already in use. Try again.Rare. Start again.
429That is a lot of launches from one wallet. Wait a while and try again.More than 6 starts in an hour.
503Launching is paused for a moment. Nothing was created and nothing was charged. Try again soon.Launching cannot run just now.
503The coin's picture could not be saved just now. Nothing was created. Try again in a moment.Storage did not answer.

Example

Terminal
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

POST/api/v1/launch/submitSigned in, CSRF header

Takes 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

NameTypeWhat it is
mintstringThe coin address from prepare.
txstringThe signed payment, base64.

Response

200
{
  "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

StatusMessageWhen
400That transaction could not be read.tx is missing or too long.
400The transaction was changed after Zpad built it. Nothing was sent.The signed payment is not exactly the one prepare built. Each check has its own message.
404No such launch for this wallet.mint is not a launch of the signed in wallet.
409A payment for this launch is already on its way.A different payment was already sent for this launch.
500Something went wrong on our side. If you paid, your launch is safe and keeps going on its own.A server problem.

Example

Terminal
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

POST/api/v1/launch/confirmSigned in, CSRF header

Moves 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

NameTypeWhat it is
mintstringThe coin address from prepare.

Response

200
{
  "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

StatusMessageWhen
404No such launch for this wallet.mint is not a launch of the signed in wallet.
503The chain could not be read just now. Your launch is safe; it keeps going on its own.Solana did not answer. Ask again.

Example

Terminal
curl -s -X POST -b cookies.txt "/api/v1/launch/confirm" \
  -H "x-zpad: zpad" \
  -H "content-type: application/json" \
  -d '{"mint":"<coin address>"}'
Cookies On Our Website. We use cookies to keep you signed in and remember your settings.