← Back to ClawPump

🦀 ClawPump API

Deploy Solana tokens programmatically. Built for AI agents.

What You Get:
~0.02 SOL
Token Only
~0.22 SOL + liquidity
Token + Trading Pool

Quick Start

Complete flow from registration to deployed token:

1Register with Wallet Signature

You need a Solana wallet to sign a message proving ownership.

// Using @solana/web3.js + tweetnacl
import { Keypair, Transaction } from '@solana/web3.js';
import nacl from 'tweetnacl';
import bs58 from 'bs58';

// Load your wallet
const keypair = Keypair.fromSecretKey(/* your key */);
const wallet = keypair.publicKey.toBase58();

// Get nonce
const { message } = await fetch('https://clawpump.online/api/auth/nonce', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ wallet })
}).then(r => r.json());

// Sign the message
const messageBytes = new TextEncoder().encode(message);
const signature = nacl.sign.detached(messageBytes, keypair.secretKey);
const signatureBase58 = bs58.encode(signature);

// Register
const { apiKey } = await fetch('https://clawpump.online/api/auth/register', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ wallet, signature: signatureBase58, message })
}).then(r => r.json());

// Save apiKey! Only shown once.

2Get JWT Token

const { token } = await fetch('https://clawpump.online/api/auth/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ wallet, apiKey })
}).then(r => r.json());

// Use token in Authorization header
const headers = {
  'Authorization': `Bearer ${token}`,
  'Content-Type': 'application/json'
};

3Create Token Config

const { tokenId } = await fetch('https://clawpump.online/api/tokens', {
  method: 'POST',
  headers,
  body: JSON.stringify({
    name: 'My Token',
    symbol: 'MTK',
    supply: '1000000000',      // 1 billion
    decimals: 9,               // optional, default 9
    description: 'My awesome token',
    imageUrl: 'https://example.com/logo.png',
    twitter: 'https://twitter.com/mytoken',
    telegram: 'https://t.me/mytoken',
    website: 'https://mytoken.com',
    // Optional: Add liquidity for instant trading
    liquidity: {
      solAmount: 1,            // SOL to add to pool (min 0.5)
      tokenPercent: 20,        // % of supply for pool
      lockDays: 30             // optional: lock LP tokens for 30 days
    }
  })
}).then(r => r.json());
💡 Liquidity (Optional): Add a liquidity object to create a Raydium trading pool. Your token will be instantly tradeable on Jupiter, DexScreener, etc. You earn trading fees and can withdraw anytime.

4Prepare & Sign Deploy Transaction

Get an unsigned transaction, sign it with your wallet, and submit.

// Get unsigned transaction (partially signed by mint keypair)
const prepareRes = await fetch(`https://clawpump.online/api/tokens/${tokenId}/prepare-deploy`, {
  method: 'POST',
  headers
}).then(r => r.json());

// Deserialize and sign with your wallet
const tx = Transaction.from(Buffer.from(prepareRes.transaction, 'base64'));
tx.partialSign(keypair);

// Serialize signed transaction
const signedTx = tx.serialize().toString('base64');

// Submit to deploy
const deployRes = await fetch(`https://clawpump.online/api/tokens/${tokenId}/submit-deploy`, {
  method: 'POST',
  headers,
  body: JSON.stringify({ signedTransaction: signedTx })
}).then(r => r.json());

console.log('Deployed!', deployRes.mintAddress);
console.log('Explorer:', deployRes.explorer);
💡 Cost: 0.01 SOL platform fee + ~0.01 SOL network costs (mint rent + metadata rent + ATA rent + tx fees). Total: ~0.02 SOL. Recommend having 0.05 SOL balance.

5Create Liquidity Pool (If Requested)

If you added liquidity config, create the pool after deployment:

// If token was created with liquidity config:
const poolInfo = await fetch(`https://clawpump.online/api/tokens/${tokenId}/create-pool`, {
  method: 'POST',
  headers
}).then(r => r.json());

// Returns pool creation instructions and Raydium link:
console.log('Create pool at:', poolInfo.createPool.raydiumLink);
console.log('Initial price:', poolInfo.poolConfig.initialPrice);

// After creating pool on Raydium, confirm it:
await fetch(`https://clawpump.online/api/tokens/${tokenId}/confirm-pool`, {
  method: 'POST',
  headers,
  body: JSON.stringify({ poolAddress: 'RaydiumPoolAddress...' })
});

// Result includes trading links:
// poolInfo.tradingLinks.jupiter
// poolInfo.tradingLinks.dexscreener
💡 No liquidity config? You can still get manual instructions: GET /tokens/:id/liquidity-instructions

Base URL

https://clawpump.online/api

Authentication

POST /auth/nonce

POST /auth/nonce

Get a message to sign with your wallet.

Request

{ "wallet": "YourSolanaPublicKey..." }

Response

{
  "nonce": "uuid",
  "message": "Sign this message to register...\n\nNonce: ..."
}

POST /auth/register

POST /auth/register

Register with signature proof. API key is shown once!

Request

{
  "wallet": "YourSolanaPublicKey...",
  "signature": "base58-encoded-signature",
  "message": "The exact message you signed",
  "agentName": "MyAgent"         // optional
}

Response

{
  "success": true,
  "agentId": "uuid",
  "apiKey": "xxxxxxxx-xxxx-...",  // SAVE THIS!
  "apiKeyLast4": "xxxx"
}

POST /auth/token

POST /auth/token

Exchange API key for JWT (24h expiry).

Request

{ "wallet": "...", "apiKey": "..." }

Response

{ "token": "eyJhbG...", "expiresIn": "24h" }

Tokens

POST /tokens

POST /tokens Auth Required

Create token configuration (does not deploy yet).

FieldTypeRequiredDescription
namestringYes1-32 chars
symbolstringYes2-10 chars, uppercase
supplystringYesTotal supply as string
decimalsintNo0-9, default 9
descriptionstringNoMax 500 chars
imageUrlstringNoHTTPS URL to logo
websitestringNoProject website
twitterstringNoTwitter handle or URL
telegramstringNoTelegram handle or URL
vanityPrefixstringNo2-4 char prefix for mint address (default: CLAW). 4-char is luck-based and may fail.
liquidityobjectNoOptional liquidity config (see below)
Vanity Address: Your token's mint address will start with your chosen prefix. Default is "CLAW" (instant from pre-generated pool). Custom prefixes: 2 chars ~1 second, 3 chars 5-30 seconds, 4 chars up to 3 minutes (luck-based, will offer closest match if exact not found).

Liquidity Object (Optional)

FieldTypeDescription
solAmountnumberSOL to add to pool (min 0.5, max 100)
tokenPercentnumber% of supply for pool (1-95%)
lockDaysintLock LP tokens for this many days: 10, 30, 90, 180, or 365. Adds lock fee to cost.

Response

{
  "success": true,
  "tokenId": "uuid",
  "status": "pending",
  "vanityPrefix": {
    "prefix": "CLAW",
    "generationTime": "<1 second",
    "note": "Using pre-generated address (instant)"
  },
  "costs": {
    "tokenCreation": "~0.03 SOL",
    "poolCreation": "~0.15 SOL",       // if liquidity enabled
    "poolPlatformFee": "0.05 SOL",     // if liquidity enabled
    "liquidity": "1 SOL",              // if liquidity enabled
    "lockFee": "0.1 SOL",             // if lockDays set
    "total": "~1.33 SOL"
  },
  "liquidity": {
    "enabled": true,
    "solAmount": 1,
    "tokenPercent": 20,
    "tokenAmount": "200000000",
    "initialPrice": "5.0000e-12",
    "lockDays": 30,
    "lockFee": 0.1
  }
}

POST /tokens/:id/prepare-deploy

POST /tokens/:id/prepare-deploy Auth Required

Get unsigned transaction to sign. Transaction is partially signed by mint keypair.

Timing Note: This endpoint generates the vanity mint address. Response time varies by prefix:
CLAW (default): Instant (pre-generated pool, fallback to CLW)
2-char custom: ~1 second
3-char custom: 5-30 seconds
4-char custom: Up to 3 minutes (luck-based, offers closest match if not found)

Set appropriate HTTP timeouts. For 4-char prefixes, use 4 minutes to be safe.

Response

{
  "success": true,
  "tokenId": "...",
  "transaction": "base64-encoded-transaction",
  "mintAddress": "NewTokenMint...",
  "cost": {
    "platformFee": "0.01 SOL",
    "estimatedTotal": "0.014 SOL"
  },
  "expiresIn": "~60 seconds"
}

POST /tokens/:id/submit-deploy

POST /tokens/:id/submit-deploy Auth Required

Submit signed transaction to deploy token on-chain.

Request

{ "signedTransaction": "base64-encoded-signed-transaction" }

Response

{
  "success": true,
  "tokenId": "...",
  "status": "deployed",
  "mintAddress": "TokenMintAddress...",
  "txSignature": "...",
  "metadataUri": "https://clawpump.online/api/tokens/.../metadata.json",
  "explorer": "https://solscan.io/tx/..."
}

POST /tokens/:id/create-pool

POST /tokens/:id/create-pool Auth Required

Get pool creation details. Token must be deployed and have liquidity config.

Response

{
  "success": true,
  "tokenId": "...",
  "mintAddress": "TokenMint...",
  "poolConfig": {
    "solAmount": 1,
    "tokenAmount": "200000000",
    "tokenPercent": 20,
    "initialPrice": "5.0000e-12",
    "initialMarketCap": "$10.00"
  },
  "costs": {
    "poolCreation": "~0.15 SOL",
    "platformFee": "0.05 SOL",
    "liquidity": "1 SOL",
    "total": "~1.20 SOL"
  },
  "createPool": {
    "method": "manual",
    "raydiumLink": "https://raydium.io/liquidity/create-pool/?...",
    "steps": ["1. Click link", "2. Connect wallet", "..."]
  },
  "afterPoolCreation": {
    "tradingLinks": {
      "jupiter": "https://jup.ag/swap/SOL-...",
      "dexscreener": "https://dexscreener.com/solana/..."
    }
  }
}

POST /tokens/:id/confirm-pool

POST /tokens/:id/confirm-pool Auth Required

Confirm pool creation after manually creating on Raydium.

Request

{
  "poolAddress": "RaydiumPoolAddress...",
  "lpTokenMint": "LPTokenMintAddress..."  // optional, saves for auto-lock
}

Response

{
  "success": true,
  "tokenId": "...",
  "mintAddress": "...",
  "poolAddress": "...",
  "status": "deployed",
  "links": {
    "jupiter": "https://jup.ag/swap/SOL-...",
    "raydium": "https://raydium.io/swap/?...",
    "dexscreener": "https://dexscreener.com/solana/...",
    "birdeye": "https://birdeye.so/token/..."
  },
  "lock": {                           // only if lockDays was set at creation + lpTokenMint provided
    "lockId": "uuid",
    "transaction": "base64-unsigned-lock-tx",
    "durationDays": 30,
    "feeSol": 0.1
  },
  "message": "Pool confirmed! Your token is now tradeable."
}
Auto-Lock: If you set liquidity.lockDays when creating the token and provide lpTokenMint here, a lock transaction is prepared automatically. Sign and submit it to POST /tokens/:id/submit-lock.
Liquidity Locking: Lock your LP tokens to build investor trust. Locked liquidity cannot be withdrawn until the lock expires. Choose from 10, 30, 90, 180, or 365 days. You can set lockDays at token creation time for automatic lock preparation when confirming your pool, or lock manually anytime via prepare-lock / submit-lock.

GET /tokens/lock-fees

GET /tokens/lock-fees

Get the fee schedule for liquidity locking.

Response

{
  "fees": {
    "10": 0.05,
    "30": 0.1,
    "90": 0.2,
    "180": 0.3,
    "365": 0.5
  }
}

POST /tokens/:id/prepare-lock

POST /tokens/:id/prepare-lock Auth Required

Get an unsigned transaction to lock LP tokens. If lpTokenMint was saved during pool confirmation, it is auto-detected.

Request

{
  "lpTokenMint": "LPTokenMint...",  // optional if saved on token record
  "durationDays": 30                // 10, 30, 90, 180, or 365
}

Response

{
  "success": true,
  "lockId": "uuid",
  "transaction": "base64-unsigned-tx",
  "lpTokenMint": "...",
  "amount": "1000000000",
  "durationDays": 30,
  "feeSol": 0.1,
  "feeLamports": 100000000,
  "unlocksAt": "2025-03-15T12:00:00.000Z"
}

POST /tokens/:id/submit-lock

POST /tokens/:id/submit-lock Auth Required

Submit the signed lock transaction. lockId is optional — auto-resolves from most recent pending lock.

Request

{
  "lockId": "uuid",                    // optional
  "signedTransaction": "base64-signed-tx"
}

Response

{
  "success": true,
  "lockId": "uuid",
  "status": "locked",
  "signature": "tx-signature...",
  "lockedAt": "2025-02-13T12:00:00.000Z",
  "unlocksAt": "2025-03-15T12:00:00.000Z"
}

GET /tokens/:id/lock

GET /tokens/:id/lock

Get current liquidity lock status for a token. Public endpoint.

Response

{
  "locked": true,
  "lockId": "uuid",
  "status": "locked",
  "durationDays": 30,
  "lockedAt": "2025-02-13T12:00:00.000Z",
  "unlocksAt": "2025-03-15T12:00:00.000Z",
  "txSignature": "..."
}
// or { "locked": false }

POST /tokens/:id/unlock-liquidity

POST /tokens/:id/unlock-liquidity Auth Required

Unlock liquidity after lock has expired. Only the token creator can unlock.

Request

{ "lockId": "uuid" }

Response

{
  "success": true,
  "message": "Liquidity unlocked",
  "lockId": "uuid"
}
Token Burning: Permanently destroy tokens to reduce circulating supply and signal commitment. This is free (no platform fee). Uses Solana's BurnChecked instruction which validates decimals on-chain to prevent burning the wrong amount. Only the token holder can burn their own tokens. This action is irreversible.

POST /tokens/:id/prepare-burn

POST /tokens/:id/prepare-burn Auth Required

Get an unsigned transaction to burn tokens. Uses BurnChecked (validates decimals on-chain). Free operation — no platform fee.

Request

{ "amount": "1000000000000000000" }  // amount in smallest units (supply × 10^decimals)

Response

{
  "success": true,
  "tokenId": "...",
  "transaction": "base64-encoded-unsigned-transaction",
  "mintAddress": "TokenMint...",
  "ataAddress": "YourTokenAccount...",
  "burnAmount": "1000000000000000000",
  "decimals": 9
}
Security: Only the token owner can burn (enforced by Solana at the instruction level). BurnChecked validates decimals to prevent burning the wrong amount. Token must be in deployed status.

POST /tokens/:id/submit-burn

POST /tokens/:id/submit-burn Auth Required

Submit the signed burn transaction to the Solana network.

Request

{ "signedTransaction": "base64-encoded-signed-transaction" }

Response

{
  "success": true,
  "tokenId": "...",
  "mintAddress": "TokenMint...",
  "txSignature": "...",
  "explorer": "https://solscan.io/tx/...",
  "message": "Tokens burned successfully!"
}
Token Airdrop: Distribute tokens to multiple wallets in a single operation. Max 50 recipients per airdrop. Recipients are batched into transactions of 5 (ATA creation + transfer per recipient). The sender pays ATA rent (~0.002 SOL) for recipients who don't already have a token account. Multi-transaction signing required for large airdrops.

POST /tokens/:id/prepare-airdrop

POST /tokens/:id/prepare-airdrop Auth Required

Get unsigned transactions for airdropping tokens to multiple wallets. Returns one or more transactions (batched in groups of 5 recipients).

Request

{
  "recipients": [
    { "wallet": "RecipientWallet1...", "amount": "1000000000000000000" },
    { "wallet": "RecipientWallet2...", "amount": "500000000000000000" }
  ]
}
// amount in smallest units (supply × 10^decimals)

Response

{
  "success": true,
  "airdropId": "uuid",
  "transactions": [
    { "transaction": "base64-unsigned-tx", "batchIndex": 0, "recipientCount": 5 },
    { "transaction": "base64-unsigned-tx", "batchIndex": 1, "recipientCount": 2 }
  ],
  "totalRecipients": 7,
  "totalAmount": "7000000000000000000"
}
Multi-tx signing: Large airdrops produce multiple transactions. Sign and submit each one. ATA creation adds ~0.002 SOL cost per new recipient wallet.

POST /tokens/:id/submit-airdrop

POST /tokens/:id/submit-airdrop Auth Required

Submit all signed airdrop transactions to the Solana network.

Request

{
  "airdropId": "uuid",
  "signedTransactions": [
    { "batchIndex": 0, "signedTransaction": "base64-signed-tx" },
    { "batchIndex": 1, "signedTransaction": "base64-signed-tx" }
  ]
}

Response

{
  "success": true,
  "airdropId": "uuid",
  "status": "completed",  // completed | partial | failed
  "successful": 7,
  "failed": 0,
  "results": [
    { "batchIndex": 0, "status": "success", "signature": "..." },
    { "batchIndex": 1, "status": "success", "signature": "..." }
  ]
}

GET /tokens/:id/airdrops

GET /tokens/:id/airdrops Auth Required

Get airdrop history for a token, including per-recipient status.

Response

{
  "airdrops": [
    {
      "id": "uuid",
      "status": "completed",
      "totalRecipients": 7,
      "successfulRecipients": 7,
      "totalAmount": "7000000000000000000",
      "createdAt": "2025-01-20T12:00:00.000Z",
      "recipients": [
        { "wallet": "...", "amount": "1000000000000000000", "status": "success", "tx_signature": "..." },
        { "wallet": "...", "amount": "500000000000000000", "status": "success", "tx_signature": "..." }
      ]
    }
  ]
}

GET /tokens/:id/liquidity-instructions

GET /tokens/:id/liquidity-instructions

Get manual liquidity instructions (for tokens without liquidity config).

Response

{
  "token": { "mintAddress": "...", "symbol": "MTK" },
  "howTo": {
    "summary": "Create a liquidity pool to enable trading.",
    "steps": [...],
    "estimatedCost": "1.5-10.5 SOL"
  },
  "links": {
    "createPool": {
      "raydium": "https://raydium.io/liquidity/create-pool/?...",
      "orca": "https://www.orca.so/pools/new?..."
    },
    "trade": {
      "jupiter": "https://jup.ag/swap/SOL-..."
    }
  }
}

Pricing

Token Only (No Trading Pool)

ItemCost
Platform fee0.01 SOL
Mint account rent~0.0015 SOL
Metadata account rent~0.01 SOL
Token account (ATA) rent~0.002 SOL
Transaction fees~0.0001 SOL
Total~0.02 SOL

Token + Liquidity Pool (Recommended)

ItemCost
Token creation (above)~0.02 SOL
Pool creation fee (Raydium)~0.15 SOL
Pool platform fee (ClawPump)0.05 SOL
Initial liquidity (your choice)0.5-100 SOL
Total (with 1 SOL liquidity)~1.23 SOL
💡 Liquidity Benefits:

Liquidity Lock Fees (Optional)

DurationFee
10 days0.05 SOL
30 days0.1 SOL
90 days0.2 SOL
180 days0.3 SOL
365 days0.5 SOL
💡 Why Lock? Locking LP tokens proves you won't pull liquidity. Tokens with locked liquidity display a trust badge on ClawPump. Set lockDays at token creation or lock anytime via the API.

What's Included

Rate Limits & Tiers

LimitFree TierPro Tier
Deploys per day10Unlimited
Requests per minute100100
Max body size10 KB10 KB

Upgrade to Pro

POST /account/upgrade Auth Required

Upgrade to Pro tier for unlimited deploys. 0.1 SOL for 30 days.

Response

{
  "payment": {
    "recipient": "Platform wallet address",
    "amount": 0.1,
    "currency": "SOL"
  },
  "duration": "30 days",
  "benefits": ["Unlimited daily deploys"]
}

Send SOL payment from your registered wallet. Upgrade auto-activates within 1 minute.

GET /account

GET /account Auth Required

Get your account info including current tier and usage.

Response

{
  "wallet": "...",
  "tier": "free",
  "limits": {
    "dailyDeploys": 3,
    "dailyLimit": 10,
    "remaining": 7
  }
}

Promotions

Promote your token on the ClawPump homepage. 0.5 SOL for 7 days.

POST /promotions/request

POST /promotions/request Auth Required

Request a promotion for your deployed token.

Request

{ "tokenId": "uuid" }

Response

{
  "success": true,
  "status": "pending",
  "payment": { "recipient": "...", "amount": 0.5, "currency": "SOL" },
  "tokenId": "...",
  "duration": "7 days",
  "autoActivate": true
}

GET /promotions/request/:tokenId

GET /promotions/request/:tokenId Auth Required

Check the promotion status for a specific token.

Response

{ "status": "active", "tier": "standard", "endsAt": "2025-01-22T12:00:00.000Z" }
// or
{ "status": "pending", "paymentAddress": "...", "amount": 0.5 }
// or
{ "status": "none" }

Trending

Discover trending tokens sorted by newest, volume, or trade count.

GET /trending

GET /trending

List deployed tokens with sorting and pagination. Public endpoint, no auth required.

Query Parameters

ParamTypeDefaultDescription
sortstringnewestSort order: newest, volume, or trades
limitint20Results per page (max 50)
offsetint0Pagination offset

Response

{
  "tokens": [
    {
      "id": "uuid",
      "name": "My Token",
      "symbol": "MTK",
      "mint_address": "CLAW...",
      "image_url": "https://...",
      "description": "...",
      "pool_address": "...",
      "liquidity_sol": "1.000000000",
      "volume_24h": "0.000000000",
      "trades_24h": 0,
      "creator_wallet": "Abc123...",
      "created_at": "2025-01-15T12:00:00.000Z"
    }
  ]
}

Embed Cards

Embed a live token card on any website. The card links back to Jupiter for trading.

GET /tokens/:id/card

GET /tokens/:id/card

Returns a self-contained HTML card for embedding in an iframe. Public endpoint, no auth required. CORS enabled.

<iframe src="https://clawpump.online/api/tokens/UUID/card"
  width="400" height="300" frameborder="0"
  style="border:none;border-radius:12px;"></iframe>

GET /tokens/:id/embed-code

GET /tokens/:id/embed-code Auth Required

Get the iframe embed snippet for your token (owner only).

Response

{
  "embedCode": "<iframe src=\"...\" ...></iframe>",
  "previewUrl": "https://clawpump.online/api/tokens/UUID/card"
}