Build on Solana and EVM chains with one API.
Programmatic access to every Solauncher feature. Token creation and metadata cloning, liquidity management across Raydium, Meteora and PumpSwap, Pump.fun bundle launches, multi-wallet send and collect, asset locking, rent recovery, EVM deployment on Robinhood Chain, and volume bots. API users pay half the platform fee. Data endpoints carry no platform fee.
Introduction
The Solauncher API provides programmatic access to every action available on the Solauncher platform. On Solana this covers SPL and Token-2022 token creation, metadata cloning, liquidity management across Raydium CPMM and AMM V4, Meteora, PumpSwap, Pump.fun bundle launches, LaunchLab and LetsBonk bundles, multi-wallet send and collect, token locking, rent recovery, and volume bots. On Robinhood Chain EVM this covers token creation and management, Uniswap V3 mainnet pools, PancakeSwap V3 testnet pools, Pons Launchpad, multisender, and volume bots.
Base URL
https://api.solauncher.orgAll v1 API endpoints are prefixed with /api/v1. Key management endpoints (/api/keys) use wallet-signature authentication and are not prefixed with /api/v1.
Transaction Model
Every "build" endpoint returns a base64-encoded, partially signed Solana transaction. Your application is responsible for:
- 1Decoding the base64 transaction string into bytes.
- 2Deserializing into a
TransactionorVersionedTransactionobject depending on the endpoint. - 3Adding the user's wallet signature.
- 4Broadcasting to the Solana network via your RPC connection.
Versioned vs Legacy Transactions
CPMM-based operations (Raydium CPMM, Meteora) return versioned (V0) transactions. Use VersionedTransaction.deserialize(Buffer.from(txBase64, 'base64')). All other Solana endpoints return legacy transactions. Use Transaction.from(Buffer.from(txBase64, 'base64')).
Quick Start
Create a Solana token end-to-end using three API calls.
- 1Get an API key from the Developer API page on Solauncher. Connect your wallet, sign the message, and click Create Key. The full key is shown once and must be saved immediately.
- 2Upload metadata using
POST /api/v1/token/upload-metadatawith your image and token details. First transfer 0.01 SOL to the platform fee wallet from your wallet, wait for confirmation, then include the transaction signature and your wallet address in the request. Receive back an IPFS URI. - 3Build the transaction with
POST /api/v1/token/build-create. Decode, sign, and broadcast to Solana.
import { Transaction } from '@solana/web3.js';
// Step 1 — pay 0.01 SOL service fee and wait for confirmation,
// then include the confirmed signature and your wallet address in the request body.
const RPC_URL = 'https://your-rpc-endpoint.com';
const form = new FormData();
form.append('feeTxSignature', confirmedFeeTxSignature);
form.append('payerWallet', walletPublicKey);
form.append('logo', imageFile);
form.append('name', 'My Token');
form.append('symbol', 'MTK');
form.append('description', 'A sample token');
form.append('decimals', '6');
const { uri } = await fetch(
'https://api.solauncher.org/api/v1/token/upload-metadata?rpcUrl=' + encodeURIComponent(RPC_URL),
{ method: 'POST', headers: { 'X-API-Key': 'slk_yourkeyhere' }, body: form }
).then(r => r.json());
// Step 2 — build create transaction
const { transaction, mint } = await fetch('https://api.solauncher.org/api/v1/token/build-create', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': 'slk_yourkeyhere' },
body: JSON.stringify({
rpcUrl: RPC_URL,
wallet: walletPublicKey,
uri,
name: 'My Token',
symbol: 'MTK',
supply: '1000000000000000',
decimals: 6,
network: 'mainnet-beta',
revokeMintAuthority: true,
revokeFreezeAuthority: true,
}),
}).then(r => r.json());
// Step 3 — sign and submit
const tx = Transaction.from(Buffer.from(transaction, 'base64'));
await wallet.signTransaction(tx);
const sig = await connection.sendRawTransaction(tx.serialize());
console.log('Mint:', mint, 'Sig:', sig);
Authentication
API Key Authentication
Pass your API key in the X-API-Key header on every /api/v1/* request. API keys begin with the prefix slk_ followed by 64 hex characters. Only the SHA-256 hash of the key is stored on the server — the full key is shown once at creation time.
curl -X POST https://api.solauncher.org/api/v1/token/build-create \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{...}'
Wallet Signature Authentication
The key management endpoints (/api/keys) use Ed25519 wallet ownership verification instead of an API key. Sign the fixed string Solauncher API Key Management with your Solana wallet and include the base58-encoded signature in the request.
import bs58 from 'bs58';
const message = 'Solauncher API Key Management';
const bytes = new TextEncoder().encode(message);
const sig = await wallet.signMessage(bytes);
const signature = bs58.encode(sig); // pass this as walletSignature or signature
GET endpoints pass auth via query params (wallet, signature, message). POST/PATCH/DELETE endpoints pass auth in the request body (wallet, walletSignature, signedMessage).
Rate Limits
The API enforces a limit of 300 requests per minute per API key. Exceeding this returns a 429 Too Many Requests response with the following body:
{
"error": "Rate limit exceeded",
"code": "RATE_LIMITED",
"retry_after_seconds": 42
}Each wallet can have a maximum of 10 active API keys. Revoking a key frees up a slot.
Errors
All error responses return JSON with an error string field. HTTP status codes follow standard conventions.
| Code | Meaning |
|---|---|
| 400 | Bad request — missing or invalid parameters |
| 401 | Missing or invalid API key |
| 404 | Resource not found |
| 429 | Rate limit exceeded (300 req/min) |
| 500 | Internal server error |
| 503 | Authentication service unavailable — database unreachable |
{ "error": "Missing required field: wallet" }Pricing
API users pay exactly half the standard platform fee. Fees are embedded as on-chain transfer instructions inside the returned transaction. No fee is charged if the transaction is not submitted. The Upload Metadata endpoint is an exception: it charges a flat 0.01 SOL fee that must be paid before the call, not embedded in a returned transaction.
Pool creation endpoints that accept bundleWalletCount add 0.01 SOL per bundle wallet on top of the base fee at the API rate.
/api/keysList Keys
Returns all API keys belonging to the authenticated wallet. Uses wallet-signature authentication, not an API key.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Solana wallet public key (base58) |
| signature | string | Required | Base58-encoded Ed25519 signature |
| message | string | Required | The message that was signed. Use Solauncher API Key Management |
curl "https://api.solauncher.org/api/keys?wallet=YourWallet&signature=base58sig&message=Solauncher+API+Key+Management"{ "keys": [{ "id": 1, "key_prefix": "slk_a1b2c3", "name": "My Bot", "is_active": 1, "request_count": 142, "last_used_at": "2026-08-18T10:00:00Z", "created_at": "2026-08-01T00:00:00Z" }] }/api/keysCreate Key
Creates a new API key for the wallet. The full key is returned once and never stored in plaintext. Maximum 10 active keys per wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Solana wallet public key |
| walletSignature | string | Required | Base58-encoded signature of the message |
| signedMessage | string | Required | The message that was signed. Use Solauncher API Key Management |
| name | string | Optional | Label for the key, max 100 characters |
{ "key": "slk_a1b2c3d4...", "prefix": "slk_a1b2c3", "name": "My Bot", "warning": "Save this key now — it will not be shown again." }/api/keys/:idRename Key
Updates the display name of an existing API key.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Owner wallet public key |
| walletSignature | string | Required | Base58-encoded signature |
| signedMessage | string | Required | The message that was signed. Use Solauncher API Key Management |
| name | string | Optional | New label, max 100 characters |
{ "ok": true }/api/keys/:idRevoke Key
Permanently deactivates an API key. The key can no longer authenticate any request. This action cannot be undone.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Owner wallet public key |
| walletSignature | string | Required | Base58-encoded signature |
| signedMessage | string | Required | The message that was signed. Use Solauncher API Key Management |
{ "ok": true }/api/keys/:id/usageUsage Stats
Returns usage statistics for a specific API key: total requests, daily breakdown for the last 30 days, and top endpoints by call count.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Owner wallet public key |
| signature | string | Required | Base58-encoded signature |
| message | string | Required | The message that was signed. Use Solauncher API Key Management |
{
"total_requests": 458,
"last_used_at": "2026-08-18T10:22:00Z",
"last_30_days": [{ "date": "2026-08-18", "requests": 12 }],
"top_endpoints": [{ "endpoint": "/api/v1/token/build-create", "count": 80 }]
}Create Token
Creates a new SPL token on Solana in two steps: upload the token image and metadata to IPFS, then build the on-chain creation transaction. Total fees: 0.01 SOL (upload) + 0.03 SOL (create).
/api/v1/token/upload-metadataUploads a token image and metadata JSON to IPFS via Pinata. Returns the metadata URI to pass into Step 2. Accepts multipart/form-data. A flat fee of 0.01 SOL must be paid before this call: transfer 0.01 SOL to the platform fee wallet, wait for confirmation, then include the transaction signature and your wallet address in the request.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL. Pass as a query parameter: ?rpcUrl=https://your-rpc-url |
| feeTxSignature | string | Required | Base58 signature of a confirmed on-chain transfer of 0.01 SOL from payerWallet to the platform fee wallet. Must be confirmed within 5 minutes of this call. |
| payerWallet | string | Required | Base58 public key of the wallet that sent the fee transaction |
| name | string | Required | Token name |
| symbol | string | Required | Token ticker symbol |
| logo | file | Optional | Token image file, max 5 MB |
| description | string | Optional | Token description |
| website | string | Optional | Website URL |
| string | Optional | Twitter URL | |
| telegram | string | Optional | Telegram URL |
| discord | string | Optional | Discord URL |
| decimals | number | Optional | Token decimals. Default: 9 |
curl -X POST "https://api.solauncher.org/api/v1/token/upload-metadata?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com" \
-H "X-API-Key: slk_yourkeyhere" \
-F "feeTxSignature=5XkD...confirmed_sig" \
-F "payerWallet=YourWalletPublicKey" \
-F "logo=@/path/to/image.png" \
-F "name=My Token" \
-F "symbol=MTK" \
-F "description=A sample token" \
-F "decimals=6"{
"uri": "https://ipfs.io/ipfs/QmXyz...",
"metadata": {
"name": "My Token",
"symbol": "MTK",
"description": "A sample token",
"image": "https://ipfs.io/ipfs/QmImg...",
"external_url": "",
"decimals": 6,
"properties": { "category": "token", "files": [{ "uri": "https://ipfs.io/ipfs/QmImg...", "type": "image/png" }] },
"extensions": {}
}
}/api/v1/token/build-createBuilds a legacy Solana transaction that creates a new SPL token with on-chain metadata. The transaction is partially signed by the mint keypair server-side. Your wallet signature is required before broadcasting. Fee: 0.03 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| wallet | string | Required | Payer wallet public key (base58) |
| uri | string | Required | IPFS metadata URI from Step 1 |
| name | string | Required | Token name |
| symbol | string | Required | Token symbol |
| supply | string | Required | Total supply in raw units already scaled by decimals. Example: 1 billion tokens at 6 decimals = "1000000000000000" |
| decimals | number | Required | Token decimal places (0 to 9) |
| network | string | Required | "mainnet-beta" or "devnet" |
| revokeFreezeAuthority | boolean | Optional | Append freeze authority revocation instruction |
| revokeMintAuthority | boolean | Optional | Append mint authority revocation instruction |
| revokeUpdateAuthority | boolean | Optional | Set metadata to immutable |
| vanitySecretKey | string | Optional | Base64-encoded secret key from the vanity endpoint. A random keypair is generated if omitted. |
curl -X POST https://api.solauncher.org/api/v1/token/build-create \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{
"wallet": "YourWalletPublicKey",
"uri": "https://ipfs.io/ipfs/QmXyz...",
"name": "My Token",
"symbol": "MTK",
"supply": "1000000000000000",
"decimals": 6,
"network": "mainnet-beta",
"revokeMintAuthority": true,
"revokeFreezeAuthority": true,
"rpcUrl": "https://api.mainnet-beta.solana.com"
}'{
"transaction": "AgAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012,
"mint": "NewMintAddress...",
"ata": "AssocTokenAccount..."
}Transaction.from(Buffer.from(transaction, 'base64')), sign with your wallet, then broadcast./api/v1/token/vanityVanity Mint Address
Generates a mint keypair whose public key starts with a given prefix or ends with a given suffix. At least one of the two fields is required. Longer patterns take significantly more server time to generate.
| Field | Type | Required | Description |
|---|---|---|---|
| prefix | string | Optional | Desired base58 address prefix |
| suffix | string | Optional | Desired base58 address suffix |
curl -X POST https://api.solauncher.org/api/v1/token/vanity \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"prefix":"COOL","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "publicKey": "COOLaBc1...", "secretKey": "5JcV...", "attempts": 142857 }The secretKey in the response is base58-encoded. To use it as vanitySecretKey in the build-create request, decode it from base58 to raw bytes and re-encode as base64 first. Example using the bs58 library:
import bs58 from 'bs58'
const vanitySecretKey = Buffer.from(bs58.decode(secretKey)).toString('base64')/api/v1/token/fetch-metadataFetch Token Metadata
Reads on-chain Metaplex metadata for any existing SPL token and returns the name, symbol, URI, and social links extracted from the metadata JSON. Used by the Clone Token feature to auto-fill token details. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address (base58) |
| network | string | Optional | "mainnet-beta" or "devnet". Default: "mainnet-beta" |
curl "https://api.solauncher.org/api/v1/token/fetch-metadata?mint=TokenMintAddress&network=mainnet-beta&rpcUrl=https://your-rpc-url" \
-H "X-API-Key: slk_yourkeyhere"{
"name": "My Token",
"symbol": "MTK",
"uri": "https://ipfs.io/ipfs/QmXyz...",
"description": "A sample token",
"image": "https://ipfs.io/ipfs/QmImg...",
"twitter": "https://x.com/mytoken",
"telegram": "https://t.me/mytoken",
"website": "https://mytoken.io",
"discord": ""
}twitter, telegram, website, discord) are extracted from the token's off-chain metadata JSON. They are empty strings when not present in the JSON. The endpoint returns a partial result if the URI is unreachable./api/v1/manage/burn/buildBurn Tokens
Builds a transaction to permanently burn a specified amount of tokens. Automatically detects SPL vs Token-2022 program from the mint's on-chain owner. Fee: 0.025 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| owner | string | Required | Wallet that owns the tokens |
| amount | string | Required | Human-readable amount to burn (decimals allowed) |
| decimals | number | Optional | Token decimals. Fetched from chain if omitted. |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/manage/burn/build \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"mint":"TokenMint","owner":"WalletAddress","amount":"1000000","network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "transaction": "AQAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }/api/v1/manage/revoke-authority/buildRevoke Authority
Builds a transaction to permanently revoke a token authority. Supports three authority types. For mint and freeze, the server verifies the caller is the actual on-chain authority before building. Fee: 0.015 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| currentAuthority | string | Required | Wallet currently holding the authority |
| authorityType | string | Required | "mint", "freeze", or "update" |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/manage/revoke-authority/build \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"mint":"TokenMint","currentAuthority":"WalletAddr","authorityType":"mint","network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "transaction": "AQAAAA..." }/api/v1/manage/freeze/buildFreeze Account
Builds a transaction to freeze a token account, preventing the holder from transferring tokens. Pass either the token account address or the wallet address — the ATA is derived automatically from the wallet. Fee: 0.005 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| targetAccount | string | Required | Token account address or wallet address |
| freezeAuthority | string | Required | Wallet holding the freeze authority |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/manage/freeze/build \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"mint":"TokenMint","targetAccount":"WalletOrTokenAccount","freezeAuthority":"AuthWallet","network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "transaction": "AQAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }/api/v1/manage/unfreeze/buildUnfreeze Account
Builds a transaction to unfreeze a previously frozen token account. Accepts the same fields as the freeze endpoint. Fee: 0.005 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| targetAccount | string | Required | Token account address or wallet address |
| freezeAuthority | string | Required | Wallet holding the freeze authority |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/manage/unfreeze/build \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"mint":"TokenMint","targetAccount":"WalletOrTokenAccount","freezeAuthority":"AuthWallet","network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "transaction": "AQAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }/api/v1/manage/mint/buildMint Additional Tokens
Builds a transaction to mint additional tokens to a destination wallet. The destination ATA is created automatically if it does not yet exist. Fee: 0.015 SOL.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| mintAuthority | string | Required | Wallet holding the mint authority |
| destination | string | Required | Destination wallet address (ATA derived automatically) |
| amount | string | Required | Human-readable amount to mint (decimals allowed) |
| decimals | number | Optional | Fetched from chain if omitted |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/manage/mint/build \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"mint":"TokenMint","mintAuthority":"AuthWallet","destination":"DestWallet","amount":"1000000","network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{ "transaction": "AQAAAA..." }/api/v1/raydium/openbook/createCreate OpenBook Market
Creates an OpenBook V3 order book market required before launching a Raydium AMM V4 pool. Returns two unsigned transactions that must be signed and submitted in order: tx1 first (confirmed), then tx2. Platform fee: 0.07 SOL (charged at the platform level, not subject to the API user discount).
| Field | Type | Required | Description |
|---|---|---|---|
| payer | string | Required | Payer wallet public key. Signs both transactions |
| baseMint | string | Required | Token mint address (the asset being traded) |
| quoteMint | string | Required | Quote currency mint, typically SOL or USDC |
| minOrderSize | number | Required | Minimum order size in base token units (e.g. 1) |
| priceTick | number | Required | Minimum price increment (e.g. 0.000001) |
| rentFee | number | Optional | Target rent SOL budget, controls order book account sizes. Default: 0.29 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://api.solauncher.org/api/v1/raydium/openbook/create \
-H "X-API-Key: slk_yourkeyhere" \
-H "Content-Type: application/json" \
-d '{"payer":"YourWallet","baseMint":"TokenMint","quoteMint":"So11111111111111111111111111111111111111112","minOrderSize":1,"priceTick":0.000001,"network":"mainnet-beta","rpcUrl":"https://api.mainnet-beta.solana.com"}'{
"marketId": "MarketPublicKey...",
"tx1": "AQAAAA...",
"tx2": "AQAAAB...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}tx1 and wait for confirmation before submitting tx2. Both use the same blockhash. Both are legacy transactions — use Transaction.from(Buffer.from(tx, 'base64'))./api/v1/raydium/liquidity/createCreate CPMM Pool
Creates a Raydium CPMM (Constant Product Market Maker) pool and adds initial liquidity in one operation. Returns a versioned (V0) transaction. Platform fee: 0.07 SOL (API users: 0.035 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Payer wallet public key |
| baseMint | string | Required | Token mint address |
| quoteMint | string | Required | Quote mint, typically SOL or USDC |
| baseAmount | string | Required | Token amount as a decimal string (e.g. "1000000"). Scaled internally using on-chain decimals |
| quoteAmount | string | Required | Quote amount as a decimal string (e.g. "5.5" for 5.5 SOL) |
| feeTier | string | Optional | Pool fee tier as a percent string, e.g. "0.25". Default: "0.25" |
| startTime | string|number | Optional | ISO date string or Unix timestamp to open trading. Default: 0 (immediate) |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/liquidity/create \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"baseMint": "TokenMintAddress",
"quoteMint": "So11111111111111111111111111111111111111112",
"baseAmount": "1000000",
"quoteAmount": "5.5"
}'{ "transaction": "AgAAAA...", "poolId": "CpmmPool...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012, "message": "CPMM pool transaction built — sign and send to create pool" }VersionedTransaction.deserialize(Buffer.from(transaction, 'base64')) to sign and broadcast./api/v1/raydium/liquidity/create-ammCreate AMM V4 Pool
Creates a Raydium AMM V4 pool using the Initialize2 instruction. Requires an existing OpenBook market ID (use the Create OpenBook Market endpoint first). Returns a legacy transaction. Platform fee: 0.07 SOL (API users: 0.035 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Payer wallet public key |
| marketId | string | Required | OpenBook market ID from the Create OpenBook Market endpoint |
| baseMint | string | Required | Token mint address |
| quoteMint | string | Required | Quote mint address (typically SOL) |
| baseAmount | string | Required | Token amount as a decimal string |
| quoteAmount | string | Required | Quote amount as a decimal string |
| startTime | string|number | Optional | ISO date string or Unix timestamp to open trading. Default: 0 (immediate) |
| bundleWalletCount | number | Optional | Number of bundle wallets buying at creation. Adds 0.02 SOL per wallet to the platform fee. Default: 0 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/liquidity/create-amm \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"marketId": "OpenBookMarketId",
"baseMint": "TokenMintAddress",
"quoteMint": "So11111111111111111111111111111111111111112",
"baseAmount": "1000000",
"quoteAmount": "5.5"
}'{ "transaction": "AQAAAA...", "poolId": "AmmPool...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }Transaction.from(Buffer.from(transaction, 'base64')), sign with your wallet, then broadcast./api/v1/raydium/preview-liquidityPreview Liquidity
Returns the estimated token output for a given SOL input amount based on the current pool reserves. Works for both CPMM and AMM V4 pools. No transaction is built and no fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| poolId | string | Required | Raydium pool ID (CPMM or AMM V4) |
| amount | string | Required | SOL input amount as a decimal string (e.g. "1.5" for 1.5 SOL) |
| poolType | string | Optional | "cpmm" or "ammv4". Default: "cpmm" |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/preview-liquidity \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"poolId": "CpmmPoolId",
"amount": "1.5"
}'{ "success": true, "tokenAmount": "12345.678900", "tokenMint": "TokenMint...", "tokenDecimals": 6, "poolType": "cpmm" }{ "success": false, "error": "..." }. tokenAmount is the human-readable token output (not raw units)./api/v1/raydium/add-liquidityAdd Liquidity
Builds a transaction to add liquidity to an existing Raydium CPMM or AMM V4 pool. Pass poolType to specify which pool type to use. Platform fee: 0.05 SOL (API users: 0.025 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Liquidity provider wallet public key |
| poolId | string | Required | Raydium pool ID |
| baseAmount | string | Required | SOL amount to add as a decimal string (e.g. "1.5"). The paired token amount is computed from the pool ratio |
| poolType | string | Optional | "cpmm" or "ammv4". Default: "cpmm" |
| slippage | number | Optional | Slippage tolerance in percent. Default: 1 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/add-liquidity \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"poolId": "CpmmPoolId",
"baseAmount": "1.5"
}'{ "transaction": "AgAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012, "message": "CPMM add liquidity transaction built — sign and send" }VersionedTransaction.deserialize() for CPMM and Transaction.from() for AMM V4./api/v1/raydium/liquidity/removeRemove Liquidity
Builds a transaction to remove liquidity from a Raydium pool by redeeming LP tokens. Provide lpAmount for an exact amount or removePercent to remove a fraction of your balance. Platform fee: 0.05 SOL (API users: 0.025 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | LP token holder wallet public key |
| poolId | string | Required | Raydium pool ID |
| lpAmount | string | Optional | Exact LP token amount to redeem in raw units. If omitted, removePercent is used |
| removePercent | number | Optional | Percentage of your LP balance to remove (1 to 100). Default: 100 |
| poolType | string | Optional | "cpmm" or "ammv4". Default: "cpmm" |
| slippage | number | Optional | Slippage tolerance in percent. Default: 1 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/liquidity/remove \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"poolId": "CpmmPoolId"
}'{ "transaction": "AgAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012, "message": "CPMM remove liquidity transaction built — sign and send" }VersionedTransaction.deserialize() for CPMM and Transaction.from() for AMM V4./api/v1/raydium/burn-lpBurn LP Tokens
Builds a transaction to permanently burn LP tokens from a token account. Burning locks liquidity forever and is irreversible. Works with both Raydium and Meteora LP tokens. Platform fee: 0.05 SOL (API users: 0.025 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| payer | string | Required | Wallet public key that owns the LP token account and pays fees |
| mint | string | Required | LP token mint address (not the pool ID) |
| source | string | Required | Source token account address that holds the LP tokens to burn |
| amount | string | Required | Amount to burn as a decimal string, scaled by lpdecimals (e.g. "1000.5") |
| lpdecimals | number | Required | Decimal places of the LP token mint |
| priorityFee | number | Optional | Priority fee in SOL. Default: 0.001 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/burn-lp \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"payer": "YourWalletPublicKey",
"mint": "LpTokenMintAddress",
"source": "LpTokenAccountAddress",
"amount": "1000.5",
"lpdecimals": 6
}'{ "txBase64": "AQAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }Transaction.from(Buffer.from(txBase64, 'base64')), sign with your wallet, then broadcast.payer before building the transaction./api/v1/raydium/cpmm-pool-by-tokenFind CPMM Pool
Looks up Raydium CPMM pools by token mint address. Searches on-chain program accounts directly. Returns the first matching pool ID along with both mint addresses and a count of all matching pools. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenMint | string | Required | Token mint address to search for |
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/raydium/cpmm-pool-by-token?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&tokenMint=TokenMintAddr&network=mainnet-beta" \
-H "x-api-key: YOUR_API_KEY"{ "success": true, "poolId": "CpmmPool...", "token0Mint": "TokenMint...", "token1Mint": "So111...112", "poolCount": 1 }{ "success": false, "error": "..." }. If poolCount is greater than 1, multiple pools exist for this token; the first found is returned./api/v1/raydium/ammv4-pool-by-tokenFind AMM V4 Pool
Looks up Raydium AMM V4 pools by token mint address. Searches on-chain program accounts for SOL-paired pools only. Returns the pool ID, both mints, the LP mint address, and a count of all matching pools. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenMint | string | Required | Token mint address to search for |
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/raydium/ammv4-pool-by-token?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&tokenMint=TokenMintAddr&network=mainnet-beta" \
-H "x-api-key: YOUR_API_KEY"{ "success": true, "poolId": "AmmPool...", "lpMint": "LpMint...", "coinMint": "TokenMint...", "pcMint": "So111...112", "poolCount": 1 }{ "success": false, "error": "..." }. coinMint is the base token; pcMint is the quote token (SOL). Only SOL-paired pools are returned. If poolCount is greater than 1, multiple pools exist; the first found is returned./api/v1/raydium/launchlab-bundleLaunchLab Bundle
Uploads token metadata to IPFS, creates a new Raydium LaunchLab token, and builds pre-signed buy transactions for bundle wallets. The create transaction is returned unsigned for the deployer to sign and submit. Bundle wallet transactions are pre-signed and ready to broadcast. Platform fee: 0.02 SOL per bundle wallet (charged inside the create transaction).
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Token name |
| symbol | string | Required | Token symbol |
| imageBase64 | string | Required | Base64-encoded image data (data URI or raw base64) |
| deployerPublicKey | string | Required | Deployer wallet public key (base58) |
| description | string | Optional | Token description |
| string | Optional | Twitter URL | |
| telegram | string | Optional | Telegram URL |
| website | string | Optional | Website URL |
| discord | string | Optional | Discord URL |
| initialBuySol | number | Optional | Deployer initial buy in SOL. Default: 0 (no buy) |
| bundleWallets | object[] | Optional | Array of {"secretKey": "base58key", "solAmount": 0.1}. Each secretKey must be base58-encoded. |
| slippage | number | Optional | Slippage tolerance in percent. Default: 10 |
| priorityFee | number | Optional | Priority fee in SOL per transaction. Default: 0.001 |
| vanityMintSecretKey | string | Optional | Base64-encoded secret key for a vanity mint address. A random keypair is generated if omitted. |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/raydium/launchlab-bundle \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"deployerPublicKey": "DeployerWalletPublicKey",
"name": "My Token",
"symbol": "MTK",
"imageBase64": "data:image/png;base64,iVBORw0KGgo...",
"bundleWallets": [
{ "secretKey": "base58SecretKey", "solAmount": 0.1 }
]
}'{
"mintPublicKey": "NewMintAddress...",
"metadataUri": "https://ipfs.io/ipfs/QmXyz...",
"createTx": "AQAAAA...",
"createBlockhash": "9WjABC...",
"createLastValidBlockHeight": 289540012,
"bundleTxs": [
{ "wallets": ["Wallet1..."], "signedTx": "AQAAAB...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }
]
}createTx is a partially-signed legacy transaction (already signed by the mint keypair). Deserialize with Transaction.from(Buffer.from(createTx, 'base64')), add your deployer signature, then broadcast. Each bundleTxs[].signedTx is fully signed and can be broadcast directly.createTx first and wait for confirmation before submitting bundleTxs./api/v1/raydium/letsbonk-bundleLetsBonk Bundle
Identical to the LaunchLab Bundle endpoint but routes the token launch through the LetsBonk platform on Raydium LaunchLab. Accepts the same request body and returns the same response shape. Platform fee: 0.02 SOL per bundle wallet (charged inside the create transaction).
All fields are identical to the LaunchLab Bundle endpoint.
curl -X POST https://yourapp.com/api/v1/raydium/letsbonk-bundle \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"deployerPublicKey": "DeployerWalletPublicKey",
"name": "My Token",
"symbol": "MTK",
"imageBase64": "data:image/png;base64,iVBORw0KGgo...",
"bundleWallets": [
{ "secretKey": "base58SecretKey", "solAmount": 0.1 }
]
}'{
"mintPublicKey": "NewMintAddress...",
"metadataUri": "https://ipfs.io/ipfs/QmXyz...",
"createTx": "AQAAAA...",
"createBlockhash": "9WjABC...",
"createLastValidBlockHeight": 289540012,
"bundleTxs": [
{ "wallets": ["Wallet1..."], "signedTx": "AQAAAB...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }
]
}createTx is a partially-signed legacy transaction (already signed by the mint keypair). Deserialize with Transaction.from(Buffer.from(createTx, 'base64')), add your deployer signature, then broadcast. Each bundleTxs[].signedTx is fully signed and can be broadcast directly.createTx first and wait for confirmation before submitting bundleTxs./api/v1/meteora/create-poolCreate Pool
Creates a Meteora CP-AMM (Dynamic AMM or Stable) pool and adds initial liquidity. DLMM is not supported. Platform fee: 0.07 SOL base (API users: 0.035 SOL) plus 0.02 SOL per bundle wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Payer wallet public key |
| tokenAMint | string | Required | Token A mint address |
| tokenBMint | string | Required | Token B mint address (typically SOL or USDC) |
| tokenAAmount | string | Required | Token A amount as a human-readable decimal (e.g. "1000.5"). The server scales by decimals |
| tokenBAmount | string | Required | Token B amount as a human-readable decimal |
| feeRate | string | Optional | Fee percentage as a decimal string (e.g. "0.25" for 0.25%). Default: "0.25" |
| poolType | string | Optional | "stable" for a Stable pool. Any other value creates a Dynamic AMM pool. "dlmm" returns a 400 error |
| bundleWalletCount | number | Optional | Number of bundle wallets. Adds 0.02 SOL per wallet to the fee. Default: 0 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/meteora/create-pool \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"tokenAMint": "TokenMintAddress",
"tokenBMint": "So11111111111111111111111111111111111111112",
"tokenAAmount": "1000.5",
"tokenBAmount": "5.5"
}'{
"txBase64": "AQAAAA...",
"pool": "MetPool...",
"position": "PosPubkey...",
"positionNft": "NftPubkey...",
"tokenAMint": "TokenMint...",
"warnings": [],
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}Transaction.from(Buffer.from(txBase64, 'base64')), sign with the owner, and broadcast./api/v1/meteora/pool-infoPool Info
Returns the current state of a Meteora CP-AMM pool including token mints, decimals, fee mode, and current price. Only Dynamic AMM and Stable pools are supported. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| poolAddress | string | Required | Meteora CP-AMM pool address |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/meteora/pool-info \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"poolAddress": "MeteoraPoolAddress"
}'{
"tokenAMint": "TokenMint...",
"tokenBMint": "So11111...",
"tokenADecimals": 6,
"tokenBDecimals": 9,
"collectFeeMode": 0,
"currentPrice": 0.001
}collectFeeMode: 0 = BothToken (Dynamic AMM), 2 = Compounding (Stable). DLMM pool addresses return a 400 error./api/v1/meteora/preview-liquidityPreview Liquidity
Returns a quote for adding liquidity to a Meteora CP-AMM pool: the required token B amount paired with the given token A amount, plus the current price. No transaction is built and no fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| poolAddress | string | Required | Meteora CP-AMM pool address |
| tokenAAmount | string | Required | Token A amount as a human-readable decimal (e.g. "100.5") |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/meteora/preview-liquidity \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"poolAddress": "MeteoraPoolAddress",
"tokenAAmount": "100.5"
}'{
"success": true,
"tokenBAmount": "0.100000000",
"tokenAMint": "TokenMint...",
"tokenBMint": "So11111...",
"currentPrice": 0.001
}/api/v1/meteora/add-liquidityAdd Liquidity
Builds a transaction to add liquidity to an existing Meteora CP-AMM pool. Creates a new position if the wallet has none. Platform fee: 0.02 SOL (API users: 0.01 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Liquidity provider wallet |
| poolAddress | string | Required | Meteora CP-AMM pool address |
| tokenAAmount | string | Required | Token A amount as a human-readable decimal (e.g. "100.5") |
| tokenBAmount | string | Required | Token B amount as a human-readable decimal |
| slippage | number | Optional | Slippage tolerance in percent. Default: 1 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/meteora/add-liquidity \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"poolAddress": "MeteoraPoolAddress",
"tokenAAmount": "100.5",
"tokenBAmount": "0.5"
}'{
"txBase64": "AQAAAA...",
"position": "PosPubkey...",
"positionNft": "NftPubkey...",
"tokenAMint": "TokenMint...",
"tokenBMint": "So11111...",
"warnings": [],
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}positionNft is only present when a new position is created. Deserialize with Transaction.from(Buffer.from(txBase64, 'base64')) and sign with the owner./api/v1/meteora/remove-liquidityRemove Liquidity
Builds a transaction to withdraw liquidity from a Meteora CP-AMM pool position. Platform fee: 0.02 SOL (API users: 0.01 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Position owner wallet |
| poolAddress | string | Required | Meteora CP-AMM pool address |
| removePercent | number | Optional | Percentage of position to remove (1 to 100). Default: 100 (full removal) |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/meteora/remove-liquidity \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWalletPublicKey",
"poolAddress": "MeteoraPoolAddress"
}'{
"txBase64": "AQAAAA...",
"position": "PosPubkey...",
"warnings": [],
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}Transaction.from(Buffer.from(txBase64, 'base64')), sign with the owner, and broadcast./api/v1/meteora/pool-by-tokenFind Pool
Looks up Meteora CP-AMM pools by token mint address, searching both the tokenA and tokenB positions. Returns the first matching pool. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenMint | string | Required | Token mint address to search for |
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/meteora/pool-by-token?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&tokenMint=TokenMintAddr" \
-H "x-api-key: YOUR_API_KEY"{
"success": true,
"poolAddress": "MetPool...",
"tokenAMint": "TokenMint...",
"tokenBMint": "So11111...",
"poolCount": 1
}{ "success": false, "error": "..." }. If poolCount is greater than 1, multiple pools exist for this token; the first found is returned./api/v1/pumpswap/pool-infoPool Info
Returns current state of a PumpSwap AMM pool: reserves, LP mint, and base token decimals. When a wallet address is provided, the LP token balance for that wallet is also returned. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| poolAddress | string | Required | PumpSwap pool address |
| walletAddress | string | Optional | Wallet to include LP token balance in response |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/pumpswap/pool-info \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"poolAddress": "PsPoolAddr..."
}'{
"success": true,
"lpMint": "LpMint...",
"baseMint": "TokenMint...",
"quoteMint": "So11111...",
"baseReserve": "5000000000000",
"quoteReserve": "1000000000",
"baseDecimals": 6,
"lpBalance": "12345678",
"lpBalanceRaw": "12345678000"
}lpBalance and lpBalanceRaw are only present when walletAddress is provided./api/v1/pumpswap/create-poolCreate Pool
Creates a PumpSwap AMM pool and adds initial liquidity. Platform fee: 0.07 SOL (API users: 0.035 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| walletAddress | string | Required | Payer wallet public key |
| baseMint | string | Required | Token mint address |
| baseAmount | string | Required | Initial token amount in raw units |
| quoteAmount | string | Required | Initial SOL amount in lamports |
| poolIndex | number | Optional | Pool index for disambiguation. Default: 0 |
| bundleWalletCount | number | Optional | Number of bundle wallets to include |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/pumpswap/create-pool \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"walletAddress": "YourWallet...",
"baseMint": "TokenMint...",
"baseAmount": "1000000000",
"quoteAmount": "1000000000"
}'{
"success": true,
"tx": "AQAAAA...",
"poolAddress": "PsPool...",
"baseMint": "TokenMint...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}VersionedTransaction.deserialize(Buffer.from(tx, 'base64')), sign with the payer wallet, and broadcast./api/v1/pumpswap/preview-liquidityPreview Liquidity
Returns a computed counterpart amount and current price for adding liquidity to a PumpSwap pool. No transaction is built and no fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| poolAddress | string | Required | PumpSwap pool address |
| amount | string | Required | Amount to add in raw units |
| isBaseAmount | boolean | Optional | If true, amount is in base token units. If false, it is in quote (SOL) lamports. Default: false |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/pumpswap/preview-liquidity \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"poolAddress": "PsPoolAddr...",
"amount": "1000000000",
"isBaseAmount": false
}'{
"success": true,
"computedAmount": "200000000",
"isBaseAmount": false,
"baseMint": "TokenMint...",
"baseDecimals": 6,
"currentPrice": 0.0002
}/api/v1/pumpswap/add-liquidityAdd Liquidity
Builds a transaction to add liquidity to an existing PumpSwap pool. Platform fee: 0.02 SOL (API users: 0.01 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| walletAddress | string | Required | Liquidity provider wallet |
| poolAddress | string | Required | PumpSwap pool address |
| amount | string | Required | Amount to deposit in raw units |
| isBaseAmount | boolean | Optional | If true, amount is in base token units. If false, it is in quote (SOL) lamports. Default: true |
| slippage | number | Optional | Slippage tolerance in percent. Default: 1 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/pumpswap/add-liquidity \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"walletAddress": "YourWallet...",
"poolAddress": "PsPoolAddr...",
"amount": "1000000000",
"isBaseAmount": true
}'{
"success": true,
"tx": "AQAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}VersionedTransaction.deserialize(Buffer.from(tx, 'base64')), sign with the wallet, and broadcast./api/v1/pumpswap/remove-liquidityRemove Liquidity
Builds a transaction to remove liquidity from a PumpSwap pool by redeeming LP tokens. Platform fee: 0.02 SOL (API users: 0.01 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| walletAddress | string | Required | LP token holder wallet |
| poolAddress | string | Required | PumpSwap pool address |
| lpAmount | string | Optional | Exact LP token amount to redeem in raw units. Provide this or removePercent |
| removePercent | number | Optional | Percentage of LP position to remove (1 to 100). Provide this or lpAmount |
| slippage | number | Optional | Slippage tolerance in percent. Default: 1 |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/pumpswap/remove-liquidity \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"walletAddress": "YourWallet...",
"poolAddress": "PsPoolAddr...",
"removePercent": 100
}'{
"success": true,
"tx": "AQAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}VersionedTransaction.deserialize(Buffer.from(tx, 'base64')), sign with the wallet, and broadcast./api/v1/pumpswap/pool-by-tokenFind Pool
Looks up a PumpSwap pool by token mint address. When a wallet address is provided, a secondary lookup checks for a user-created pool at index 0 for that wallet before falling back to a full program scan. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenMint | string | Required | Token mint address to search for |
| network | string | Optional | Default: "mainnet-beta" |
| walletAddress | string | Optional | Wallet address used to check for a user-created pool at index 0 before doing a full program scan |
curl "https://yourapp.com/api/v1/pumpswap/pool-by-token?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&tokenMint=TokenMintAddr" \
-H "x-api-key: YOUR_API_KEY"{
"success": true,
"poolAddress": "PsPool...",
"baseMint": "TokenMint...",
"quoteMint": "So11111..."
}{ "success": false, "error": "..." }. To get reserves and price for a found pool, call the Pool Info endpoint with the returned poolAddress./api/v1/locker/createLock Tokens
Creates a time-locked vesting schedule on-chain using the Bonfida token-vesting program. Supports locking both SPL tokens and Raydium/Meteora LP tokens. Tokens are fully locked until the unlock date. Platform fee: 0.1 SOL for SPL tokens, 0.4 SOL for LP tokens (API users: 0.05 SOL / 0.2 SOL).
| Field | Type | Required | Description |
|---|---|---|---|
| walletAddress | string | Required | Token owner wallet public key |
| mintAddress | string | Required | Mint address of the token or LP token to lock |
| amount | string | Required | Human-readable amount to lock (scaled by decimals server-side) |
| decimals | number | Optional | Token decimals. Default: 0 |
| unlockDate | number | Required | Unix timestamp (seconds) when tokens become unlockable |
| destinationAddress | string | Optional | Beneficiary wallet that receives unlocked tokens. Defaults to walletAddress |
| isLpToken | boolean | Optional | Set to true for LP token locks (higher fee applies). Default: false |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/locker/create \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"walletAddress": "YourWallet...",
"mintAddress": "TokenMint...",
"amount": "1000000",
"decimals": 6,
"unlockDate": 1800000000,
"isLpToken": false
}'{
"success": true,
"tx": "AQAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012,
"contractId": "4xK3m...",
"vestingAccount": "VestingAcct..."
}contractId and vestingAccount. Either can be passed to Get Lock Info or Unlock Tokens. This is a V0 (versioned) transaction — deserialize with VersionedTransaction.deserialize(Buffer.from(tx, 'base64')), sign with the owner wallet, and broadcast to complete the lock./api/v1/locker/unlockUnlock Tokens
Builds a transaction to withdraw locked tokens after the unlock date has passed. The server verifies on-chain that the lock exists and the schedule is readable before building the transaction. No fee is charged at unlock time.
| Field | Type | Required | Description |
|---|---|---|---|
| walletAddress | string | Required | Wallet that will sign and submit the unlock transaction |
| contractId | string | Required | Lock ID returned in the contractId field when the lock was created |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/locker/unlock \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"walletAddress": "YourWallet...",
"contractId": "4xK3m..."
}'{ "success": true, "tx": "AQAAAA...", "blockhash": "9WjABC...", "lastValidBlockHeight": 289540012 }VersionedTransaction.deserialize(Buffer.from(tx, 'base64')), sign with the wallet, and broadcast. The server verifies the lock exists on-chain before building the transaction./api/v1/locker/lock/:vestingAccountGet Lock Info
Returns the on-chain state of a specific vesting account: mint, amount, beneficiary, unlock timestamp, and whether the lock is still active. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| vestingAccount | string | Required | Vesting account public key (in URL path) |
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/locker/lock/VestingAcct...?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&network=mainnet-beta" \
-H "x-api-key: YOUR_API_KEY"{
"success": true,
"vestingAccount": "VestingAcct...",
"mintAddress": "TokenMint...",
"destinationAddress": "WalletAddr...",
"decimals": 6,
"lockedBalance": "1000000000000",
"schedules": [{ "releaseTime": "1800000000", "amount": "1000000000000" }]
}contractId as the path parameter. If metadata was saved via Save Lock Metadata, the response also includes twitter, telegram, discord, website, and creatorWallet fields./api/v1/locker/save-metaSave Lock Metadata
Saves optional social and creator metadata for a lock to the Solauncher database. This metadata is returned alongside lock info queries. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| vestingAccount | string | Required | Vesting account address returned when the lock was created |
| mintAddress | string | Required | Token mint address for the lock |
| destinationAddress | string | Required | Beneficiary wallet address for the lock |
| creatorWallet | string | Optional | Wallet that created the lock |
| unlockDate | number | Optional | Unix timestamp of the unlock date |
| decimals | number | Optional | Token decimals |
| isLpToken | boolean | Optional | Whether this lock holds an LP token |
| string | Optional | Twitter/X URL (must be http/https) | |
| telegram | string | Optional | Telegram URL |
| discord | string | Optional | Discord URL |
| website | string | Optional | Website URL |
curl -X POST https://yourapp.com/api/v1/locker/save-meta \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"vestingAccount": "VestingAcct...",
"mintAddress": "TokenMint...",
"destinationAddress": "WalletAddr...",
"twitter": "https://x.com/yourproject",
"website": "https://yourproject.com"
}'{ "success": true }twitter, telegram, discord, website) must be valid http or https URLs. Invalid or non-http/https values are silently dropped./api/v1/locker/by-mintLocks by Mint
Returns all vesting locks that exist for a given token mint address. Useful for displaying the lock history on a token info page. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| mint | string | Required | Token mint address |
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/locker/by-mint?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&mint=TokenMintAddr" \
-H "x-api-key: YOUR_API_KEY"{
"success": true,
"decimals": 6,
"locks": [{
"vestingAccount": "VestingAcct...",
"destinationAddress": "WalletAddr...",
"mintAddress": "TokenMint...",
"schedules": [{ "releaseTime": "1800000000", "amount": "500000000000" }]
}]
}/api/v1/rent/closeable/:walletFind Closeable Accounts
Returns a list of empty token accounts owned by the wallet that can be closed to recover their rent-exempt SOL deposit. Each entry includes the account address, the token mint, and the recoverable SOL amount. No fee is charged for this lookup.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Wallet public key (in URL path) |
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Optional | Default: "mainnet-beta" |
curl "https://yourapp.com/api/v1/rent/closeable/YourWallet?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com&network=mainnet-beta" \
-H "x-api-key: YOUR_API_KEY"{
"accounts": [
{ "pubkey": "Acct1...", "mint": "Mint1...", "lamports": 2039280, "state": "initialized", "programId": "TokenkegQ..." },
{ "pubkey": "Acct2...", "mint": "Mint2...", "lamports": 2039280, "state": "initialized", "programId": "TokenkegQ..." }
],
"totalRecoverable": 4078560,
"count": 2,
"batchCount": 1
}/api/v1/rent/close/buildClose Accounts
Builds one or more transactions to close selected empty token accounts and return their rent-exempt SOL to the wallet. Accounts are batched at 19 per transaction. Platform fee: 8% of totalLamports deducted from the first batch transaction (API users: 4%).
| Field | Type | Required | Description |
|---|---|---|---|
| owner | string | Required | Wallet that owns the accounts and will sign the transactions |
| accountsToClose | string[] or object[] | Required | Array of token account addresses to close. Each entry is a string address or {"pubkey":"...","programId":"..."} for Token-2022 accounts |
| destination | string | Optional | Address that receives the recovered SOL. Defaults to owner |
| totalLamports | number | Optional | Total lamports expected to be recovered. Used to compute the 8% platform fee for the first batch |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/rent/close/build \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"owner": "YourWallet...",
"accountsToClose": ["Acct1...", "Acct2..."],
"totalLamports": 4078560
}'{
"transactions": ["AQAAAA...", "AQBBBB..."],
"batchCount": 2,
"totalAccounts": 25,
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}Transaction.from(Buffer.from(tx, 'base64')), sign with the owner wallet, and submit in order. The fee is deducted inside the first transaction only. Pass the pubkey values from the Find Closeable Accounts response as accountsToClose. For Token-2022 accounts, pass objects: { "pubkey": "...", "programId": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" }./api/v1/claim-fees/balances/:walletGet Claimable Balances
Returns the claimable creator fee balance for a given wallet across Pump.fun and Raydium LaunchLab / LetsBonk. No fee is charged for this read-only call. The rpcUrl query parameter is required.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Solana wallet public key (base58) of the token creator |
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
curl "https://yourapp.com/api/v1/claim-fees/balances/YourWalletAddress?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com" \
-H "x-api-key: YOUR_API_KEY"{
"pumpfun": {
"creatorVault": "7xKX...",
"claimableLamports": 12345678,
"claimableSol": 0.012345678
},
"launchlab": {
"wsolAta": "4rPQ...",
"claimableLamports": 56789012,
"claimableSol": 0.056789012
},
"totalClaimableSol": 0.06913469
}/api/v1/claim-fees/buildBuild Claim Transaction
Builds an unsigned Solana transaction that claims creator fees from one or both supported platforms and transfers a 2.5% platform fee (half of the standard 5%) to the Solauncher treasury. Sign and submit the returned base64 transaction with your wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet | string | Required | Solana wallet public key of the creator claiming fees |
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| platforms | string[] | Required | Platforms to claim from. Valid values: "pumpfun", "launchlab" |
| pumpfunLamports | number | Optional | Expected claimable lamports from Pump.fun. Required when pumpfun is in platforms. |
| launchlabLamports | number | Optional | Expected claimable lamports from LaunchLab / LetsBonk. Required when launchlab is in platforms. |
curl -X POST https://yourapp.com/api/v1/claim-fees/build \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"wallet": "YourWalletAddress...",
"platforms": ["pumpfun", "launchlab"],
"pumpfunLamports": 12345678,
"launchlabLamports": 56789012
}'{
"transaction": "base64EncodedTransaction...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012,
"feeLamports": 3456,
"platforms": ["pumpfun", "launchlab"]
}Transaction.from(Buffer.from(transaction, 'base64')), sign with the creator wallet, and broadcast. The platform fee is embedded as a transfer instruction and is only charged if the transaction confirms. Use the balances endpoint first to get the lamport values for pumpfunLamports and launchlabLamports./api/v1/assets/get-assetGet Wallet Assets
Returns all SPL and Token-2022 fungible token holdings for a wallet, including mint address, raw and human-readable balance, decimals, token program, name, symbol, and logo URI. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| wallet_address | string | Required | Solana wallet public key |
| network | string | Optional | Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/assets/get-asset \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"wallet_address": "YourWallet..."
}'{
"success": true,
"data": {
"tokens": [
{
"mintAddress": "TokenMint...",
"rawAmount": "1000000000",
"tokenProgram": "TokenkegQ...",
"decimals": 6,
"balance": "1000.000000",
"name": "My Token",
"symbol": "MTK",
"img_uri": "https://..."
}
]
}
}/api/v1/wallets/generateGenerate Wallets
Generates one or more fresh Solana keypairs server-side and returns the public and secret keys. Useful for seeding bot wallets in bulk. Maximum 500 wallets per request. No fee is charged, but treat the response as highly sensitive.
| Field | Type | Required | Description |
|---|---|---|---|
| count | number | Required | Number of keypairs to generate (1 to 500) |
curl -X POST https://yourapp.com/api/v1/wallets/generate \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"count": 5
}'{
"wallets": [
{ "publicKey": "Pub1abc...", "secretKey": "5K8LsND6g..." },
{ "publicKey": "Pub2xyz...", "secretKey": "3mFpXQr7t..." }
]
}/api/v1/wallets/vanityVanity Wallet Address
Generates a Solana keypair whose public key starts with a given prefix or ends with a given suffix. At least one of the two fields is required. The combined length of prefix and suffix must be 6 characters or fewer. Longer patterns take significantly more compute time. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| prefix | string | Optional | Desired base58 address prefix. Combined length of prefix and suffix must not exceed 6 characters. |
| suffix | string | Optional | Desired base58 address suffix. Combined length of prefix and suffix must not exceed 6 characters. |
curl -X POST https://yourapp.com/api/v1/wallets/vanity \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"prefix": "COOL"
}'{ "publicKey": "COOL4xyz...", "secretKey": "5K8LsND6g...", "attempts": 218340 }/api/v1/dex/bundle-buy/buildBundle Buy Build
Builds unsigned buy transactions for one or more wallets. Private keys never leave the caller's machine. The server fetches Jupiter quotes, constructs VersionedTransactions, embeds a Jito tip and platform fee in the first transaction, then returns base64-encoded unsigned transactions for the caller to sign locally and submit.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| tokenMint | string | Required | Token mint address to buy |
| wallets | array | Required | Array of { publicKey, buyAmountSol } objects |
| slippage | number | Optional | Slippage tolerance in percent. Default: 10 |
| jitoTipSol | number | Optional | Jito tip in SOL. Default: 0.001 |
| receivingAddress | string | Optional | Optional destination wallet for received tokens (defaults to each buying wallet) |
curl -X POST https://yourapp.com/api/v1/dex/bundle-buy/build \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"tokenMint": "TokenMint111111111111111111111111111111111",
"wallets": [
{ "publicKey": "Wallet1Pk...", "buyAmountSol": 0.5 },
{ "publicKey": "Wallet2Pk...", "buyAmountSol": 0.3 }
],
"slippage": 10,
"jitoTipSol": 0.001
}'{
"transactions": [
{
"wallet": "Wallet1Pk...",
"unsignedTransaction": "base64encodedtx...",
"quote": { "inAmount": "500000000", "outAmount": "12300000", "priceImpactPct": 0.12 },
"blockhash": "Blockhash...",
"lastValidBlockHeight": 290000000,
"jitoTipIncluded": true,
"platformFeeIncluded": true
}
],
"summary": { "total": 2, "built": 2, "failed": 0 },
"nextStep": "Sign each transaction with its wallet and submit to POST /api/v1/dex/bundle/submit"
}/api/v1/dex/bundle-sell/buildBundle Sell Build
Builds unsigned sell transactions for one or more wallets. The server fetches each wallet's on-chain token balance, calculates the sell amount from either an explicit amount or a percentage, builds Jupiter swap instructions, and returns base64-encoded unsigned transactions. The Jito tip and platform fee are bundled into the first (largest-balance) transaction only.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| tokenMint | string | Required | Token mint address to sell |
| wallets | array | Required | Array of { publicKey, sellAmountTokens? } objects. If sellAmountTokens is omitted, sellPercent applies. |
| tokenDecimals | number | Optional | Token decimals used to convert sellAmountTokens. Default: 6 |
| sellPercent | number | Optional | Percent of balance to sell when no explicit amount is given. Default: 100 |
| slippage | number | Optional | Slippage tolerance in percent. Default: 10 |
| jitoTipSol | number | Optional | Jito tip in SOL. Default: 0.001 |
| receivingAddress | string | Optional | Optional destination wallet for received SOL |
curl -X POST https://yourapp.com/api/v1/dex/bundle-sell/build \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"tokenMint": "TokenMint111111111111111111111111111111111",
"wallets": [
{ "publicKey": "Wallet1Pk..." },
{ "publicKey": "Wallet2Pk...", "sellAmountTokens": 500 }
],
"sellPercent": 100,
"slippage": 10
}'{
"transactions": [
{
"wallet": "Wallet1Pk...",
"unsignedTransaction": "base64encodedtx...",
"quote": { "inAmount": "12000000", "outAmount": "482000000", "priceImpactPct": 0.08 },
"blockhash": "Blockhash...",
"lastValidBlockHeight": 290000001,
"tokenBalance": "12000000",
"sellAmount": "12000000",
"jitoTipIncluded": true,
"platformFeeIncluded": true
}
],
"summary": { "total": 2, "built": 2, "failed": 0 },
"nextStep": "Sign each transaction with its wallet and submit to POST /api/v1/dex/bundle/submit"
}/api/v1/dex/bundle/submitBundle Submit
Accepts signed base64-encoded transactions and broadcasts them as Jito bundles. Transactions are grouped in batches of 5 (the Jito bundle limit). Each group is sent as a single atomic bundle and the server waits for confirmation of the first transaction in each group before responding.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| transactions | array | Required | Array of signed base64-encoded VersionedTransaction strings |
curl -X POST https://yourapp.com/api/v1/dex/bundle/submit \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"transactions": ["signedBase64Tx1...", "signedBase64Tx2..."]
}'{
"bundles": [
{
"bundleIndex": 0,
"bundleId": "abc123...",
"status": "confirmed",
"count": 2,
"signatures": ["sig1...", "sig2..."]
}
],
"summary": { "total": 1, "confirmed": 1, "sent": 0, "failed": 0 }
}/api/v1/dex/volume-bot/estimateEstimate Bot Cost
Returns a cost breakdown for a given bot configuration without creating any wallets or on-chain state. Use this to display a cost preview before asking the user to fund the bot. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| bot_type | string | Optional | "volume", "booster", or "advanced". Default: "volume" |
| maker_count | number | Optional | Number of maker wallets (1 to 1000). Default: 100 |
| v_maker_amount | number | Optional | Total SOL to trade for volume bot |
| b_put_amount | number | Optional | Total SOL to put in for booster bot |
| adv_buy_min_sol | number | Optional | Min buy amount per maker for advanced bot. Default: 0.01 |
| adv_buy_max_sol | number | Optional | Max buy amount per maker for advanced bot. Default: 0.05 |
| priority_fee | number | Optional | Priority fee per transaction in SOL. Default: 0 |
| pool_type | string | Optional | "pumpfun", "pumpswap", or omit for standard pools |
| token_disposal | string | Optional | For advanced bot: "auto-sell" or "return-to-wallet" |
curl -X POST https://yourapp.com/api/v1/dex/volume-bot/estimate \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"bot_type": "volume",
"maker_count": 100,
"v_maker_amount": 5
}'{
"bot_type": "volume",
"maker_count": 100,
"service_fee_sol": 0.025,
"gas_buffer": "0.413 SOL",
"gas_and_swap_fees": "0.018 SOL",
"refunded_sol": "5.390 SOL",
"generated_volume": "10.000 SOL"
}/api/v1/dex/volume-bot/setupSetup Volume Bot
Generates maker wallets and a pool keypair server-side, stores them encrypted, and returns an unsigned legacy Transaction for the caller to sign and broadcast. The transaction transfers the service fee to the platform and seeds the pool keypair with trading capital. After broadcasting, call POST /api/v1/dex/volume-bot/start with the confirmed signature. The pending setup expires automatically after 30 minutes if not started.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| token_mint_address | string | Required | Token mint address to trade |
| payer | string | Required | Public key of the wallet that will sign and fund the setup transaction |
| bot_type | string | Optional | "volume", "booster", or "advanced". Default: "volume" |
| bot_speed | string | Optional | "SLOW", "NORMAL", or "FAST". Default: "SLOW" |
| maker_count | number | Optional | Number of maker wallets (1 to 1000). Default: 100 |
| v_maker_amount | number | Optional | Total SOL for volume bot trading capital |
| b_put_amount | number | Optional | Total SOL for booster bot |
| adv_buy_min_sol | number | Optional | Min buy per maker for advanced bot |
| adv_buy_max_sol | number | Optional | Max buy per maker for advanced bot |
| adv_delay_min_ms | number | Optional | Min delay between advanced bot trades in ms. Default: 5000 |
| adv_delay_max_ms | number | Optional | Max delay between advanced bot trades in ms. Default: 15000 |
| slippage_bps | number | Optional | Slippage in basis points. Default: 1000 |
| priority_fee | number | Optional | Priority fee per transaction in SOL. Default: 0 |
| pool_address | string | Optional | Optional pool address to use direct swaps instead of Jupiter routing |
| pool_type | string | Optional | "pumpfun", "pumpswap", "raydium", etc. Auto-detected if pool_address is provided and this is omitted. |
| token_disposal | string | Optional | For advanced bot: "auto-sell" or "return-to-wallet". Default: "auto-sell" |
| network | string | Optional | "mainnet-beta" or "devnet". Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/dex/volume-bot/setup \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"token_mint_address": "TokenMint111...",
"payer": "YourWalletPublicKey...",
"bot_type": "volume",
"maker_count": 100,
"v_maker_amount": 5,
"bot_speed": "NORMAL"
}'{
"unsignedTransaction": "base64encodedlegacytx...",
"transactionDetails": { "feePayer": "YourWalletPublicKey...", "recentBlockhash": "Blockhash...", "lastValidBlockHeight": 290000000 },
"poolPubkey": "PoolKeypairPublicKey...",
"estimatedSwapFee": 0.0025,
"costs": { "serviceFee": 0.025, "poolFunding": 5.413, "total": 5.438 },
"makerCount": 100,
"nextStep": "Sign the transaction with the payer wallet, broadcast it, then call POST /api/v1/dex/volume-bot/start with the confirmed signature"
}/api/v1/dex/volume-bot/startStart Volume Bot
Verifies the on-chain funding transaction from the setup step, then starts the bot in the background. The endpoint returns immediately with a job ID. Bot progress is streamed in real time via WebSocket at wss://yourapp.com/ws/bot-logs. When the bot completes, all unused SOL is automatically returned to the payer wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| wallet_address | string | Required | The payer public key used in the setup step |
| signature | string | Required | Confirmed on-chain signature of the setup funding transaction |
| network | string | Optional | "mainnet-beta" or "devnet". Must match the value used in setup. Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/dex/volume-bot/start \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"wallet_address": "YourWalletPublicKey...",
"signature": "confirmedFundingTxSignature..."
}'{
"jobId": "job_abc123",
"status": "started",
"makerCount": 100
}/api/v1/dex/volume-bot/:jobIdBot Status
Returns the current status and trade statistics for a running or completed bot job. Poll this endpoint or use the WebSocket stream for live updates. Jobs remain in memory until the server restarts.
| Field | Type | Required | Description |
|---|---|---|---|
| jobId | string | Required | Job ID returned by POST /api/v1/dex/volume-bot/start |
curl "https://yourapp.com/api/v1/dex/volume-bot/job_abc123?rpcUrl=https%3A%2F%2Fapi.mainnet-beta.solana.com" \
-H "x-api-key: YOUR_API_KEY"{
"jobId": "job_abc123",
"type": "maker",
"status": "running",
"tradesExecuted": 42,
"errors": 0,
"startedAt": 1750000000000,
"completedAt": null,
"lastError": null
}/api/v1/dex/volume-bot/:jobId/stopStop Bot
Signals a running bot to stop. The bot will finish its current trade cycle and then sweep all maker wallets, returning any remaining SOL to the payer. Returns immediately with a status of "stopped"; the actual sweep completes asynchronously.
| Field | Type | Required | Description |
|---|---|---|---|
| jobId | string | Required | Job ID returned by POST /api/v1/dex/volume-bot/start |
curl -X POST https://yourapp.com/api/v1/dex/volume-bot/job_abc123/stop \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"rpcUrl": "https://api.mainnet-beta.solana.com"}'{ "jobId": "job_abc123", "status": "stopped" }/api/v1/dex/volume-bot/pendingClear Pending Setup
Deletes a pending bot setup that has not been started. Use this to discard a setup and free the slot before calling setup again with different parameters. If the setup already transferred SOL to the pool keypair, use the Recover SOL endpoint instead to return that balance to the payer wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| payer | string | Required | The payer public key used in the setup step |
| network | string | Optional | Must match the network used in setup. Default: "mainnet-beta" |
curl -X DELETE https://yourapp.com/api/v1/dex/volume-bot/pending \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"payer": "YourWalletPublicKey..."
}'{ "ok": true }{"ok":true} without error./api/v1/dex/volume-bot/recoverRecover SOL
Recovers stranded SOL from the pool keypair when the bot was set up but never started. The server signs and broadcasts a recovery transaction using the stored pool keypair, returning any remaining balance to the payer wallet. The pending job is deleted after a successful recovery. Only works within the 30-minute pending-job window.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Your Solana RPC endpoint URL |
| wallet_address | string | Required | The payer public key used in the setup step |
| network | string | Optional | Must match the network used in setup. Default: "mainnet-beta" |
curl -X POST https://yourapp.com/api/v1/dex/volume-bot/recover \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"wallet_address": "YourWalletPublicKey..."
}'{
"ok": true,
"recovered_sol": 5.438,
"signature": "recoveryTxSignature..."
}/api/v1/evm/configChain Config
Returns the full EVM chain configuration including chain ID, RPC endpoint, DEX addresses, deployed contract addresses, and fee schedule. When network is omitted, both networks are returned under mainnet and testnet keys. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Optional | "mainnet" or "testnet". If omitted, both networks are returned |
| rpcUrl | string | Required | Your EVM RPC URL |
curl "https://yourapp.com/api/v1/evm/config?network=mainnet&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{
"chainId": 4663,
"rpc": "https://rpc.mainnet.chain.robinhood.com",
"explorer": "https://robinhoodchain.blockscout.com",
"explorerApi": "https://robinhoodchain.blockscout.com/api",
"faucet": null,
"tokens": {
"WETH": "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73",
"USDG": "0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168"
},
"uniswapV2": {
"factory": "0x8bceaa40b9acdfaedf85adf4ff01f5ad6517937f",
"router02": "0x89e5db8b5aa49aa85ac63f691524311aeb649eba"
},
"uniswapV3": {
"factory": "0x1f7d7550b1b028f7571e69a784071f0205fd2efa",
"swapRouter02": "0xcaf681a66d020601342297493863e78c959e5cb2",
"universalRouter": "0x8876789976decbfcbbbe364623c63652db8c0904",
"nonfungiblePositionManager": "0x73991a25c818bf1f1128deaab1492d45638de0d3",
"quoterV2": "0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7",
"permit2": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"multicall": "0x282a3c4d320cc7f0d5eaf56b8029e4b88338f0a3",
"tickLens": "0x7dfd4f31be6814d2906bde155c3e1b146eac1468"
},
"pancakeswapV2": {
"factory": "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E",
"router02": "0x8cFe327CEc66d1C090Dd72bd0FF11d690C33a2Eb"
},
"pancakeswapV3": null,
"contracts": {
"tokenFactory": "0x311A1cB7EE788a6f2720844e1Aa8EAdD64830EeA",
"multisender": "0x8b3aA19aF88fBeaef1BF499e7EFA770C59089b2e",
"treasury": "0x2665e484ff0BE967d8950CC148D499a108880E49",
"pinkLock": "0x8F675BD0BD5eed560B2Cf170F85a277CF3fAAE79",
"liquidityHelper": "0xd0a66A54fC29cacDcf1fC17232Dcb44c62e50814",
"ponsLaunchFactory": "0xA5aAb3F0c6EeadF30Ef1D3Eb997108E976351feB",
"ponsLaunchLocker": "0x736D76699C26D0d966744cAe304C000d471f7F35"
},
"fees": {
"base": "10000000000000000",
"taxEnabled": "6000000000000000",
"antiBotEnabled": "6000000000000000",
"antiWhaleEnabled": "6000000000000000"
},
"multisender": {
"feePerRecipientWei": "100000000000000",
"maxRecipientsPerBatch": 100
}
}uniswapV2 and uniswapV3 are null and pancakeswapV3 is populated. Omitting network returns both configs under { "mainnet": {...}, "testnet": {...} }./api/v1/evm/feeGet EVM Fee
Returns the platform fee in wei and ETH for a given EVM operation type. No fee is charged for this query.
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | Required | "factory" for token deploy or "multisend" for multisend |
| network | string | Required | "mainnet" or "testnet" |
| rpcUrl | string | Required | Your EVM RPC URL |
| tax | string | Optional | "true" if tax module is enabled. Adds 0.006 ETH to factory fee. Only used for type=factory |
| antiBot | string | Optional | "true" if anti-bot is enabled. Adds 0.006 ETH to factory fee. Only used for type=factory |
| antiWhale | string | Optional | "true" if anti-whale is enabled. Adds 0.006 ETH to factory fee. Only used for type=factory |
| recipients | number | Optional | Number of recipients. Required for type=multisend to compute the per-recipient fee |
curl "https://yourapp.com/api/v1/evm/fee?type=factory&network=mainnet&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{ "type": "factory", "network": "mainnet", "wei": "10000000000000000", "eth": "0.01" }{ "type": "multisend", "network": "mainnet", "recipients": 10, "wei": "500000000000000", "eth": "0.0005" }/api/v1/evm/deploy-tokenDeploy EVM Token
Returns ABI-encoded calldata for deploying an ERC-20 token via the Solauncher factory contract. The transaction is not submitted. Sign and broadcast it yourself. Use the fee endpoint to preview the cost before calling deploy.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| name | string | Required | Token full name |
| symbol | string | Required | Token ticker symbol |
| decimals | number | Required | Token decimals (e.g. 18) |
| totalSupply | string | Required | Total token supply as a display amount. The contract multiplies this by 10^decimals internally. Example: 1 billion tokens = "1000000000" |
| taxRecipient | string | Required | Address that receives collected tax |
| taxEnabled | boolean | Optional | Enable buy/sell tax module. Default: false |
| antiBotEnabled | boolean | Optional | Enable anti-bot limiter at launch. Default: false |
| antiWhaleEnabled | boolean | Optional | Enable max wallet and max transaction limits. Default: false |
| blacklistEnabled | boolean | Optional | Enable address blacklist. Default: false |
| mintEnabled | boolean | Optional | Allow owner to mint new tokens. Default: false |
| pauseEnabled | boolean | Optional | Allow owner to pause transfers. Default: false |
| buyTaxBps | number | Optional | Buy tax in basis points (e.g. 200 = 2%) |
| sellTaxBps | number | Optional | Sell tax in basis points |
| maxWalletBps | number | Optional | Max wallet size in basis points of total supply |
| maxTxBps | number | Optional | Max transaction size in basis points of total supply |
| antiBotMaxTxBps | number | Optional | Anti-bot phase max transaction size in basis points |
curl -X POST https://yourapp.com/api/v1/evm/deploy-token \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"name": "My Token",
"symbol": "MTK",
"decimals": 18,
"totalSupply": "1000000000",
"taxRecipient": "0xYourAddress",
"taxEnabled": true,
"buyTaxBps": 200,
"sellTaxBps": 300
}'{
"to": "0x311A1cB7EE788a6f2720844e1Aa8EAdD64830EeA",
"data": "0xABIEncoded...",
"value": "16000000000000000",
"fee": { "wei": "16000000000000000", "eth": "0.016" },
"network": "mainnet"
}value field is the platform fee in wei, included in the transaction value. The fee is 0.01 ETH base plus 0.006 ETH each for taxEnabled, antiBotEnabled, and antiWhaleEnabled. The token is deployed when the transaction is confirmed on-chain./api/v1/evm/multisendEVM Multisend
Returns ABI-encoded calldata for sending native ETH or ERC-20 tokens to multiple recipients via the Solauncher multisend contract. The transaction is not submitted. Sign and broadcast it yourself.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| type | string | Required | Send mode: "ethEqual" (equal ETH), "ethVarying" (varying ETH), "tokenEqual" (equal ERC-20), "tokenVarying" (varying ERC-20) |
| recipients | string[] | Required | Array of recipient EVM addresses |
| amounts | string[] | Optional | Array of amounts in wei or raw token units, one per recipient. Required for "ethVarying" and "tokenVarying" types |
| amountEach | string | Optional | Amount per recipient in wei or raw token units. Required for "ethEqual" and "tokenEqual" types |
| token | string | Optional | ERC-20 token contract address. Required for token types |
curl -X POST https://yourapp.com/api/v1/evm/multisend \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"type": "ethEqual",
"recipients": ["0xAddr1", "0xAddr2"],
"amountEach": "1000000000000000"
}'{
"to": "0x8b3aA19aF88fBeaef1BF499e7EFA770C59089b2e",
"data": "0xABIEncoded...",
"value": "10500000000000000",
"fee": { "wei": "500000000000000", "eth": "0.0005" },
"total": { "wei": "10500000000000000", "eth": "0.0105" },
"network": "mainnet",
"type": "ethEqual",
"recipientCount": 10
}value is the raw wei amount to include in the transaction (ETH being distributed plus the platform fee). total is the same amount formatted as { wei, eth }. For token types, value is only the platform fee since tokens are pulled via transferFrom. Approve the multisend contract to spend tokens before broadcasting for ERC-20 sends./api/v1/evm/verify-tokenVerify EVM Token
Submits the deployed token contract source code to the chain's block explorer for verification. Verification makes the contract ABI and source publicly readable on the explorer. The request may take up to 30 seconds as it waits for the explorer API to respond. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenAddress | string | Required | Deployed token contract address (0x...) |
| network | string | Required | "mainnet" or "testnet" |
curl -X POST https://yourapp.com/api/v1/evm/verify-token \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress"
}'{
"ok": true,
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"blockscout": { "message": "OK" }
}blockscout field contains the raw JSON the explorer API returned. Check the explorer after a few seconds to confirm the contract is publicly verified./api/v1/evm/manage/open-tradingOpen Trading
Returns calldata that calls openTrading() on the deployed RHTokenTemplate contract, enabling public transfers. The caller signs and broadcasts the transaction. Platform fee: 0.001 ETH (contract-enforced, included in value).
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Deployed token contract address (0x...) |
curl -X POST https://yourapp.com/api/v1/evm/manage/open-trading \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-taxSet Tax
Returns calldata that calls setTaxConfig() on the token contract, updating buy tax, sell tax, and the tax recipient address. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| buyTaxBps | number | Required | Buy tax in basis points (0 to 2500) |
| sellTaxBps | number | Required | Sell tax in basis points (0 to 2500) |
| taxRecipient | string | Required | Address that receives tax proceeds |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-tax \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"buyTaxBps": 200,
"sellTaxBps": 300,
"taxRecipient": "0xYourAddress"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-limitsSet Limits
Returns calldata that calls setLimits() on the token contract, setting max wallet and max transaction sizes as a percentage of total supply in basis points. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| maxWalletBps | number | Required | Max wallet size in basis points (0 to 10000) |
| maxTxBps | number | Required | Max transaction size in basis points (0 to 10000) |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-limits \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"maxWalletBps": 200,
"maxTxBps": 100
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/remove-limitsRemove Limits
Returns calldata that calls removeLimits() on the token contract, disabling max wallet and max transaction restrictions. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
curl -X POST https://yourapp.com/api/v1/evm/manage/remove-limits \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-blacklistSet Blacklist
Returns calldata that calls setBlacklist() on the token contract, adding or removing an address from the transfer blacklist. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| account | string | Required | Address to blacklist or unblacklist |
| status | boolean | Required | true to blacklist, false to remove |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-blacklist \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"account": "0xAddressToBlacklist",
"status": true
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-dex-pairSet Dex Pair
Returns calldata that calls setDexPair() on the token contract, registering or deregistering a liquidity pool address as a known DEX pair so that buys and sells from it are taxed correctly. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| pair | string | Required | Liquidity pool address to register |
| status | boolean | Required | true to add as DEX pair, false to remove |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-dex-pair \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"pair": "0xPoolAddress",
"status": true
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-exemptionsSet Exemptions
Returns calldata that calls setExemptions() on the token contract, granting or revoking fee and limit exemptions for a specific address. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| account | string | Required | Address to update exemption status for |
| feeExempt | boolean | Required | Whether to exempt this address from tax |
| limitExempt | boolean | Required | Whether to exempt this address from transfer limits |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-exemptions \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"account": "0xAddress",
"feeExempt": true,
"limitExempt": false
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/set-pausedSet Paused
Returns calldata that calls setPaused() on the token contract, pausing or unpausing all token transfers. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| paused | boolean | Required | true to pause transfers, false to unpause |
curl -X POST https://yourapp.com/api/v1/evm/manage/set-paused \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"paused": true
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/mintMint
Returns calldata that calls mint() on the token contract, minting new tokens to a recipient address. Only available when the mint authority has not been revoked. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| to | string | Required | Recipient address for the minted tokens |
| amount | string | Required | Amount to mint in raw token units (integer string) |
curl -X POST https://yourapp.com/api/v1/evm/manage/mint \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"to": "0xRecipientAddress",
"amount": "1000000000000000000000"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/burnBurn
Returns calldata that calls burn() on the token contract, burning tokens from the caller's own balance. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| amount | string | Required | Amount to burn in raw token units (integer string) |
curl -X POST https://yourapp.com/api/v1/evm/manage/burn \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"amount": "1000000000000000000000"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/renounce-ownershipRenounce Ownership
Returns calldata that calls renounceOwnership() on the token contract, permanently removing the owner. This action is irreversible. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
curl -X POST https://yourapp.com/api/v1/evm/manage/renounce-ownership \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/manage/transfer-ownershipTransfer Ownership
Returns calldata that calls transferOwnership() on the token contract, transferring the owner role to a new address. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token contract address (0x...) |
| newOwner | string | Required | Address of the new owner |
curl -X POST https://yourapp.com/api/v1/evm/manage/transfer-ownership \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0xYourTokenAddress",
"newOwner": "0xNewOwnerAddress"
}'{ "to": "0xTokenAddress", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" } }/api/v1/evm/liquidity/add-with-ethAdd Liquidity with ETH
Returns calldata for LiquidityHelper.addWithETH(), adding a token and ETH pair to a Uniswap-compatible pool. The caller must approve the token to the LiquidityHelper contract before broadcasting. Platform fee: 0.001 ETH (added to the ETH amount in value).
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| router | string | Required | DEX router address |
| token | string | Required | Token address to pair with ETH |
| amountTokenDesired | string | Required | Token amount to add (raw units, positive integer string) |
| amountTokenMin | string | Optional | Minimum token amount accepted (default: "0") |
| amountETHMin | string | Optional | Minimum ETH amount accepted in wei (default: "0") |
| ethAmount | string | Required | ETH to add as liquidity in wei (positive integer string) |
| to | string | Required | Address that receives the LP tokens |
| deadline | string | Optional | Unix timestamp deadline (default: 30 minutes from now) |
curl -X POST https://yourapp.com/api/v1/evm/liquidity/add-with-eth \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"router": "0xRouterAddress",
"token": "0xYourTokenAddress",
"amountTokenDesired": "1000000000000000000000",
"ethAmount": "500000000000000000",
"to": "0xYourWalletAddress"
}'{ "to": "0xLiquidityHelper", "data": "0x...", "value": "501000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" }, "network": "mainnet" }value field is 0.001 ETH fee + ethAmount. Send this exact value when broadcasting the transaction./api/v1/evm/liquidity/add-with-tokensAdd Liquidity with Tokens
Returns calldata for LiquidityHelper.addWithTokens(), adding two ERC-20 tokens as a pair to a Uniswap-compatible pool. The caller must approve both tokens to the LiquidityHelper before broadcasting. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| router | string | Required | DEX router address |
| tokenA | string | Required | First token address |
| tokenB | string | Required | Second token address |
| amountADesired | string | Required | Desired amount of tokenA (raw units) |
| amountBDesired | string | Required | Desired amount of tokenB (raw units) |
| amountAMin | string | Optional | Minimum tokenA accepted (default: "0") |
| amountBMin | string | Optional | Minimum tokenB accepted (default: "0") |
| to | string | Required | Address that receives the LP tokens |
| deadline | string | Optional | Unix timestamp deadline (default: 30 minutes from now) |
curl -X POST https://yourapp.com/api/v1/evm/liquidity/add-with-tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"router": "0xRouterAddress",
"tokenA": "0xTokenAAddress",
"tokenB": "0xTokenBAddress",
"amountADesired": "1000000000000000000000",
"amountBDesired": "500000000000000000000",
"to": "0xYourWalletAddress"
}'{ "to": "0xLiquidityHelper", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" }, "network": "mainnet" }/api/v1/evm/liquidity/remove-with-ethRemove Liquidity with ETH
Returns calldata for LiquidityHelper.removeWithETH(), removing liquidity from a token/ETH pair pool and receiving ETH and tokens back. The caller must approve the LP token to the LiquidityHelper before broadcasting. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| router | string | Required | DEX router address |
| token | string | Required | Token address in the pool |
| lpToken | string | Required | LP token address to burn |
| liquidity | string | Required | LP token amount to remove (raw units) |
| amountTokenMin | string | Optional | Minimum token amount to receive (default: "0") |
| amountETHMin | string | Optional | Minimum ETH amount to receive in wei (default: "0") |
| to | string | Required | Address to receive withdrawn assets |
| deadline | string | Optional | Unix timestamp deadline (default: 30 minutes from now) |
curl -X POST https://yourapp.com/api/v1/evm/liquidity/remove-with-eth \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"router": "0xRouterAddress",
"token": "0xYourTokenAddress",
"lpToken": "0xLpTokenAddress",
"liquidity": "100000000000000000",
"to": "0xYourWalletAddress"
}'{ "to": "0xLiquidityHelper", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" }, "network": "mainnet" }/api/v1/evm/liquidity/remove-with-tokensRemove Liquidity with Tokens
Returns calldata for LiquidityHelper.removeWithTokens(), removing liquidity from a token/token pair pool. The caller must approve the LP token to the LiquidityHelper before broadcasting. Platform fee: 0.001 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| router | string | Required | DEX router address |
| tokenA | string | Required | First token address in the pool |
| tokenB | string | Required | Second token address in the pool |
| lpToken | string | Required | LP token address to burn |
| liquidity | string | Required | LP token amount to remove (raw units) |
| amountAMin | string | Optional | Minimum tokenA to receive (default: "0") |
| amountBMin | string | Optional | Minimum tokenB to receive (default: "0") |
| to | string | Required | Address to receive withdrawn assets |
| deadline | string | Optional | Unix timestamp deadline (default: 30 minutes from now) |
curl -X POST https://yourapp.com/api/v1/evm/liquidity/remove-with-tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"router": "0xRouterAddress",
"tokenA": "0xTokenAAddress",
"tokenB": "0xTokenBAddress",
"lpToken": "0xLpTokenAddress",
"liquidity": "100000000000000000",
"to": "0xYourWalletAddress"
}'{ "to": "0xLiquidityHelper", "data": "0x...", "value": "1000000000000000", "fee": { "wei": "1000000000000000", "eth": "0.001" }, "network": "mainnet" }/api/v1/evm/locker/lockLock Tokens
Returns calldata for PinkLock02.lock(), locking ERC-20 or LP tokens until a future unlock date. The caller must approve the token amount to the PinkLock02 contract before broadcasting. Lock fee: 0.01 ETH (contract-enforced).
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| owner | string | Required | Address that owns and can unlock the lock |
| token | string | Required | Token address to lock |
| isLpToken | boolean | Required | true if locking an LP token |
| amount | string | Required | Amount to lock in raw token units (positive integer string) |
| unlockDate | number | Required | Future unix timestamp when tokens can be unlocked |
| description | string | Optional | Label shown on the lock explorer (default: "") |
curl -X POST https://yourapp.com/api/v1/evm/locker/lock \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"owner": "0x...",
"token": "0x...",
"isLpToken": false,
"amount": "1000000000000000000",
"unlockDate": 1800000000,
"description": "Team tokens"
}'{ "to": "0xPinkLock", "data": "0x...", "value": "10000000000000000", "fee": { "wei": "10000000000000000", "eth": "0.01" }, "network": "mainnet" }/api/v1/evm/locker/vesting-lockVesting Lock
Returns calldata for PinkLock02.vestingLock(), locking tokens with a TGE unlock and recurring cycle releases. Approve the token to PinkLock02 before broadcasting. Lock fee: 0.01 ETH.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| owner | string | Required | Address that owns the lock |
| token | string | Required | Token address to lock |
| isLpToken | boolean | Required | true if locking an LP token |
| amount | string | Required | Total amount to lock (raw units) |
| tgeDate | number | Required | Unix timestamp for the TGE unlock |
| tgeBps | number | Required | Percentage of tokens released at TGE in basis points (0 to 10000) |
| cycle | number | Required | Cycle duration in seconds |
| cycleBps | number | Required | Percentage released per cycle in basis points (0 to 10000) |
| description | string | Optional | Label shown on the lock explorer (default: "") |
curl -X POST https://yourapp.com/api/v1/evm/locker/vesting-lock \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"owner": "0x...",
"token": "0x...",
"isLpToken": false,
"amount": "1000000000000000000",
"tgeDate": 1750000000,
"tgeBps": 2000,
"cycle": 2592000,
"cycleBps": 1000,
"description": "Team vesting"
}'{ "to": "0xPinkLock", "data": "0x...", "value": "10000000000000000", "fee": { "wei": "10000000000000000", "eth": "0.01" }, "network": "mainnet" }/api/v1/evm/locker/unlockUnlock
Returns calldata for PinkLock02.unlock(), withdrawing unlocked tokens after the lock period or vesting cycle. No ETH fee is required. Only the lock owner can call this on-chain.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| lockId | string | Required | Lock ID to unlock (non-negative integer string) |
curl -X POST https://yourapp.com/api/v1/evm/locker/unlock \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"lockId": "1"
}'{ "to": "0xPinkLock", "data": "0x...", "value": "0", "network": "mainnet" }/api/v1/evm/locker/lock/:lockIdGet Lock by ID
Reads a single lock record from PinkLock02 by its numeric ID.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| Field | Type | Description |
|---|---|---|
| lockId | number | Numeric lock ID |
curl "https://yourapp.com/api/v1/evm/locker/lock/1?network=mainnet&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{ "network": "mainnet", "lock": { "id": "1", "token": "0x...", "owner": "0x...", "amount": "1000000000000000000", "lockDate": "1720000000", "tgeDate": "0", "tgeBps": "0", "cycle": "0", "cycleBps": "0", "unlockedAmount": "0", "description": "Team" } }/api/v1/evm/locker/by-tokenLocks by Token
Reads all lock records for a given token address from PinkLock02. If end is not provided the total lock count is fetched first.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| token | string | Required | Token address to query locks for |
| start | string | Optional | Start index (default: "0") |
| end | string | Optional | End index (default: total lock count for the token) |
curl "https://yourapp.com/api/v1/evm/locker/by-token?network=mainnet&token=0x...&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{
"network": "mainnet",
"token": "0x...",
"locks": [
{
"id": "1",
"token": "0x...",
"owner": "0x...",
"amount": "1000000000000000000",
"lockDate": "1720000000",
"tgeDate": "0",
"tgeBps": "0",
"cycle": "0",
"cycleBps": "0",
"unlockedAmount": "0",
"description": "Liquidity"
}
]
}/api/v1/evm/locker/by-userLocks by User
Reads all locks (normal tokens and LP tokens) owned by a given address from PinkLock02. Both normalLocksForUser and lpLocksForUser are fetched in parallel.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| user | string | Required | Owner address to query locks for |
curl "https://yourapp.com/api/v1/evm/locker/by-user?network=mainnet&user=0x...&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{ "network": "mainnet", "user": "0x...", "normalLocks": [], "lpLocks": [] }/api/v1/evm/bundle/buyBundle Buy
Executes buy transactions across multiple wallets against a Uniswap-compatible pool. The response is a Server-Sent Events stream. Fee: 0.001 ETH per wallet, charged after each successful swap.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenAddress | string | Required | Token to buy (EVM address) |
| wallets | object[] | Required | Array of { privateKey, ethAmount } objects. ethAmount is a human-readable ETH decimal string (e.g. "0.01") |
| network | string | Optional | "mainnet" or "testnet". Default: "mainnet" |
| jobId | string | Optional | Client-assigned job ID used with the Stop endpoint to abort remaining wallets |
| receivingAddress | string | Optional | Address that receives purchased tokens. Defaults to each buyer wallet |
| dex | string | Optional | "uniswap_v2" (default), "uniswap_v3", or "pancakeswap_v2" |
| feeTier | number | Optional | Uniswap V3 fee tier (e.g. 3000). Only used when dex="uniswap_v3" |
| callerWallet | string | Optional | EVM address. Accepted and validated but currently has no effect |
curl -X POST https://yourapp.com/api/v1/evm/bundle/buy \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
--no-buffer \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"tokenAddress": "0x...",
"wallets": [
{ "privateKey": "0x...", "ethAmount": "0.01" },
{ "privateKey": "0x...", "ethAmount": "0.01" }
],
"network": "mainnet",
"dex": "uniswap_v2",
"jobId": "my-job-1"
}'data: { "type": "started", "total": 3 }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "pending" }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "success", "txHash": "0x...", "ethAmount": "0.01" }
data: { "type": "wallet", "index": 1, "wallet": "0x...", "status": "failed", "error": "Insufficient ETH: have 0.0001, need 0.0015 (buy + fee + gas)" }
data: { "type": "done", "summary": { "total": 3, "success": 2, "failed": 1 } }Accept: text/event-stream. Each wallet emits two events: pending before the swap and success or failed after. If a jobId was supplied and Stop Bundle was called mid-run, remaining wallets emit status: "aborted". Private keys are never stored on the server./api/v1/evm/bundle/sellBundle Sell
Executes sell transactions across multiple wallets. The response is a Server-Sent Events stream. Fee: 0.001 ETH per wallet, charged after each successful swap.
| Field | Type | Required | Description |
|---|---|---|---|
| tokenAddress | string | Required | Token to sell (EVM address) |
| wallets | object[] | Required | Array of { privateKey, tokenAmountRaw } objects. tokenAmountRaw is a raw bigint string (e.g. "1000000000000000000"). Pass "0" or omit to sell the full token balance |
| tokenDecimals | number | Optional | Token decimals for human-readable output in the SSE events. Default: 18 |
| network | string | Optional | "mainnet" or "testnet". Default: "mainnet" |
| jobId | string | Optional | Client-assigned job ID used with the Stop endpoint to abort remaining wallets |
| receivingAddress | string | Optional | Address that receives the ETH proceeds. Defaults to each seller wallet |
| dex | string | Optional | "uniswap_v2" (default), "uniswap_v3", or "pancakeswap_v2" |
| feeTier | number | Optional | Uniswap V3 fee tier. Only used when dex="uniswap_v3" |
| callerWallet | string | Optional | EVM address. Accepted and validated but currently has no effect |
curl -X POST https://yourapp.com/api/v1/evm/bundle/sell \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
--no-buffer \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"tokenAddress": "0x...",
"wallets": [
{ "privateKey": "0x...", "tokenAmountRaw": "0" },
{ "privateKey": "0x...", "tokenAmountRaw": "500000000000000000" }
],
"network": "mainnet",
"dex": "uniswap_v2",
"jobId": "my-job-1"
}'data: { "type": "started", "total": 3 }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "pending" }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "success", "txHash": "0x...", "tokenAmount": "1.000000" }
data: { "type": "wallet", "index": 1, "wallet": "0x...", "status": "failed", "error": "No token balance" }
data: { "type": "done", "summary": { "total": 3, "success": 2, "failed": 1 } }Accept: text/event-stream. Each wallet emits two events: pending before the swap and success or failed after. If a jobId was supplied and Stop Bundle was called mid-run, remaining wallets emit status: "aborted". Private keys are never stored on the server./api/v1/evm/bundle/:jobId/stopStop Bundle
Signals a running bundle buy or sell job to stop processing remaining wallets.
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID supplied when starting the bundle stream |
| Field | Type | Required | Description |
|---|
curl -X POST https://yourapp.com/api/v1/evm/bundle/my-job-1/stop \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "rpcUrl": "YOUR_EVM_RPC_URL" }'{ "ok": true }/api/v1/evm/market-making/startStart Market Making
Starts a background market-making job that executes buy and sell trades across a pool according to the selected bot type. Returns a job ID immediately. Use the Volume Bot Status, Stop, and Recover endpoints to manage the job. Fee: 0.0001 ETH per trade.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token to market-make |
| callerWallet | string | Required | EVM address of the account initiating the job. Used to prevent duplicate jobs |
| walletPrivateKeys | string[] | Required | Array of private keys (hex strings, with or without 0x prefix) for the trading wallets |
| botType | string | Required | Trading mode: "Traffic" (balanced buys and sells), "Pull Up" (buy-heavy), or "Drop" (sell-heavy) |
| minEth | string | Required | Minimum ETH per trade as a decimal string (e.g. "0.001") |
| maxEth | string | Required | Maximum ETH per trade as a decimal string. Must be greater than or equal to minEth |
| intervalMs | number | Required | Minimum delay between trades in milliseconds (minimum 1000) |
| maxIntervalMs | number | Optional | Maximum delay between trades in milliseconds for random jitter |
| durationMinutes | number | Optional | Run the job for this many minutes then stop automatically. Omit to run indefinitely |
| maxTotalEth | string | Optional | Stop after this total ETH has been spent across all trades |
| spreadPercent | number | Optional | Price spread percentage used in Pull Up / Drop mode |
| dex | string | Optional | "uniswap_v2" (default), "uniswap_v3", or "pancakeswap_v2" |
| feeTier | number | Optional | Uniswap V3 fee tier. Only used when dex="uniswap_v3" |
| poolAddress | string | Optional | Accepted but currently has no effect |
curl -X POST https://yourapp.com/api/v1/evm/market-making/start \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0x...",
"callerWallet": "0x...",
"walletPrivateKeys": ["0x..."],
"botType": "Traffic",
"minEth": "0.001",
"maxEth": "0.005",
"intervalMs": 30000
}'{ "jobId": "evm-mm-1721234567890-a1b2c3d4" }jobId with the Volume Bot Status and Stop endpoints to poll progress and terminate early. Only one market-making or volume bot job per callerWallet can run at a time. On testnet, dex is always overridden to PancakeSwap V2./api/v1/evm/bot/find-poolsFind Pools
Discovers liquidity pools for a given token address across the configured DEXes on Robinhood Chain.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token to search pools for |
curl -X POST https://yourapp.com/api/v1/evm/bot/find-pools \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0x..."
}'{
"pools": [
{ "address": "0x...", "version": "v2", "tvl": null, "dex": "uniswap_v2" },
{ "address": "0x...", "version": "v3", "feeTier": 3000, "tvl": null, "dex": "uniswap_v3" }
],
"network": "mainnet",
"tokenAddress": "0x..."
}feeTier; V3 pools include it./api/v1/evm/bot/check-tradabilityCheck Tradability
Verifies a token is tradable on a DEX by simulating a small buy (0.001 ETH) using a live on-chain quote. Returns whether the trade would succeed and the estimated output amount. No fee is charged.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token to check |
| dex | string | Optional | "uniswap_v2" (default), "uniswap_v3", or "pancakeswap_v2" |
curl -X POST https://yourapp.com/api/v1/evm/bot/check-tradability \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0x...",
"dex": "uniswap_v2"
}'{ "isTradable": true, "estimatedOut": "5000000000000000000", "network": "mainnet", "tokenAddress": "0x...", "dex": "uniswap_v2" }{ "isTradable": true, "estimatedOut": "5000000000000000000", "feeTier": 3000, "network": "mainnet", "tokenAddress": "0x...", "dex": "uniswap_v3" }{ "isTradable": false, "reason": "No V2 pair found for this token", "network": "mainnet", "tokenAddress": "0x...", "dex": "uniswap_v2" }/api/v1/evm/bot/calc-makerCalc Makers
Returns gas reserve estimates and volume projections for the three bot modes (Volume, Booster, Advanced) given the requested number of wallets and budget. No fee is charged for this query.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| botType | string | Required | "volume", "booster", or "advanced" |
| makerCount | number | Required | Number of maker wallets (1 to 1000) |
| ethBudget | string | Optional | Total ETH budget as a decimal string. Required for Volume and Booster mode projections |
| advBuyMinEth | string | Optional | Minimum ETH per buy for Advanced mode |
| advBuyMaxEth | string | Optional | Maximum ETH per buy for Advanced mode |
| tokenDisposal | string | Optional | "auto-sell" (default) or "return-to-wallet" for Advanced mode |
| feeTier | number | Optional | Pool fee tier in bps (e.g. 3000 for 0.3%). Used for LP loss estimates. Default: 3000 |
| gasPriceMultiplier | number | Optional | Gas price multiplier: 1, 1.5, or 2. Default: 1 |
| dex | string | Optional | "uniswap_v2" (default) or "uniswap_v3" |
curl -X POST https://yourapp.com/api/v1/evm/bot/calc-maker \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"botType": "volume",
"makerCount": 10,
"ethBudget": "1",
"dex": "uniswap_v2"
}'{
"v_gas_swap_fees": "0.01 ETH", "v_gas_buffer": "0.01 ETH", "v_refunded_eth": "0.98 ETH", "v_generate_vol": "2 ETH",
"b_gas_swap_fees": "0.02 ETH", "b_gas_buffer": "0.02 ETH", "b_refunded_eth": "0.72 ETH", "b_generate_vol": "7 ETH",
"adv_gas_swap_fees": "0.01 ETH", "adv_gas_buffer": "0.01 ETH", "adv_refunded_eth": "0.94 ETH", "adv_generate_vol": "1 ETH",
"network": "mainnet", "gasPrice": "1000000000"
}" ETH" suffix (e.g. "0.01 ETH"). gasPrice is the effective gas price in wei as a decimal string. Projections for all three modes are returned in one call so the UI can compare them./api/v1/evm/bot/transfer-makerTransfer to Makers
Prepares a volume bot run by generating ephemeral maker wallets and computing the total ETH required. Returns an escrow address and total value in wei. Send that exact ETH amount to the escrow address, then call start-maker with the funding transaction hash.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| walletAddress | string | Required | Your EVM wallet address. Used to associate the pending job and prevent duplicate runs |
| tokenAddress | string | Required | Token to volume-trade |
| botType | string | Required | "volume", "booster", or "advanced" |
| makerCount | number | Required | Number of maker wallets (1 to 1000) |
| ethBudget | string | Optional | Total ETH budget as a decimal string. Required for Volume and Booster mode |
| advBuyMinEth | string | Optional | Minimum ETH per buy. Required for Advanced mode |
| advBuyMaxEth | string | Optional | Maximum ETH per buy. Required for Advanced mode |
| tokenDisposal | string | Optional | "auto-sell" (default) or "return-to-wallet". Advanced mode only |
| botSpeed | string | Optional | Trade pacing: "NORMAL" (default), "FAST", or "SLOW" |
| gasPriceMultiplier | number | Optional | 1, 1.5, or 2. Default: 1 |
| slippageBps | number | Optional | Slippage in basis points. Default: 100 (1%) |
| dex | string | Optional | "uniswap_v2" (default) or "uniswap_v3" |
| feeTier | number | Optional | Uniswap V3 fee tier. Only used when dex="uniswap_v3" |
| advDelayMinMs | number | Optional | Min delay between Advanced mode cycles in ms. Default: 1000 |
| advDelayMaxMs | number | Optional | Max delay between Advanced mode cycles in ms. Default: 5000 |
| poolAddress | string | Optional | Specific pool address to use for trading. If omitted, the bot selects a pool automatically |
curl -X POST https://yourapp.com/api/v1/evm/bot/transfer-maker \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"walletAddress": "0x...",
"tokenAddress": "0x...",
"botType": "volume",
"makerCount": 10,
"ethBudget": "1"
}'{ "escrowAddress": "0x...", "valueWei": "100000000000000000" }valueWei ETH (or within 1% tolerance) to escrowAddress. Then call start-maker with your transaction hash. Pending jobs expire if start-maker is not called within 30 minutes./api/v1/evm/bot/start-makerStart Bot
Verifies the funding transaction on-chain and launches the background volume bot job. Returns a job ID immediately. Call transfer-maker first to get the escrow address and value, fund it, then call this endpoint with the transaction hash.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| walletAddress | string | Required | Your EVM wallet address. Must match the address used in transfer-maker |
| txHash | string | Required | Hash of the ETH transfer transaction sent to the escrow address |
curl -X POST https://yourapp.com/api/v1/evm/bot/start-maker \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"walletAddress": "0x...",
"txHash": "0x..."
}'{ "jobId": "evm-1721234567890-a1b2c3d4" }jobId with the Status and Stop endpoints to monitor and control the running bot./api/v1/evm/bot/:jobId/statusBot Status
Returns the current status and trade count for a running volume bot job.
| Field | Type | Required | Description |
|---|
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID from the start-maker stream |
curl "https://yourapp.com/api/v1/evm/bot/JOB_ID/status?network=mainnet&rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{ "status": "running", "tradesExecuted": 12, "logs": [] }status is one of "running", "stopped", "error", or "idle" (if the job ID is unknown). logs is an array of recent trade log entries./api/v1/evm/bot/:jobId/stopStop Bot
Signals a running volume bot job to stop after the current trade completes.
| Field | Type | Required | Description |
|---|
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID to stop |
curl -X POST https://yourapp.com/api/v1/evm/bot/JOB_ID/stop \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "rpcUrl": "YOUR_EVM_RPC_URL" }'{ "ok": true }{ "ok": true } even if the job is not currently running. The bot will finish its current trade cycle before stopping./api/v1/evm/bot/recover-ethRecover ETH
Sweeps all ETH from the maker and escrow wallets belonging to a wallet address back to that wallet. Works for both pending jobs (funded but not started) and completed or stopped active jobs.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| walletAddress | string | Required | Your EVM wallet address. All maker wallets belonging to this address are swept back to it |
curl -X POST https://yourapp.com/api/v1/evm/bot/recover-eth \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"walletAddress": "0x..."
}'{ "ok": true, "recoveredWei": "5000000000000000" }{ "ok": true, "recoveredWei": "0", "message": "No maker wallets found to sweep." }recoveredWei is a decimal string of the total ETH swept in wei. An optional message field is included when no wallets were found to sweep./api/v1/evm/holders/airdrop/startAirdrop Start
Airdrops tokens from a source wallet to multiple freshly generated addresses to increase the holder count. Returns a Server-Sent Events stream. The first event includes the generated wallet list with private keys so the client can save a CSV before any transaction is sent.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token to airdrop |
| sourceWalletPrivateKey | string | Required | Private key of the wallet that holds the tokens and pays fees |
| jobId | string | Optional | Client-supplied job ID for stop and pause control |
| numberOfWallets | number | Optional | Number of new holder addresses to generate. Default 4, max 5000 |
| tokensPerWallet | string | Optional | Fixed token amount per address as a decimal string. If omitted, a random amount between minTokensPerWallet and maxTokensPerWallet is used |
| minTokensPerWallet | string | Optional | Minimum token amount when randomizing. Default 100 |
| maxTokensPerWallet | string | Optional | Maximum token amount when randomizing. Default 1000 |
curl -X POST https://yourapp.com/api/v1/evm/holders/airdrop/start \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
--no-buffer \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0x...",
"sourceWalletPrivateKey": "0x...",
"numberOfWallets": 10,
"minTokensPerWallet": "100",
"maxTokensPerWallet": "500"
}'data: { "type": "started", "jobId": "abc123", "count": 10, "wallets": [{ "address": "0x...", "privateKey": "0x..." }] }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "holding", "transferSig": "0x...", "tokenAmount": "500.0" }
data: { "type": "wallet", "index": 1, "wallet": "0x...", "status": "failed", "error": "..." }
data: { "type": "done", "summary": { "total": 10, "active": 9, "failed": 1 } }started event is emitted immediately with all generated wallet private keys so the client can save them before any transaction is sent. A service fee of 0.0001 ETH per wallet is then collected before transfers begin./api/v1/evm/holders/startHolders Start
Generates new wallets, funds each with ETH from the funding wallet, and swaps into the token so each address becomes a unique on-chain holder. Returns a Server-Sent Events stream. The first event includes the generated wallet list with private keys.
| Field | Type | Required | Description |
|---|---|---|---|
| network | string | Required | "mainnet" or "testnet" |
| tokenAddress | string | Required | Token to buy |
| fundingWalletPrivateKey | string | Required | Private key of the wallet that funds each holder and pays fees |
| jobId | string | Optional | Client-supplied job ID for stop or pause control |
| numberOfWallets | number | Optional | Number of holder wallets to generate. Default 4, max 5000 |
| ethPerWallet | string | Optional | Fixed ETH amount per wallet as a decimal string (e.g. "0.05"). If omitted, a random amount between minEthPerWallet and maxEthPerWallet is used |
| minEthPerWallet | string | Optional | Minimum ETH when randomizing. Default 0.01 |
| maxEthPerWallet | string | Optional | Maximum ETH when randomizing. Default 0.1 |
| slippageBps | number | Optional | Slippage tolerance in basis points. Default 1000 (10%) |
| dex | string | Optional | "uniswap_v2", "pancakeswap_v2", or "uniswap_v3". Mainnet only; testnet always uses PancakeSwap V2. Default "uniswap_v2" |
| feeTier | number | Optional | Uniswap V3 fee tier (e.g. 3000, 500, 10000). Default 3000. Ignored for V2 DEXes |
curl -X POST https://yourapp.com/api/v1/evm/holders/start \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
--no-buffer \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"network": "mainnet",
"tokenAddress": "0x...",
"fundingWalletPrivateKey": "0x...",
"numberOfWallets": 10,
"minEthPerWallet": "0.01",
"maxEthPerWallet": "0.05",
"dex": "uniswap_v2"
}'data: { "type": "started", "jobId": "abc123", "count": 10, "wallets": [{ "address": "0x...", "privateKey": "0x..." }] }
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "holding", "buySig": "0x...", "ethAmount": "0.05" }
data: { "type": "wallet", "index": 1, "wallet": "0x...", "status": "failed", "error": "..." }
data: { "type": "done", "summary": { "total": 10, "active": 9, "failed": 1 } }started event is emitted immediately with all generated wallet private keys so the client can save them before any ETH moves. A service fee of 0.0001 ETH per wallet is then collected before swaps begin. On testnet, dex is always overridden to PancakeSwap V2 regardless of the value supplied./api/v1/evm/holders/:jobId/stopStop Holders Job
Stops a running holders job after the current wallet completes.
| Field | Type | Required | Description |
|---|
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID to stop |
curl -X POST https://yourapp.com/api/v1/evm/holders/JOB_ID/stop \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "rpcUrl": "YOUR_EVM_RPC_URL" }'{ "ok": true }{ "ok": true } even if the job ID is not found or the job is not currently running./api/v1/evm/holders/:jobId/pausePause Holders Job
Pauses a running holders job. The job resumes from where it left off when resumed.
| Field | Type | Required | Description |
|---|
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID to pause |
curl -X POST https://yourapp.com/api/v1/evm/holders/JOB_ID/pause \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "rpcUrl": "YOUR_EVM_RPC_URL" }'{ "ok": true }/api/v1/evm/holders/:jobId/resumeResume Holders Job
Resumes a paused holders job.
| Field | Type | Required | Description |
|---|
| Field | Type | Description |
|---|---|---|
| jobId | string | Job ID to resume |
curl -X POST https://yourapp.com/api/v1/evm/holders/JOB_ID/resume \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{ "rpcUrl": "YOUR_EVM_RPC_URL" }'{ "ok": true }/api/v1/evm/pons/balancesCheck Balances
Returns the ETH balance for a list of addresses on the Robinhood Chain. Balances are returned in wei as decimal strings. Proxied through the backend to avoid CORS issues when calling the RPC from the browser.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Robinhood Chain RPC endpoint URL |
| addresses | array | Required | Array of EVM addresses to check |
| network | string | Optional | "mainnet" or "testnet". Defaults to "mainnet" |
curl -X POST https://yourapp.com/api/v1/evm/pons/balances \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"addresses": ["0xAbc...", "0xDef..."],
"network": "mainnet"
}'{
"balances": {
"0xAbc...": "1000000000000000000",
"0xDef...": "500000000000000000"
}
}"0".Create Pons Token
Launches a token on the Pons Launchpad on Robinhood Chain. Two endpoints support the creation flow: optionally upload a logo to IPFS before deploying, then optionally execute the bundle buy so that multiple wallets acquire the token immediately at launch. The bundle wallets step is optional. Skipping it still deploys the token but no coordinated wallets buy in.
Step 2: Deploy the token via the Pons Launchpad on-chain, passing the logo URL and token metadata.
Step 3 (optional): Call bundle buy right after deployment to have up to 25 additional wallets buy the token via Uniswap V3. Each wallet spends its own ETH amount. Fee is 0.002 ETH per wallet, charged to the first wallet before any swaps execute.
/api/v1/evm/pons/upload-logoUploads a base64-encoded image to IPFS via Pinata. Returns the public IPFS URL to use as the logo field when deploying the token. Maximum image size is 5 MB.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Robinhood Chain RPC endpoint URL |
| imageBase64 | string | Required | Image as a base64 data URL, e.g. "data:image/png;base64,iVBORw0..." |
| filename | string | Optional | Filename hint for the IPFS pin. Defaults to "logo.png" |
curl -X POST https://yourapp.com/api/v1/evm/pons/upload-logo \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"imageBase64": "data:image/png;base64,iVBORw0...",
"filename": "logo.png"
}'{ "url": "https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco" }/api/v1/evm/pons/bundle-buyAfter the token is deployed, call this endpoint to have up to 25 wallets buy the token via Uniswap V3 in sequence. Each wallet sends its own ETH amount in a separate swap. The first wallet in the array pays the platform fee (0.002 ETH multiplied by the total number of wallets) before any swaps start. The response is a Server-Sent Events stream reporting the fee transaction and each wallet's swap result.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Robinhood Chain RPC endpoint URL |
| tokenAddress | string | Required | Deployed Pons token contract address |
| poolFee | number | Required | Uniswap V3 pool fee tier from the Pons launch config. Must be 100, 500, 3000, or 10000 |
| wallets | array | Required | Array of { privateKey: string, ethAmount: string } objects. Max 25 wallets. The first wallet also pays the fee |
| network | string | Optional | "mainnet" or "testnet". Defaults to "mainnet" |
| slippage | number | Optional | Maximum slippage percentage. Defaults to 10. Clamped between 0.1 and 50 |
| callerWallet | string | Optional | Accepted but currently has no effect |
curl -X POST https://yourapp.com/api/v1/evm/pons/bundle-buy \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
--no-buffer \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"tokenAddress": "0x...",
"poolFee": 10000,
"wallets": [
{ "privateKey": "0x...", "ethAmount": "0.1" },
{ "privateKey": "0x...", "ethAmount": "0.05" },
{ "privateKey": "0x...", "ethAmount": "0.05" }
],
"network": "mainnet",
"slippage": 10
}'// Stream begins immediately; confirms total wallet count
data: { "type": "started", "total": 3 }
// Fee paid by wallet[0] before any swaps (0.002 ETH x 3 wallets)
data: { "type": "fee", "txHash": "0x...", "fee": "0.006" }
// Per-wallet swap result (success)
data: { "type": "wallet", "index": 0, "wallet": "0x...", "status": "success", "txHash": "0x...", "ethAmount": "0.1", "tokenAmount": "12345.6" }
// Per-wallet swap result (failed)
data: { "type": "wallet", "index": 1, "wallet": "0x...", "status": "failed", "error": "Transaction reverted on-chain" }
// All wallets processed
data: { "type": "done", "summary": { "total": 3, "success": 2, "failed": 1 } }Accept: text/event-stream. All messages arrive as data: lines; distinguish them by the type field. If the fee transaction from wallet[0] reverts, no swaps execute and the stream ends with a type: "error" event. Private keys are never stored on the server./api/v1/evm/pons/configPons Config
Returns the Pons Launchpad contract addresses for both mainnet and testnet. No network filter is applied; both environments are always returned in a single response.
| Field | Type | Required | Description |
|---|---|---|---|
| rpcUrl | string | Required | Robinhood Chain RPC endpoint URL |
curl "https://yourapp.com/api/v1/evm/pons/config?rpcUrl=YOUR_EVM_RPC_URL" \
-H "x-api-key: YOUR_API_KEY"{
"mainnet": {
"factory": "0x...",
"locker": "0x..."
},
"testnet": {
"factory": "0x...",
"locker": "0x..."
}
}/api/v1/evm/wallets/generateGenerate EVM Wallets
Generates one or more EVM wallet keypairs (address and private key). Useful for creating maker or bundle wallets before a bot run. Keys are generated in-memory and never stored on the server.
| Field | Type | Required | Description |
|---|---|---|---|
| count | number | Required | Number of wallets to generate (1 to 100) |
curl -X POST https://yourapp.com/api/v1/evm/wallets/generate \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"rpcUrl": "YOUR_EVM_RPC_URL",
"count": 5
}'{ "wallets": [ { "address": "0x...", "privateKey": "0x..." } ] }/api/v1/pump/bundlePump.fun Bundle Launch
Uploads token metadata to IPFS, creates a new Pump.fun token, and builds pre-signed buy transactions for up to 12 bundle wallets. Everything is built directly against the Pump.fun on-chain program with no external API dependency. Platform fee: 0.01 SOL per bundle wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Token name |
| symbol | string | Required | Token symbol |
| imageBase64 | string | Required | Base64-encoded image (data URI data:image/png;base64,... or raw base64) |
| deployerPublicKey | string | Required | Deployer wallet public key (base58). This wallet signs the create transaction. |
| description | string | Optional | Token description |
| string | Optional | Twitter URL | |
| telegram | string | Optional | Telegram URL |
| website | string | Optional | Website URL |
| discord | string | Optional | Discord URL |
| deployerBuySol | number | Optional | Deployer initial buy amount in SOL. Default: 0 (skip). When provided, a separate unsigned deployer buy transaction is returned. |
| bundleWallets | object[] | Optional | Array of {"secretKey": "base58key", "solAmount": 0.1}. Up to 12 wallets. Each wallet receives one pre-signed VersionedTransaction. |
| mayhemMode | boolean | Optional | Enable Token-2022 path with Mayhem reserved fee recipient. Default: false |
| cashback | boolean | Optional | Enable creator reward cashback to traders. Default: false |
| vanityMintSecretKey | string | Optional | Base58-encoded secret key for a vanity mint address. A random keypair is generated if omitted. |
curl -X POST https://yourapp.com/api/v1/pump/bundle \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"name": "My Token",
"symbol": "MTK",
"imageBase64": "data:image/png;base64,iVBORw...",
"deployerPublicKey": "YourDeployerWallet",
"deployerBuySol": 0.5,
"bundleWallets": [
{ "secretKey": "base58secretkey1", "solAmount": 0.2 },
{ "secretKey": "base58secretkey2", "solAmount": 0.15 }
]
}'{
"mintPublicKey": "NewMintAddress...",
"metadataUri": "https://ipfs.io/ipfs/QmXyz...",
"createTx": "AQAAAA...",
"createBlockhash": "9WjABC...",
"createLastValidBlockHeight": 289540012,
"deployerBuyTx": "AQAAAB...",
"deployerBuyBlockhash": "9WjDEF...",
"deployerBuyLastValidBlockHeight": 289540100,
"bundleTxs": [
{
"walletAddress": "BundleWallet1...",
"signedTx": "AgAAAA...",
"blockhash": "9WjXYZ...",
"lastValidBlockHeight": 289540015
}
]
}createTx is partially signed by the mint keypair. Add the deployer wallet signature before submitting. deployerBuyTx, deployerBuyBlockhash, and deployerBuyLastValidBlockHeight are omitted when deployerBuySol is 0 or not supplied. Each element of bundleTxs is an object with walletAddress, signedTx (pre-signed VersionedTransaction base64), blockhash, and lastValidBlockHeight. Submit the create transaction and wait for confirmation before submitting deployer buy or bundle transactions./api/v1/multisender/sendMulti Send
Builds an unsigned transaction that sends SOL or an SPL token from one wallet to multiple recipients in a single transaction. Your wallet signs and broadcasts the transaction. Platform fee: 0.00005 SOL per recipient.
| Field | Type | Required | Description |
|---|---|---|---|
| feePayer | string | Required | Wallet sending funds and paying transaction fees (base58) |
| recipients | object[] | Required | SOL send: [{"address":"Wallet...", "lamports": 1000000}] or [{"address":"Wallet...", "amountSol": 0.001}]. Token send: [{"address":"Wallet...", "amount": "1000000"}] in base units. |
| tokenMint | string | Optional | SPL token mint address. Omit to send native SOL. When provided, recipient ATAs are created automatically if they do not exist. |
curl -X POST https://yourapp.com/api/v1/multisender/send \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"feePayer": "YourWalletPublicKey",
"recipients": [
{ "address": "Wallet1...", "amountSol": 0.1 },
{ "address": "Wallet2...", "amountSol": 0.05 }
]
}'{
"transaction": "AQAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012,
"platformFee": 5000
}Transaction.from(Buffer.from(transaction, 'base64')), sign with your wallet, then broadcast./api/v1/multisender/collectMulti Collect
Sweeps SOL and SPL tokens from multiple source wallets into a single target address. Optionally closes SPL token accounts and reclaims their rent. The server signs each source wallet transaction with the provided secret keys and returns pre-signed transactions ready to broadcast. Platform fee: 0.00005 SOL per source wallet.
| Field | Type | Required | Description |
|---|---|---|---|
| targetAddress | string | Required | Destination wallet that receives all collected funds (base58) |
| sources | object[] | Required | Array of source wallet objects (see below) |
| sources[].secretKey | string | Required | Base58-encoded secret key of the source wallet |
| sources[].collectSol | boolean | Optional | Sweep SOL balance to target. Default: true |
| sources[].closeTokenAccounts | string[] | Optional | Array of token mint addresses whose ATAs to close and sweep to target. Rent from closed accounts is factored into the SOL sweep. |
curl -X POST https://yourapp.com/api/v1/multisender/collect \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"rpcUrl": "https://api.mainnet-beta.solana.com",
"targetAddress": "TargetWalletPublicKey",
"sources": [
{
"secretKey": "base58secretkey1",
"collectSol": true,
"closeTokenAccounts": ["TokenMint1...", "TokenMint2..."]
},
{
"secretKey": "base58secretkey2",
"collectSol": true
}
]
}'{
"transactions": [
{
"sourceAddress": "Source1Wallet...",
"transaction": "AQAAAA...",
"blockhash": "9WjABC...",
"lastValidBlockHeight": 289540012
}
]
}API Sitemap
All available endpoints grouped by category.
Getting Started
| Page | Description |
|---|---|
| Introduction | Overview of the API, transaction model, and versioned vs legacy transactions |
| Quick Start | Create a token end-to-end in three API calls |
| Authentication | API key authentication and wallet-signature authentication |
| Rate Limits | 300 requests per minute per key |
| Errors | HTTP status codes and error response format |
| Pricing | All fees at the API rate (50% discount) |
| API Sitemap | This page |
Key Management
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/keys | List all API keys for the authenticated wallet |
| POST | /api/keys | Create a new API key |
| PATCH | /api/keys/:id | Rename an existing API key |
| DELETE | /api/keys/:id | Permanently revoke an API key |
| GET | /api/keys/:id/usage | Usage statistics for a specific key |
Token
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/token/upload-metadata | Upload token image and metadata JSON to IPFS |
| POST | /api/v1/token/vanity | Generate a vanity mint address with prefix or suffix |
| POST | /api/v1/token/build-create | Build a create-token transaction |
| GET | /api/v1/token/fetch-metadata | Fetch on-chain Metaplex metadata for any token by mint address |
Manage Token
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/manage/burn/build | Burn a specified amount of tokens |
| POST | /api/v1/manage/revoke-authority/build | Revoke mint, freeze, or update authority |
| POST | /api/v1/manage/freeze/build | Freeze a token account |
| POST | /api/v1/manage/unfreeze/build | Unfreeze a previously frozen token account |
| POST | /api/v1/manage/mint/build | Mint additional tokens to a destination wallet |
Raydium
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/raydium/openbook/create | Create an OpenBook V3 market (required for AMM V4) |
| POST | /api/v1/raydium/liquidity/create | Create a CPMM pool with initial liquidity |
| POST | /api/v1/raydium/liquidity/create-amm | Create an AMM V4 pool |
| POST | /api/v1/raydium/preview-liquidity | Preview add-liquidity amounts before committing |
| POST | /api/v1/raydium/add-liquidity | Add liquidity to a CPMM or AMM V4 pool |
| POST | /api/v1/raydium/liquidity/remove | Remove liquidity from a pool |
| POST | /api/v1/raydium/burn-lp | Permanently burn LP tokens |
| GET | /api/v1/raydium/cpmm-pool-by-token | Find a CPMM pool by token mint address |
| GET | /api/v1/raydium/ammv4-pool-by-token | Find an AMM V4 pool by token mint address |
| POST | /api/v1/raydium/launchlab-bundle | Launch on Raydium LaunchLab with bundle wallets |
| POST | /api/v1/raydium/letsbonk-bundle | Launch on LetsBonk via Raydium LaunchLab with bundle wallets |
| POST | /api/v1/raydium/volume-bot/start | Start a Raydium volume bot alternating buy and sell trades |
| GET | /api/v1/raydium/volume-bot/:jobId | Get current status of a running Raydium volume bot job |
| POST | /api/v1/raydium/volume-bot/:jobId/stop | Stop a running Raydium volume bot job |
Meteora
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/meteora/create-pool | Create a Meteora DLMM or CPMM pool |
| POST | /api/v1/meteora/pool-info | Get pool configuration and current reserves |
| POST | /api/v1/meteora/preview-liquidity | Preview liquidity addition amounts |
| POST | /api/v1/meteora/add-liquidity | Add liquidity to a Meteora pool |
| POST | /api/v1/meteora/remove-liquidity | Remove liquidity from a Meteora pool |
| GET | /api/v1/meteora/pool-by-token | Find a Meteora pool by token mint address |
PumpSwap
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/pumpswap/pool-info | Get PumpSwap pool details and reserves |
| POST | /api/v1/pumpswap/create-pool | Create a PumpSwap pool with initial liquidity |
| POST | /api/v1/pumpswap/preview-liquidity | Preview liquidity amounts before committing |
| POST | /api/v1/pumpswap/add-liquidity | Add liquidity to a PumpSwap pool |
| POST | /api/v1/pumpswap/remove-liquidity | Remove liquidity from a PumpSwap pool |
| GET | /api/v1/pumpswap/pool-by-token | Find a PumpSwap pool by token mint address |
| POST | /api/v1/pumpswap/pools-by-lp | Find PumpSwap pools by LP token mint address |
Token Locker
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/locker/create | Lock SPL or LP tokens with a vesting schedule |
| POST | /api/v1/locker/unlock | Unlock tokens after the vesting period |
| GET | /api/v1/locker/lock/:vestingAccount | Get lock info for a vesting account |
| POST | /api/v1/locker/save-meta | Attach display metadata to a lock |
| GET | /api/v1/locker/by-mint | Find all locks by token mint address |
Recover Rent
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/rent/closeable/:wallet | Find empty token accounts that can be closed |
| POST | /api/v1/rent/close/build | Build a transaction to close accounts and recover rent |
Assets and Wallets
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/assets/get-asset | Get token holdings and SOL balance for a wallet |
| POST | /api/v1/wallets/generate | Generate keypairs in bulk |
| POST | /api/v1/wallets/vanity | Find a vanity wallet address with a prefix or suffix |
Bundle Trading
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/dex/bundle-buy/build | Build unsigned buy transactions for multiple wallets |
| POST | /api/v1/dex/bundle-sell/build | Build unsigned sell transactions for multiple wallets |
| POST | /api/v1/dex/bundle/submit | Submit a bundle to Jito block engine |
Volume Bot
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/dex/volume-bot/estimate | Estimate cost for a volume bot run |
| POST | /api/v1/dex/volume-bot/setup | Create and fund volume bot wallets |
| POST | /api/v1/dex/volume-bot/start | Start the volume bot job |
| GET | /api/v1/dex/volume-bot/:jobId | Get current status of a running bot |
| POST | /api/v1/dex/volume-bot/:jobId/stop | Stop a running volume bot |
| DELETE | /api/v1/dex/volume-bot/pending | Delete a pending setup that was never started |
| POST | /api/v1/dex/volume-bot/recover | Recover unused SOL from bot wallets |
Pump.fun
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/pump/bundle | Create a Pump.fun token and pre-sign bundle wallet buy transactions |
Multi Sender
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/multisender/send | Build a multi-recipient SOL or SPL token send transaction |
| POST | /api/v1/multisender/collect | Sweep SOL and close token accounts from multiple wallets into one destination |
Claim Dev Fees
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/claim-fees/balances/:wallet | Get claimable creator fee balances for Pump.fun and LaunchLab |
| POST | /api/v1/claim-fees/build | Build an unsigned transaction to claim creator fees and pay the platform fee |
EVM / Robinhood Chain
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/evm/config | Get chain configuration and contract addresses |
| GET | /api/v1/evm/fee | Estimate deployment fee for chosen token features |
| POST | /api/v1/evm/deploy-token | Deploy an ERC-20 token with optional tax, anti-bot, and anti-whale modules |
| POST | /api/v1/evm/multisend | Send ETH or ERC-20 tokens to multiple recipients |
| POST | /api/v1/evm/verify-token | Submit contract source for verification on the block explorer |
EVM Manage Token
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/manage/open-trading | Enable public transfers on the token contract |
| POST | /api/v1/evm/manage/set-tax | Update buy tax, sell tax, and tax recipient |
| POST | /api/v1/evm/manage/set-limits | Set max wallet and max transaction size limits |
| POST | /api/v1/evm/manage/remove-limits | Disable max wallet and max transaction restrictions |
| POST | /api/v1/evm/manage/set-blacklist | Add or remove an address from the transfer blacklist |
| POST | /api/v1/evm/manage/set-dex-pair | Register or deregister a DEX pair address |
| POST | /api/v1/evm/manage/set-exemptions | Grant or revoke fee and limit exemptions for an address |
| POST | /api/v1/evm/manage/set-paused | Pause or unpause all token transfers |
| POST | /api/v1/evm/manage/mint | Mint new tokens to a recipient address |
| POST | /api/v1/evm/manage/burn | Burn tokens from the caller's own balance |
| POST | /api/v1/evm/manage/renounce-ownership | Permanently remove the owner (irreversible) |
| POST | /api/v1/evm/manage/transfer-ownership | Transfer the owner role to a new address |
EVM Liquidity
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/liquidity/add-with-eth | Calldata for adding token and ETH liquidity to a pool |
| POST | /api/v1/evm/liquidity/add-with-tokens | Calldata for adding two ERC-20 tokens as liquidity |
| POST | /api/v1/evm/liquidity/remove-with-eth | Calldata for removing token and ETH liquidity |
| POST | /api/v1/evm/liquidity/remove-with-tokens | Calldata for removing two-token liquidity |
EVM Token Locker
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/locker/lock | Calldata for locking tokens until a future date via PinkLock02 |
| POST | /api/v1/evm/locker/vesting-lock | Calldata for a vesting lock with TGE and cycle releases |
| POST | /api/v1/evm/locker/unlock | Calldata for unlocking tokens after the lock period |
| GET | /api/v1/evm/locker/lock/:lockId | Read a single lock record from the chain |
| GET | /api/v1/evm/locker/by-token | Read all locks for a given token address |
| GET | /api/v1/evm/locker/by-user | Read all locks (normal and LP) owned by a given address |
EVM Bundle
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/bundle/buy | Execute coordinated buy transactions across multiple wallets (SSE) |
| POST | /api/v1/evm/bundle/sell | Execute coordinated sell transactions across multiple wallets (SSE) |
| POST | /api/v1/evm/bundle/:jobId/stop | Stop a running bundle job |
EVM Market Making
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/market-making/start | Start a market-making job alternating buy and sell trades (SSE) |
EVM Volume Bot
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/bot/find-pools | Discover liquidity pools for a token |
| POST | /api/v1/evm/bot/check-tradability | Verify a token can be bought and sold |
| POST | /api/v1/evm/bot/calc-maker | Calculate maker wallet count and ETH needed for target volume |
| POST | /api/v1/evm/bot/transfer-maker | Fund maker wallets from a funder wallet |
| POST | /api/v1/evm/bot/start-maker | Start the volume bot job (SSE) |
| GET | /api/v1/evm/bot/:jobId/status | Get current status of a running volume bot job |
| POST | /api/v1/evm/bot/:jobId/stop | Stop a running volume bot job |
| POST | /api/v1/evm/bot/recover-eth | Sweep residual ETH from maker wallets to a collector address |
EVM Increase Holders
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/holders/airdrop/start | Airdrop tokens to generated addresses to increase holder count (SSE) |
| POST | /api/v1/evm/holders/start | Start a holder-increase buy job (SSE) |
| POST | /api/v1/evm/holders/:jobId/stop | Stop a running holders job |
| POST | /api/v1/evm/holders/:jobId/pause | Pause a running holders job |
| POST | /api/v1/evm/holders/:jobId/resume | Resume a paused holders job |
EVM Pons Bundle
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/pons/balances | Get ETH and token balances for a list of wallets |
| POST | /api/v1/evm/pons/bundle-buy | Execute a coordinated bundle buy on Pons Launchpad (SSE) |
| POST | /api/v1/evm/pons/upload-logo | Upload a token logo to Pons IPFS |
| POST | /api/v1/evm/pons/vanity-search | Find a token address with a desired prefix |
| GET | /api/v1/evm/pons/config | Get Pons Launchpad contract addresses and configuration |
EVM Wallets
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/evm/wallets/generate | Generate EVM wallet keypairs in bulk (1 to 100) |