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