Skip to main content

POST /token/create

Create a token + liquidity pool in one call. Returns 202 and runs the actual on-chain work in the background; poll /token/creation-status/:botId for progress.

Handles mint, metadata upload, pool creation, optional sniper buys and volume-boost seeding in one orchestrated job. CPMM = Raydium CPMM, PUMPFUN = Pump.fun bonding curve.

Use case

User wants to launch a token with bundled initial buys across several sniper wallets — submit once, poll status until COMPLETED, then drive trading / MM endpoints off the returned botId.

Body

Common fields:

FieldTypeRequiredDescription
ePoolTypeCPMM | PUMPFUNyesPool type.
sTokenNamestringyes3–32 chars, alphanumeric + spaces.
sTokenSymbolstringyes3–6 alphanumeric chars.
sTokenImageBase64stringyesBase64 image, up to 2 MB, PNG/JPEG/GIF/WEBP.
sTokenDescriptionstringyes10–500 chars from [A-Za-z0-9 .,!?()'-:;"$].
sTwitterLinkstringnoFull URL.
sWebsiteLinkstringnoFull URL.
sTelegramLinkstringnoFull URL.
sCreatorWalletstringyesUser-owned, non-imported wallet.
aSnipersarraynoUp to 50 entries.
aSnipers[].sWalletAddressstringyesUser-owned wallet (imported OK). Cannot equal sCreatorWallet.
aSnipers[].nSnipeSolAmountnumberyesSOL spent by this sniper.
nTokenAllocationPercentagenumber (0–100)no% of each sniper's tokens moved to a volume-boost wallet. 0 or omitted ⇒ volume boost skipped.

CPMM-only:

FieldTypeRequiredDescription
nPoolSolAmountnumberyesInitial SOL liquidity.
nPoolSplAmountnumberyesInitial token liquidity.

For PUMPFUN, nPoolSolAmount / nPoolSplAmount are ignored — initial liquidity comes only from snipers on the bonding curve.

SOL balance precheck

Every wallet's balance is checked in one shot before we accept the job. Any shortage fails with 400:

{
"message": "insufficient SOL balance on one or more wallets",
"wallets": [
{ "type": "creator", "address": "…", "requiredSol": 1.8, "currentSol": 0.3 },
{ "type": "sniper#2", "address": "…", "requiredSol": 0.11, "currentSol": 0 }
]
}

Response 202

{
"botId": "66a9ff…",
"status": "PENDING",
"ePoolType": "PUMPFUN",
"sTokenAddress": null,
"sTokenName": null,
"sTokenSymbol": null,
"sPoolId": null,
"sPoolSignature": null,
"nPoolTokenAmount": null,
"nPoolSolAmount": null,
"iTokenBot": null,
"aSnipes": [],
"sErrorMessage": null,
"dCreatedAt": "2026-04-20T10:00:00.000Z",
"dUpdatedAt": "2026-04-20T10:00:00.000Z"
}

Use botId to poll /token/creation-status/:botId.

Errors

StatusMeaning
400Validation error, insufficient balance, or creator wallet is imported.

Example — PumpFun

curl -X POST "$BASE_URL/token/create" \
-H "Authorization: Bearer $ACCESS" \
-H "x-user-id: $USER_ID" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"ePoolType": "PUMPFUN",
"sTokenName": "MyToken",
"sTokenSymbol": "MTK",
"sTokenImageBase64": "<base64>",
"sTokenDescription": "Short description.",
"sCreatorWallet": "<creator>",
"aSnipers": [
{ "sWalletAddress": "<wallet1>", "nSnipeSolAmount": 0.1 }
],
"nTokenAllocationPercentage": 10
}
JSON

Example — CPMM

curl -X POST "$BASE_URL/token/create" \
-H "Authorization: Bearer $ACCESS" \
-H "x-user-id: $USER_ID" \
-H "Content-Type: application/json" \
-d @- <<'JSON'
{
"ePoolType": "CPMM",
"sTokenName": "MyToken",
"sTokenSymbol": "MTK",
"sTokenImageBase64": "<base64>",
"sTokenDescription": "Short description.",
"sCreatorWallet": "<creator>",
"nPoolSolAmount": 1.5,
"nPoolSplAmount": 1000000,
"aSnipers": [
{ "sWalletAddress": "<wallet1>", "nSnipeSolAmount": 0.1 }
],
"nTokenAllocationPercentage": 10
}
JSON