Programs
Launch (API)
What You'll Do
Use the Genesis API to create and register token launches in a single command:
- Create a launchpool (48h deposit window, proportional distribution)
- Create a bonding curve (instant trading, auto-graduates to Raydium)
- Optionally link a launch to an agent with
--agentMint - Register an existing genesis account with
genesis launch register
Summary
The genesis launch commands provide a streamlined way to launch tokens using the Genesis API. Instead of manually creating a genesis account, adding buckets, finalizing, and registering separately, the API handles the full flow.
genesis launch create: All-in-one command — builds transactions via the API, signs and sends them, and registers the launchgenesis launch register: Registers an existing genesis account on the Metaplex platform to get a public launch page- Two launch types:
launchpool(default, 48h deposit, configurable allocations) andbonding-curve(instant bonding curve, no deposit window) - Agent support: Link a launch to a registered agent with
--agentMintand optionally--agentSetToken - metaplex.com compatible: Launches created or registered through the API appear on metaplex.com with a public launch page
- Total supply: Currently fixed at 1,000,000,000 tokens
Jump to: Launch Create · Bonding Curve · Launchpool Examples · Agent Launches · Launch Register · Locked Allocations · Common Errors · FAQ
Launch Create
The mplx genesis launch create command creates a new token launch via the Genesis API. It handles the entire flow:
- Calls the Genesis API to build the on-chain transactions
- Signs and sends them to the network
- Registers the launch on the Metaplex platform
Two launch types are available:
bonding-curve: Instant bonding curve (constant product AMM). Trading starts immediately — no deposit window. Auto-graduates to Raydium CPMM when all tokens are sold. Only requires--name,--symbol, and--image.launchpool(default): 48-hour deposit window, proportional token distribution, configurable allocations. Requires--tokenAllocation,--depositStartTime,--raiseGoal,--raydiumLiquidityBps, and--fundsRecipient.
Bonding Curve Example
mplx genesis launch create --launchType bonding-curve \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123"
Launchpool Example
mplx genesis launch create \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--tokenAllocation 500000000 \
--depositStartTime 2025-03-01T00:00:00Z \
--raiseGoal 250 \
--raydiumLiquidityBps 5000 \
--fundsRecipient <WALLET_ADDRESS>
All Flags
| Flag | Description | Required | Default |
|---|---|---|---|
--launchType <string> | launchpool or bonding-curve | No | launchpool |
--name <string> | Token name (1–32 characters) | Yes | — |
--symbol <string> | Token symbol (1–10 characters) | Yes | — |
--image <string> | Token image URL (must start with https://gateway.irys.xyz/) | Yes | — |
--tokenAllocation <integer> | Launch pool token allocation (portion of 1B total supply) | Launchpool only | — |
--depositStartTime <string> | Deposit start time (ISO date string or unix timestamp) | Launchpool only | — |
--raiseGoal <integer> | Raise goal in whole units (e.g. 250 = 250 SOL) | Launchpool only | — |
--raydiumLiquidityBps <integer> | Raydium liquidity in basis points (2000–10000, i.e. 20%–100%) | Launchpool only | — |
--fundsRecipient <string> | Wallet receiving unlocked portion of raised funds | Launchpool only | — |
--creatorFeeWallet <string> | Wallet to receive creator fees (always enabled, fees accrue and are claimed after graduation) | No (bonding-curve only) | Launching wallet |
--firstBuyAmount <number> | SOL amount for fee-free initial purchase at launch | No (bonding-curve only) | — |
--agentMint <string> | Agent's Core asset address — auto-derives creator fee wallet from agent PDA | No | — |
--agentSetToken | Permanently link the launched token to the agent (irreversible). Requires --agentMint | No | false |
--description <string> | Token description (max 250 characters) | No | — |
--website <string> | Project website URL | No | — |
--twitter <string> | Project Twitter URL | No | — |
--telegram <string> | Project Telegram URL | No | — |
--lockedAllocations <path> | Path to JSON file with locked allocation configs (launchpool only) | No | — |
--creatorWallet <string> | Override the launch owner wallet for registration (public key) | No | Launching wallet |
--twitterVerificationToken <string> | Twitter verification token for verified badge on the launch page | No | — |
--quoteMint <string> | Quote mint (SOL or USDC) | No | SOL |
--network <string> | Network override: solana-mainnet or solana-devnet | No | Auto-detected |
--apiUrl <string> | Genesis API base URL | No | https://api.metaplex.com |
Launchpool Examples
- Basic launch with SOL:
mplx genesis launch create \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--tokenAllocation 500000000 \
--depositStartTime 2025-03-01T00:00:00Z \
--raiseGoal 250 \
--raydiumLiquidityBps 5000 \
--fundsRecipient <WALLET_ADDRESS>
- With USDC as quote mint:
mplx genesis launch create \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--tokenAllocation 500000000 \
--depositStartTime 1709251200 \
--raiseGoal 5000 \
--raydiumLiquidityBps 5000 \
--fundsRecipient <WALLET_ADDRESS> \
--quoteMint USDC
- With metadata and locked allocations:
mplx genesis launch create \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--description "A community token for builders" \
--website "https://example.com" \
--twitter "https://x.com/myproject" \
--telegram "https://t.me/myproject" \
--tokenAllocation 500000000 \
--depositStartTime 2025-03-01T00:00:00Z \
--raiseGoal 250 \
--raydiumLiquidityBps 5000 \
--fundsRecipient <WALLET_ADDRESS> \
--lockedAllocations allocations.json
Bonding Curve
A bonding curve launch creates a constant product AMM where trading starts immediately. Price rises as SOL flows into the curve. When all tokens are sold, the curve auto-graduates to a Raydium CPMM pool.
mplx genesis launch create --launchType bonding-curve \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123"
Only --name, --symbol, and --image are required — all protocol parameters use defaults.
Creator fees are always enabled on bonding curve launches — they default to the launching wallet. Fees accrue in the bucket during trading and must be claimed separately after the curve graduates to Raydium.
With Creator Fee
Direct a portion of swap fees to a specific wallet:
mplx genesis launch create --launchType bonding-curve \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--creatorFeeWallet <FEE_WALLET_ADDRESS>
With First Buy
Reserve a fee-free initial purchase for the launching wallet:
mplx genesis launch create --launchType bonding-curve \
--name "My Token" \
--symbol "MTK" \
--image "https://gateway.irys.xyz/abc123" \
--firstBuyAmount 0.1
The first buy amount is in SOL (e.g. 0.1 = 0.1 SOL). No protocol or creator fee is charged on the first buy.
Agent Launches
Link a token launch to a registered agent by passing --agentMint. This works with both launchpool and bonding curve launch types.
When --agentMint is provided:
- The creator fee wallet is auto-derived from the agent's Core asset signer PDA
- For bonding curves, the first buy buyer defaults to the agent PDA (if
--firstBuyAmountis set)
mplx genesis launch create --launchType bonding-curve \
--name "Agent Token" \
--symbol "AGT" \
--image "https://gateway.irys.xyz/abc123" \
--agentMint <AGENT_CORE_ASSET_ADDRESS> \
--agentSetToken
agentSetToken is irreversible
--agentSetToken permanently links the launched token to the agent. This cannot be undone. Omit it to launch without linking, then link later with mplx agents set-agent-token.
End-to-End: Register Agent + Launch Token
# 1. Register a new agent
mplx agents register --name "My Agent" \
--description "An autonomous trading agent" \
--image "./avatar.png"
# Note the asset address from the output (e.g. 7BQj...)
# 2. Launch a bonding curve token linked to the agent
mplx genesis launch create --launchType bonding-curve \
--name "Agent Token" --symbol "AGT" \
--image "https://gateway.irys.xyz/abc123" \
--agentMint <ASSET_ADDRESS> --agentSetToken
# 3. (Optional) Verify the agent has a token linked
mplx agents fetch <ASSET_ADDRESS>
RPC propagation delay
If step 2 fails with "Agent is not owned by the connected wallet", the API backend hasn't indexed the new agent yet. The on-chain token creation may still have succeeded — check with mplx agents fetch <ASSET>. If the agent already shows a token set, only the platform registration failed; complete it with mplx genesis launch register. When scripting both steps, add a ~30 second delay between agent registration and the launch command.
Output
On success, the command prints:
- Genesis Account address
- Mint Address of the new token
- Launch ID and Launch Link on the Metaplex platform
- Token ID
- Transaction signatures with explorer links
Launch Register
The mplx genesis launch register command registers an existing genesis account with the Metaplex platform. Use this when you created a genesis account using the low-level CLI commands (genesis create, bucket add-launch-pool, etc.) and want a public launch page.
mplx genesis launch register <GENESIS_ACCOUNT> --launchConfig launch.json
Arguments
| Argument | Description | Required |
|---|---|---|
genesisAccount | Genesis account address to register | Yes |
Flags
| Flag | Description | Required | Default |
|---|---|---|---|
--launchConfig <path> | Path to JSON file with the launch configuration | Yes | — |
--creatorWallet <string> | Override the launch owner wallet for registration (public key) | No | Launching wallet |
--twitterVerificationToken <string> | Twitter verification token for verified badge on the launch page | No | — |
--network <string> | Network override: solana-mainnet or solana-devnet | No | Auto-detected |
--apiUrl <string> | Genesis API base URL | No | https://api.metaplex.com |
Launch Config Format
The launch config JSON file uses the same format as the launch create input.
Launchpool config:
{
"wallet": "<WALLET_ADDRESS>",
"token": {
"name": "My Token",
"symbol": "MTK",
"image": "https://gateway.irys.xyz/abc123",
"description": "Optional description",
"externalLinks": {
"website": "https://example.com",
"twitter": "https://x.com/myproject"
}
},
"launchType": "launchpool",
"launch": {
"launchpool": {
"tokenAllocation": 500000000,
"depositStartTime": "2025-03-01T00:00:00Z",
"raiseGoal": 250,
"raydiumLiquidityBps": 5000,
"fundsRecipient": "<WALLET_ADDRESS>"
}
},
"quoteMint": "SOL"
}
Bonding curve config:
{
"wallet": "<WALLET_ADDRESS>",
"token": {
"name": "My Token",
"symbol": "MTK",
"image": "https://gateway.irys.xyz/abc123"
},
"launchType": "bondingCurve",
"launch": {
"creatorFeeWallet": "<FEE_WALLET_ADDRESS>",
"firstBuyAmount": 0.1
},
"quoteMint": "SOL"
}
Bonding curve with agent config:
{
"wallet": "<WALLET_ADDRESS>",
"token": {
"name": "Agent Token",
"symbol": "AGT",
"image": "https://gateway.irys.xyz/abc123"
},
"launchType": "bondingCurve",
"agent": {
"mint": "<AGENT_CORE_ASSET_ADDRESS>",
"setToken": true
},
"launch": {},
"quoteMint": "SOL"
}
Examples
- Register with default network detection:
mplx genesis launch register <GENESIS_ACCOUNT> --launchConfig launch.json
- Register on devnet:
mplx genesis launch register <GENESIS_ACCOUNT> \
--launchConfig launch.json \
--network solana-devnet
Output
On success, the command prints:
- Launch ID and Launch Link on the Metaplex platform
- Token ID and Mint Address
If the account was already registered, the command reports that and shows the existing launch details.
Locked Allocations
Locked allocations let you reserve a portion of the token supply with vesting schedules. Provide them as a JSON array file via --lockedAllocations.
[
{
"name": "Team",
"recipient": "<WALLET_ADDRESS>",
"tokenAmount": 200000000,
"vestingStartTime": "2025-04-01T00:00:00Z",
"vestingDuration": { "value": 1, "unit": "YEAR" },
"unlockSchedule": "MONTH",
"cliff": {
"duration": { "value": 3, "unit": "MONTH" },
"unlockAmount": 50000000
}
}
]
Fields
| Field | Type | Description |
|---|---|---|
name | string | Name for this allocation |
recipient | string | Wallet address of the recipient |
tokenAmount | number | Number of tokens to allocate |
vestingStartTime | string | ISO date string for when vesting begins |
vestingDuration | object | Duration with value (number) and unit |
unlockSchedule | string | How often tokens unlock |
cliff | object | Optional cliff with duration and unlockAmount |
Valid Time Units
SECOND, MINUTE, HOUR, DAY, WEEK, TWO_WEEKS, MONTH, QUARTER, YEAR
Common Errors
| Error | Cause | Fix |
|---|---|---|
| API request failed | Network issue or invalid input | Check the error response details — the command shows the API response body on validation errors |
| Agent is not owned by the connected wallet | API backend hasn't indexed a freshly registered agent | Wait ~30 seconds and retry, or check mplx agents fetch — the on-chain launch may have succeeded even if registration failed |
| Agent already has a different agent token set | --agentSetToken was used on a prior launch for this agent | Agent token linking is irreversible and one-time only. Launch without --agentSetToken or use a different agent |
| Locked allocations file not found | Wrong file path | Verify the path to your allocations JSON file |
| Must contain a JSON array | Allocations file is not an array | Ensure the JSON file contains an array [...], not an object |
| raydiumLiquidityBps out of range | Value outside 2000–10000 | Use a value between 2000 (20%) and 10000 (100%) |
| Launch config missing required fields | Incomplete config for register | Ensure your launch config JSON has token, launch, and a valid launchType |
FAQ
What is the difference between genesis launch create and the manual flow? The genesis launch create command is an all-in-one flow that calls the Genesis API to build transactions, signs and sends them, and registers the launch on the Metaplex platform — all in a single command. The manual flow requires separate create, bucket add-launch-pool, finalize, and register steps.
What is the difference between launchpool and bonding-curve? Launchpool has a 48-hour deposit window where users deposit SOL and receive tokens proportionally. Bonding curve starts trading immediately with a constant product AMM — price rises as SOL flows in, and the curve auto-graduates to Raydium CPMM when all tokens are sold.
Can I link an agent to a token launch? Yes. Pass --agentMint with the agent's Core asset address. This auto-derives the creator fee wallet from the agent's PDA. Add --agentSetToken to permanently link the token to the agent (irreversible). Works with both launchpool and bonding curve.
When should I use genesis launch register? Use genesis launch register when you've already created a genesis account using the low-level CLI commands (genesis create, bucket add-launch-pool, etc.) and want to register it on the Metaplex platform to get a public launch page.
What network does the launch command use? The network is auto-detected from your configured RPC endpoint. You can override it with the --network flag (solana-mainnet or solana-devnet).
Can I use a custom quote mint? The API currently supports SOL (default) and USDC. Pass --quoteMint USDC to use USDC.
What is the total token supply? The total supply is currently fixed at 1,000,000,000 tokens when using the API flow.
