Launch API
Build a launch with the site's rules, sign it, send it privately, track it.
The flow
- Build.
POST /v1/launcheswith the creator wallet and the coin fields. The server runs the same checks as the site, picks the config for the fee option, adds the dev buy and the Jito tip, simulates, and returns a base64 v0 transaction plussigners. - Sign. The creator wallet signs (and your mint key, if you sent a custom
mint). Signers can sign in any order. - Submit.
POST /v1/launches/{id}/submitwithin about 60 seconds. It is sent through Jito, privately, and answersliveorsubmittedwithinwaitMs(default 20 s). - Track. Poll
GET /v1/launches/{id}, or listen forlaunch.createdon a webhook or thelauncheschannel.
const r = await justi.launch({ signer: wallet, name: "Swordope", ticker: "SWORD", image, mode: "split", creatorBps: 50 });
// r.status: "live" | "submitted" | "failed" | "expired"; r.mint, r.signature, r.urlFields and rules
| Field | Rule |
|---|---|
| wallet | Creator wallet. Pays, signs, becomes the pool creator and earns the creator fee. |
| name | 2 to 32 characters. |
| ticker | 2 to 10 letters or numbers. A leading $ is dropped. |
| image | https URL (fetched by the server: public hosts, 5 MB, 8 s) or a data URL up to 500 KB. Large images are re-encoded to WebP. |
| banner | Optional 3:1 banner shown on the site. Not on chain. |
| mode, creatorBps | creator: 0 to 250 in steps of 25. holders: 0. split: 25 to 200 (plus 0.5% to holders). |
| devBuyLamports | Optional. Capped at 15% of supply; the cap per option is in GET /v1/pad (maxDevBuyLamports, about 4.665523 SOL on the lowest fee option). |
| xUrl, telegramUrl, website | Optional links, stored in the metadata. |
| mint | Optional custom mint public key. See below. |
Refusals have clear codes: copy_exists (409, with details.existing), launch_limit (429, 10 per wallet a day), image_fetch_failed, mint_taken, insufficient_funds. See Errors.
Custom (vanity) mints
Without mint, the server uses a key ending in JUST from its pool and signs that slot before returning. To use your own vanity mint, grind the keypair yourself, send only its public key as mint, and sign the returned transaction with it. The API has no field for a secret key and never needs one.
const mintKp = Keypair.fromSecretKey(myGroundKey); // stays on your machine
const r = await justi.launch({ signer: wallet, mintSigner: mintKp, name: "Bunnett", ticker: "BUNNETT", image, mode: "holders" });signers[] in the build response lists every slot: payer and mint, with signed: true when the server already signed it.Reference
#Build a launch exactly like the site does
Same validation as the site: copy rule, 15% dev-buy cap, tier configs, sniper window, 10 launches per wallet a day. Returns an unsigned (by the wallet) v0 create transaction. signers lists every required signature: the payer (wallet) always; the mint is already signed for pool keys, or must be signed by your client with your custom mint keypair. Then POST /v1/launches/{id}/submit with the fully signed transaction within about a minute.
Body
| Field | Type | About |
|---|---|---|
| walletrequired | address | Creator wallet: pays, signs, is the pool creator. |
| namerequired | string | max 32 chars |
| tickerrequired | string | 2 to 10 letters or numbers; a leading $ is dropped. max 11 chars |
| description | string | max 280 chars, default "" |
| imagerequired | string | https URL (fetched by the server: public hosts only, 5 MB max, 8 s) or a data:image/...;base64 URL up to 500 KB. max 700000 chars |
| banner | string | null | Optional 3:1 banner, https URL or data URL (1 MB). Site only, not on chain. max 1400000 chars |
| xUrl | string | null | max 200 chars |
| telegramUrl | string | null | max 200 chars |
| website | string | null | max 200 chars |
| moderequired | "creator" | "holders" | "split" | Who earns the fee: the creator, holders, or both. |
| creatorBps | integer | Creator fee in bps (creator: 0-250 step 25; split: 25-200 step 25; holders: 0). default 0 |
| devBuyLamports | u64 string | Dev buy in the create transaction. Capped at 15% of supply. default "0" |
| mint | address | Custom (vanity) mint public key. The integrator's client holds the keypair and signs the returned transaction with it. Never send the secret key. Without it the server uses a ...JUST key from its pool (already signed in). |
| hidden | boolean | Admin only (X-Admin-Token header): the coin never appears on the board, live feeds, token list or stats. Its page and APIs by mint still work. |
| testConfig | boolean | Admin only (X-Admin-Token header): launch on the server's test config (holders tier, low graduation threshold). Always hidden. |
Response LaunchBuilt
| Field | Type | About |
|---|---|---|
| launchIdrequired | string | UUID. |
| mintrequired | address | |
| customMintrequired | boolean | |
| vanityrequired | boolean | A ...JUST key from the pool. |
| signersrequired | object[] | |
| pubkeyrequired | address | |
| rolerequired | "payer" | "mint" | "other" | |
| signedrequired | boolean | |
| curvePoolrequired | address | |
| configrequired | address | |
| tierrequired | string | |
| feesrequired | object | |
| tierrequired | string | |
| moderequired | "creator" | "holders" | "split" | Who earns the fee: the creator, holders, or both. |
| totalPctrequired | number | |
| platformPctrequired | number | |
| creatorPctrequired | number | |
| holdersPctrequired | number | |
| protocolPctrequired | number | |
| creatorOnchainPercentrequired | number | |
| poolFeeNumeratorrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| devBuyLamportsrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| devBuyTokensrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| devBuyPctOfSupplyrequired | number | |
| bytesrequired | integer | |
| computeUnitsrequired | integer | null | |
| tipLamportsrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| lastValidBlockHeightrequired | integer | |
| metadataUrirequired | string | |
| imagerequired | string | |
| transactionrequired | string | |
| hidden | boolean | Present when the launch was built hidden (admin). |
| testConfig | boolean | Present when built on the test config (admin). |
curl -X POST "https://api.justi.fun/v1/launches" \
-H "Content-Type: application/json" \
-d '{"wallet":"<wallet>","name":"Kurumi","ticker":"KURUMI","description":"hold the line.","image":"https://example.com/kurumi.png","mode":"holders","creatorBps":0,"devBuyLamports":"100000000","mint":"<mint>"}'#Send a signed launch (Jito, private)
The transaction must be exactly the built message with every required signature. Answers live, or submitted after waitMs (default 20000); poll GET /v1/launches/{id}.
Parameters
| Name | Type | About |
|---|---|---|
| idrequiredpath | string | UUID. |
Body
| Field | Type | About |
|---|---|---|
| transactionrequired | string | Base64 serialized versioned transaction. max 4000 chars |
| waitMs | integer | 0 to 60000 |
Response LaunchSubmitted
| Field | Type | About |
|---|---|---|
| statusrequired | "live" | "submitted" | |
| mintrequired | address | |
| signaturerequired | string |
curl -X POST "https://api.justi.fun/v1/launches/<id>/submit" \
-H "Content-Type: application/json" \
-d '{"transaction":"<signed base64 transaction>"}'#Launch status
Parameters
| Name | Type | About |
|---|---|---|
| idrequiredpath | string | UUID. |
Response Launch
| Field | Type | About |
|---|---|---|
| launchIdrequired | string | UUID. |
| statusrequired | "built" | "submitted" | "live" | "failed" | "expired" | |
| mintrequired | address | |
| curvePoolrequired | address | |
| configrequired | address | |
| tierrequired | string | |
| creatorrequired | address | |
| namerequired | string | |
| tickerrequired | string | |
| customMintrequired | boolean | |
| signaturerequired | string | null | |
| errorrequired | string | null | |
| devBuyLamportsrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| devBuyTokensrequired | u64 string | Unsigned integer as a decimal string (may exceed 2^53). |
| lastValidBlockHeightrequired | integer | |
| metadataUrirequired | string | |
| imagerequired | string | |
| viaApirequired | boolean | |
| partnerrequired | string | null | Label of the API key that built it. |
| createdAtrequired | integer | Unix time in seconds. |
| updatedAtrequired | integer | Unix time in seconds. |
curl "https://api.justi.fun/v1/launches/<id>"