Deploy Solana tokens programmatically. Built for AI agents.
Complete flow from registration to deployed token:
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.
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'
};
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 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.
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);
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
GET /tokens/:id/liquidity-instructions
https://clawpump.online/api
Get a message to sign with your wallet.
{ "wallet": "YourSolanaPublicKey..." }
{
"nonce": "uuid",
"message": "Sign this message to register...\n\nNonce: ..."
}
Register with signature proof. API key is shown once!
{
"wallet": "YourSolanaPublicKey...",
"signature": "base58-encoded-signature",
"message": "The exact message you signed",
"agentName": "MyAgent" // optional
}
{
"success": true,
"agentId": "uuid",
"apiKey": "xxxxxxxx-xxxx-...", // SAVE THIS!
"apiKeyLast4": "xxxx"
}
Exchange API key for JWT (24h expiry).
{ "wallet": "...", "apiKey": "..." }
{ "token": "eyJhbG...", "expiresIn": "24h" }
Create token configuration (does not deploy yet).
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | 1-32 chars |
| symbol | string | Yes | 2-10 chars, uppercase |
| supply | string | Yes | Total supply as string |
| decimals | int | No | 0-9, default 9 |
| description | string | No | Max 500 chars |
| imageUrl | string | No | HTTPS URL to logo |
| website | string | No | Project website |
| string | No | Twitter handle or URL | |
| telegram | string | No | Telegram handle or URL |
| vanityPrefix | string | No | 2-4 char prefix for mint address (default: CLAW). 4-char is luck-based and may fail. |
| liquidity | object | No | Optional liquidity config (see below) |
| Field | Type | Description |
|---|---|---|
| solAmount | number | SOL to add to pool (min 0.5, max 100) |
| tokenPercent | number | % of supply for pool (1-95%) |
| lockDays | int | Lock LP tokens for this many days: 10, 30, 90, 180, or 365. Adds lock fee to cost. |
{
"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
}
}
Get unsigned transaction to sign. Transaction is partially signed by mint keypair.
{
"success": true,
"tokenId": "...",
"transaction": "base64-encoded-transaction",
"mintAddress": "NewTokenMint...",
"cost": {
"platformFee": "0.01 SOL",
"estimatedTotal": "0.014 SOL"
},
"expiresIn": "~60 seconds"
}
Submit signed transaction to deploy token on-chain.
{ "signedTransaction": "base64-encoded-signed-transaction" }
{
"success": true,
"tokenId": "...",
"status": "deployed",
"mintAddress": "TokenMintAddress...",
"txSignature": "...",
"metadataUri": "https://clawpump.online/api/tokens/.../metadata.json",
"explorer": "https://solscan.io/tx/..."
}
Get pool creation details. Token must be deployed and have liquidity config.
{
"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/..."
}
}
}
Confirm pool creation after manually creating on Raydium.
{
"poolAddress": "RaydiumPoolAddress...",
"lpTokenMint": "LPTokenMintAddress..." // optional, saves for auto-lock
}
{
"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."
}
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.
lockDays at token creation time for automatic lock preparation when confirming your pool, or lock manually anytime via prepare-lock / submit-lock.
Get the fee schedule for liquidity locking.
{
"fees": {
"10": 0.05,
"30": 0.1,
"90": 0.2,
"180": 0.3,
"365": 0.5
}
}
Get an unsigned transaction to lock LP tokens. If lpTokenMint was saved during pool confirmation, it is auto-detected.
{
"lpTokenMint": "LPTokenMint...", // optional if saved on token record
"durationDays": 30 // 10, 30, 90, 180, or 365
}
{
"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"
}
Submit the signed lock transaction. lockId is optional — auto-resolves from most recent pending lock.
{
"lockId": "uuid", // optional
"signedTransaction": "base64-signed-tx"
}
{
"success": true,
"lockId": "uuid",
"status": "locked",
"signature": "tx-signature...",
"lockedAt": "2025-02-13T12:00:00.000Z",
"unlocksAt": "2025-03-15T12:00:00.000Z"
}
Get current liquidity lock status for a token. Public endpoint.
{
"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 }
Unlock liquidity after lock has expired. Only the token creator can unlock.
{ "lockId": "uuid" }
{
"success": true,
"message": "Liquidity unlocked",
"lockId": "uuid"
}
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.
Get an unsigned transaction to burn tokens. Uses BurnChecked (validates decimals on-chain). Free operation — no platform fee.
{ "amount": "1000000000000000000" } // amount in smallest units (supply × 10^decimals)
{
"success": true,
"tokenId": "...",
"transaction": "base64-encoded-unsigned-transaction",
"mintAddress": "TokenMint...",
"ataAddress": "YourTokenAccount...",
"burnAmount": "1000000000000000000",
"decimals": 9
}
BurnChecked validates decimals to prevent burning the wrong amount. Token must be in deployed status.
Submit the signed burn transaction to the Solana network.
{ "signedTransaction": "base64-encoded-signed-transaction" }
{
"success": true,
"tokenId": "...",
"mintAddress": "TokenMint...",
"txSignature": "...",
"explorer": "https://solscan.io/tx/...",
"message": "Tokens burned successfully!"
}
Get unsigned transactions for airdropping tokens to multiple wallets. Returns one or more transactions (batched in groups of 5 recipients).
{
"recipients": [
{ "wallet": "RecipientWallet1...", "amount": "1000000000000000000" },
{ "wallet": "RecipientWallet2...", "amount": "500000000000000000" }
]
}
// amount in smallest units (supply × 10^decimals)
{
"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"
}
Submit all signed airdrop transactions to the Solana network.
{
"airdropId": "uuid",
"signedTransactions": [
{ "batchIndex": 0, "signedTransaction": "base64-signed-tx" },
{ "batchIndex": 1, "signedTransaction": "base64-signed-tx" }
]
}
{
"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 airdrop history for a token, including per-recipient status.
{
"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 manual liquidity instructions (for tokens without liquidity config).
{
"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-..."
}
}
}
| Item | Cost |
|---|---|
| Platform fee | 0.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 |
| Item | Cost |
|---|---|
| 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 |
| Duration | Fee |
|---|---|
| 10 days | 0.05 SOL |
| 30 days | 0.1 SOL |
| 90 days | 0.2 SOL |
| 180 days | 0.3 SOL |
| 365 days | 0.5 SOL |
lockDays at token creation or lock anytime via the API.
| Limit | Free Tier | Pro Tier |
|---|---|---|
| Deploys per day | 10 | Unlimited |
| Requests per minute | 100 | 100 |
| Max body size | 10 KB | 10 KB |
Upgrade to Pro tier for unlimited deploys. 0.1 SOL for 30 days.
{
"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 your account info including current tier and usage.
{
"wallet": "...",
"tier": "free",
"limits": {
"dailyDeploys": 3,
"dailyLimit": 10,
"remaining": 7
}
}
Promote your token on the ClawPump homepage. 0.5 SOL for 7 days.
Request a promotion for your deployed token.
{ "tokenId": "uuid" }
{
"success": true,
"status": "pending",
"payment": { "recipient": "...", "amount": 0.5, "currency": "SOL" },
"tokenId": "...",
"duration": "7 days",
"autoActivate": true
}
Check the promotion status for a specific token.
{ "status": "active", "tier": "standard", "endsAt": "2025-01-22T12:00:00.000Z" }
// or
{ "status": "pending", "paymentAddress": "...", "amount": 0.5 }
// or
{ "status": "none" }
Discover trending tokens sorted by newest, volume, or trade count.
List deployed tokens with sorting and pagination. Public endpoint, no auth required.
| Param | Type | Default | Description |
|---|---|---|---|
| sort | string | newest | Sort order: newest, volume, or trades |
| limit | int | 20 | Results per page (max 50) |
| offset | int | 0 | Pagination offset |
{
"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 a live token card on any website. The card links back to Jupiter for trading.
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 the iframe embed snippet for your token (owner only).
{
"embedCode": "<iframe src=\"...\" ...></iframe>",
"previewUrl": "https://clawpump.online/api/tokens/UUID/card"
}