API reference · Launch on Solana
Create a launch
POST
https://payday.direct/api/v1/launchesBuilds the launch transactions for the wallet to sign. Nothing is on chain yet. Needs a key made with launching switched on. See the guide.
Needs an API key in Authorization: Bearer or X-API-Key. Authentication
Body
mode"account" | "cash_payback"default "account"account: fees to fees_to. cash_payback: fees to the coin's holders by time held (GET /payback for the rules); any pairing pump.fun offers.
walletstringrequiredSolana address that signs and pays for the launch
namestringrequiredThe coin's name
symbolstringrequiredticker, case kept
descriptionstringimagestringrequiredPNG, JPEG, GIF or WebP as base64 or a data URL
bannerstringoptional, same formats
dev_buy_solnumberrequiredSOL the wallet spends on the first buy
fees_tostringX handle that gets the fees; or a $cashtag, venmo:username, or zelle:<email or US phone> (a Zelle destination is permanent and never shown in public)
hold_in_vaultbooleanX handles only: hold the fees for the account to claim instead of paying them through Peer
quote_mintstringoptional: pair with a stock or another asset pump.fun supports instead of SOL
reward_basketobject[]cash_payback only, where baskets are open: 1 to 15 assets from GET /rewards/assets, no repeats. Plain mints for an even split, or { mint, weight_bps } for every asset with weights adding up to 10000, each at least 100. The split stays the same; basket_type says what the holders' part does with the basket. Dividends follow the Cash Payback round clock and are shared by the hold ladder. Locked at launch. Only on a SOL pair (leave out quote_mint). Each asset is checked first (a transfer fee of at most 5%, no transfer hook, not frozen, a swap route from the pairing); a refused basket answers 400 with error.rejected, one reason per asset. An asset with its own transfer fee keeps it: holders get what is sent minus that fee, shown as transfer_fee_bps. Leave it out and holders are paid in the pairing.
basketobjectcash_payback only, where baskets are open; the newer form of reward_basket and basket_type (send one form, not both). Locked at launch. The site launcher runs the same validator. Refusals answer 400 with a stable error.code: basket_size, basket_weights, basket_type, basket_asset_not_allowed (error.mint and error.rejected, one reason per asset), basket_payback_not_allowed (error.mint).
basket.type"payout" | "fund"default "payout"payout: the whole holders' part buys the legs by weight and all of it is sent every round. fund: the legs are bought and kept; holders are paid only value above cost.
basket.legsobject[]requiredbasket.paybackstring | nullfund only, optional: one asset from the full list (GET /rewards/assets?for=payout). pair_pct of the holders' part (GET /payback baskets.payback.pair_pct, saved on the coin at launch) buys it and is paid every round; the rest buys the fund. Refused on a payout basket.
basket_type"payout" | "fund"default "payout"with reward_basket, locked at launch. payout: the whole holders' part buys the basket by weight and all of it is sent each dividend; nothing is held. fund: the whole holders' part buys the basket and the coin keeps it (never sold); holders are paid only each asset's value above what it cost, so if the assets do not rise the fund pays nothing. A fund basket takes only stocks, pre-stocks, the majors (SOL, WBTC, ETH, HYPE, XMR) and the big memes (PUMP, Fartcoin, Bonk, $WIF, TRUMP, PENGU); no USDC.
pay_with_solbooleandefault truewith quote_mint: the wallet pays in SOL and a swap transaction is added
linksobjectWhere to see the coin
links.xstringlinks.telegramstringlinks.websitestringResponses
201Transactions to sign
400Error
401Missing or invalid key
403Error
429Over the limit. Retry-After says when to try again.
Response fields
idstringThe id
status"awaiting_signature" | "submitting" | "launched" | "expired"curve on the bonding curve, graduated once it moved to the pump.fun AMMmintstringThe coin's address: a Solana mint, or an EVM token address in lower case
walletstringsignaturestring | nullfees_toobject | nullfees_to.rail"xmoney" | "cashapp" | "venmo" | "zelle"How the account is paid
fees_to.handlestring | nullThe X handle
transactionsobject[]create only: sign each with the wallet, in this order
transactions[].namestringThe coin's name
transactions[].transactionstringbase64 versioned transaction
fee_splitobject | nullfee_split.status"locked" | "pending"curve on the bonding curve, graduated once it moved to the pump.fun AMMfee_split.nextstringsign_within_secondsintegerexpires_in_secondsintegerdev_buy_tokensnumber | nulllinksobject | nullWhere to see the coin