POST /trading/instant/sell
Exit token positions from a single wallet or up to 100 wallets simultaneously. Each wallet signs its own transaction independently. Transactions target the same block for consistent execution.
Quick Start
cURL
TypeScript
Rust
Go
Python
curl -X POST https://api.launchpad.trade/trading/instant/sell \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tokenAddress": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"privateKeys": ["YOUR_PRIVATE_KEY"],
"amount": {
"type": "PERCENT",
"mode": "FIXED",
"value": 100
}
}'
Priority fee defaults to FAST (0.00015 SOL). See all parameters , amount types , and amount modes below.
Parameters
Required
Parameter Type Description tokenAddressstring Solana token address to sell privateKeysstring[] Private keys of the wallets. Min 1, max 50. Required for all modes except CUSTOM amountobject Amount configuration. See Amount Types and Amount Modes below
Conditional
Parameter Type Description walletsobject[] Wallets with individual amounts ({ privateKey, amount }). Required when amount.mode is CUSTOM — replaces privateKeys
Optional
Parameter Type Default Description priorityFeeobject FAST (0.00015 SOL) Transaction priority level. See Priority Fee platformTagobject | false No attribution Tag transactions with a DEX source. See Platform Attribution
Amount Types
Sell amounts require a type field that determines the unit.
Type Unit Description PERCENT0.01 – 100 Sell a percentage of your token balance TOKENToken count Sell a specific number of tokens
PERCENT is convenient — just specify a percentage of your balance. TOKEN is faster but requires the exact token count.
When you sell 100% of a token, the Associated Token Account (ATA) is closed automatically and the rent SOL (~0.002 SOL) is returned to your wallet.
Amount Modes
Three modes to control how sell amounts are distributed across wallets.
Each wallet sells the same amount . Sell 100% of tokens: {
"amount" : {
"type" : "PERCENT" ,
"mode" : "FIXED" ,
"value" : 100
}
}
Sell 1,000,000 tokens: {
"amount" : {
"type" : "TOKEN" ,
"mode" : "FIXED" ,
"value" : 1000000
}
}
Each wallet sells a random amount between min and max. Sell between 50% and 100%: {
"amount" : {
"type" : "PERCENT" ,
"mode" : "RANGE" ,
"min" : 50 ,
"max" : 100
}
}
Sell between 500K and 2M tokens: {
"amount" : {
"type" : "TOKEN" ,
"mode" : "RANGE" ,
"min" : 500000 ,
"max" : 2000000
}
}
Per-wallet amounts . Uses the wallets array instead of privateKeys.Custom percentages: {
"wallets" : [
{ "privateKey" : "5K7gT..." , "amount" : 25 },
{ "privateKey" : "3Jd8f..." , "amount" : 50 },
{ "privateKey" : "9Pm2x..." , "amount" : 100 }
],
"amount" : {
"type" : "PERCENT" ,
"mode" : "CUSTOM"
}
}
Custom token counts: {
"wallets" : [
{ "privateKey" : "5K7gT..." , "amount" : 500000 },
{ "privateKey" : "3Jd8f..." , "amount" : 1500000 },
{ "privateKey" : "9Pm2x..." , "amount" : 3000000 }
],
"amount" : {
"type" : "TOKEN" ,
"mode" : "CUSTOM"
}
}
Unlike buy, there is no TOTAL mode for sell — splitting a total does not apply when selling existing token balances.
More Examples
Multi-wallet — all options
Three wallets selling random percentages with platform attribution cycling through a list. cURL
TypeScript
Rust
Go
Python
curl -X POST https://api.launchpad.trade/trading/instant/sell \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tokenAddress": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"privateKeys": ["PRIVATE_KEY_1", "PRIVATE_KEY_2", "PRIVATE_KEY_3"],
"amount": {
"type": "PERCENT",
"mode": "RANGE",
"min": 50,
"max": 100
},
"priorityFee": {
"mode": "FAST"
},
"platformTag": {
"platform": ["PHOTON", "AXIOM", "NONE"]
}
}'
Per-wallet amounts — CUSTOM mode
Full control over each wallet’s sell amount. Uses the wallets array instead of privateKeys. cURL
TypeScript
Rust
Go
Python
curl -X POST https://api.launchpad.trade/trading/instant/sell \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tokenAddress": "7GCihgDB8fe6KNjn2MYtkzZcRjQy3t9GHdC8uHYmW2hr",
"wallets": [
{ "privateKey": "PRIVATE_KEY_1", "amount": 25 },
{ "privateKey": "PRIVATE_KEY_2", "amount": 50 },
{ "privateKey": "PRIVATE_KEY_3", "amount": 100 }
],
"amount": {
"type": "PERCENT",
"mode": "CUSTOM"
},
"priorityFee": {
"mode": "ULTRA"
}
}'
Each wallet sells a different percentage — 25%, 50%, and 100% respectively.
Response
Success (200)
Partial Success (200)
{
"success" : true ,
"data" : {
"transactions" : [
{
"wallet" : "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" ,
"signature" : "5UfDuX7nPqR3kLm8vYz..." ,
"status" : "confirmed" ,
"slot" : 234567890 ,
"networkLatency" : 37 ,
"confirmLatency" : 460 ,
"tokensSold" : 5000000000 ,
"solReceived" : 2.35
},
{
"wallet" : "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM" ,
"signature" : "3KmPqYvRs8T2nBx7wQp..." ,
"status" : "confirmed" ,
"slot" : 234567890 ,
"networkLatency" : 34 ,
"confirmLatency" : 445 ,
"tokensSold" : 3000000000 ,
"solReceived" : 1.41
}
],
"summary" : {
"totalWallets" : 2 ,
"successful" : 2 ,
"failed" : 0 ,
"totalTokensSold" : 8000000000 ,
"totalSolReceived" : 3.76
}
}
}
Some transactions may succeed while others fail. The response still returns "success": true — always check the status field for each wallet. {
"success" : true ,
"data" : {
"transactions" : [
{
"wallet" : "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" ,
"signature" : "5UfDuX7nPqR3kLm8vYz..." ,
"status" : "confirmed" ,
"slot" : 234567890 ,
"networkLatency" : 39 ,
"confirmLatency" : 490 ,
"tokensSold" : 5000000000 ,
"solReceived" : 2.35
},
{
"wallet" : "9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM" ,
"signature" : null ,
"status" : "failed" ,
"slot" : null ,
"networkLatency" : 41 ,
"confirmLatency" : 500 ,
"error" : "INSUFFICIENT_TOKENS" ,
"tokensSold" : 0 ,
"solReceived" : 0
}
],
"summary" : {
"totalWallets" : 2 ,
"successful" : 1 ,
"failed" : 1 ,
"totalTokensSold" : 5000000000 ,
"totalSolReceived" : 2.35
}
}
}
Each transaction is independent — there is no atomic guarantee. Always iterate over transactions and check each status.
Errors
{
"success" : false ,
"error" : {
"code" : "INVALID_TOKEN" ,
"message" : "Invalid token address"
}
}
Code Message Cause INVALID_TOKENInvalid token address Token address is not a valid Solana address INVALID_WALLETInvalid private key One of the private keys is malformed INVALID_AMOUNTInvalid amount configuration Amount type, mode, value, or range is invalid INSUFFICIENT_TOKENSInsufficient token balance Wallet does not hold enough tokens RATE_LIMITRate limit exceeded Too many requests — see Rate Limits INTERNAL_ERRORInternal server error Retry or contact support
Notes
Call Initialize Wallets before your first trade for optimal speed. Without initialization, the first swap from each wallet will have extra latency due to automatic setup. This is a one-time cost of ~0.01 SOL per wallet, recovered automatically when no longer used.
Each wallet needs enough SOL to cover the priority fee even when selling tokens
What’s Next?
Buy Tokens Purchase tokens with one or multiple wallets
Priority Fee Configure transaction speed and cost
Platform Attribution Tag transactions with a DEX source
Initialize Wallets Optimize speed for your first trade