Integration APIs
POSTCreate Launch
Last updated March 4, 2026
Build the on-chain transactions for a new Genesis token launch. Returns unsigned transactions that must be signed and sent before calling Register Launch.
Use the SDK instead
Most integrators should use createAndRegisterLaunch from the SDK, which handles creating transactions, signing, sending, and registering the launch in a single call. This endpoint is only needed if you require direct HTTP access without the SDK.
We recommend using the Create API to build launches programmatically, as metaplex.com does not yet support the full feature set of the Genesis program. Mainnet launches created through the API will appear on metaplex.com once registered.
Endpoint
POST /v1/launches/create
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
wallet | string | Yes | Creator's wallet public key |
launch | object | Yes | Full launch configuration (see below) |
Launch Configuration
The launch object describes the full token and launch setup:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Token name, 1–32 characters |
symbol | string | Yes | Token symbol, 1–10 characters |
image | string | Yes | Token image URL (Irys gateway) |
description | string | No | Token description, max 250 characters |
decimals | number | No | Token decimals (defaults to 6) |
supply | number | No | Total token supply (defaults to 1,000,000,000) |
network | string | No | 'solana-mainnet' (default) or 'solana-devnet' |
quoteMint | string | No | Quote token mint address (defaults to wrapped SOL) |
type | string | Yes | 'project' or 'memecoin' |
finalize | boolean | No | Whether to finalize the launch (defaults to true) |
allocations | array | Conditional | Array of allocation configurations (required for project, ignored for memecoin) |
externalLinks | object | No | Website, Twitter, Telegram links |
publicKey | string | Yes | Creator's wallet public key (must match the top-level wallet field) |
Allocation Types
Each allocation in the allocations array has a type field:
launchpoolV2— Proportional distribution poolraydiumV2— Raydium LP allocationunlockedV2— Unlocked tokens to a recipientlockedV2— Locked tokens via StreamflowpresaleV2— Fixed-price presale
The SDK's buildCreateLaunchPayload function handles converting the simplified CreateLaunchInput into this full payload format. See the API Client docs.
Memecoin Type
When type is 'memecoin', the API uses hardcoded allocations and parameters. You do not need to provide an allocations array — the API builds it automatically with fixed splits (50% launchpool, 49% Raydium LP at 98%, 1% creator unlocked). The deposit window is 1 hour, LP is permanently locked, and the minimum raise is 50 SOL or 5,000 USDC.
Example Request — Project Type
curl -X POST https://api.metaplex.com/v1/launches/create \
-H "Content-Type: application/json" \
-d '{
"wallet": "YourWalletPublicKey...",
"launch": {
"name": "My Token",
"symbol": "MTK",
"image": "https://gateway.irys.xyz/...",
"decimals": 6,
"supply": 1000000000,
"network": "solana-devnet",
"quoteMint": "So11111111111111111111111111111111111111112",
"type": "project",
"finalize": true,
"publicKey": "YourWalletPublicKey...",
"allocations": [...]
}
}'
Example Request — Memecoin Type
curl -X POST https://api.metaplex.com/v1/launches/create \
-H "Content-Type: application/json" \
-d '{
"wallet": "YourWalletPublicKey...",
"launch": {
"name": "My Memecoin",
"symbol": "MEME",
"image": "https://gateway.irys.xyz/...",
"decimals": 6,
"supply": 1000000000,
"network": "solana-devnet",
"quoteMint": "So11111111111111111111111111111111111111112",
"type": "memecoin",
"finalize": true,
"publicKey": "YourWalletPublicKey..."
}
}'
Success Response
{
"success": true,
"transactions": [
"base64-encoded-transaction-1...",
"base64-encoded-transaction-2..."
],
"blockhash": {
"blockhash": "...",
"lastValidBlockHeight": 123456789
},
"mintAddress": "MintPublicKey...",
"genesisAccount": "GenesisAccountPDA..."
}
| Field | Type | Description |
|---|---|---|
success | boolean | true on success |
transactions | string[] | Base64-encoded serialized transactions |
blockhash | object | Blockhash for transaction confirmation |
mintAddress | string | The token mint public key |
genesisAccount | string | The genesis account PDA public key |
Error Response
{
"success": false,
"error": "Validation failed",
"details": [...]
}
| Field | Type | Description |
|---|---|---|
success | boolean | false on error |
error | string | Error message |
details | array? | Validation error details (when applicable) |
Error Codes
| Code | Description |
|---|---|
400 | Invalid input or validation failure |
500 | Internal server error |
Recommended: Use the SDK
Instead of calling this endpoint directly, use createAndRegisterLaunch which handles the entire flow — creating transactions, signing, sending, and registering — in one call:
1import {
2 createAndRegisterLaunch,
3 CreateLaunchInput,
4 genesis,
5} from '@metaplex-foundation/genesis'
6import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
7import { keypairIdentity } from '@metaplex-foundation/umi'
8
9const umi = createUmi('https://api.mainnet-beta.solana.com')
10 .use(genesis())
11
12// Use keypairIdentity to set a wallet when running server-side:
13// umi.use(keypairIdentity(myKeypair))
14
15const input: CreateLaunchInput = {
16 wallet: umi.identity.publicKey,
17 token: {
18 name: 'My Token',
19 symbol: 'MTK',
20 image: 'https://gateway.irys.xyz/...',
21 },
22 launchType: 'project',
23 launch: {
24 launchpool: {
25 tokenAllocation: 500_000_000,
26 depositStartTime: new Date(Date.now() + 48 * 60 * 60 * 1000),
27 raiseGoal: 250,
28 raydiumLiquidityBps: 5000,
29 fundsRecipient: umi.identity.publicKey,
30 },
31 },
32}
33
34const result = await createAndRegisterLaunch(umi, {}, input)
35console.log(`Launch live at: ${result.launch.link}`)
See API Client for the full SDK documentation including all three integration modes.
