Sell Token
type sell_token — sell by percent of balance via basis_points.
Use POST {regionBase}/submit with "type": "sell_token". Selling is by percentage of wallet balance (basis_points), not a raw token amount.
Required
| Field | Type | Description |
|---|---|---|
type | string | Must be sell_token |
session_id | string | JWT (or Authorization: Bearer) |
api_key | string | Your encrypted Solana API key (see How to get an API key) |
mint_address | string | Token mint |
basis_points | integer | 1–10000 = 0.01%–100% of balance to sell (e.g. 2500 = 25%) |
Optional
The signer is always the wallet decrypted from api_key. The handler does not read a separate wallet_address (or similar) from the body for sells.
| Field | Type | Description |
|---|---|---|
mode | string | Platform routing: pump (default), bonk, ray, usd1, bags, … |
creator_wallet | string | Creator pubkey when it must differ from the signer (defaults to signer if omitted; see below) |
mayhem_mode | boolean | Mayhem path when relevant |
config_key | string | Bags fee-config key from deploy |
ref | string | Referral code |
priority_fee_sol | number | Priority fee in SOL |
bribe_fee_sol | number | Jito-style tip in SOL |
Full examples
All examples use Content-Type: text/plain;charset=UTF-8 with a JSON string body to skip the CORS preflight OPTIONS request, saving one round-trip.
username in the body is overwritten from the JWT on /submit.
JavaScript (browser extension / fetch)
const BASE = "https://nyc.j7tracker.io/deploy"; // or regional: eu / lax / sgp
const body = JSON.stringify({
type: "sell_token",
session_id: "<jwt>",
api_key: "<encrypted_solana_key>",
mint_address: "MintAddressHere",
basis_points: 10000, // 100% sell
mode: "pump",
});
const res = await fetch(`${BASE}/submit`, {
method: "POST",
headers: { "Content-Type": "text/plain;charset=UTF-8" },
body,
});
const data = await res.json();
if (data.type === "sell_success") {
console.log("Sold:", data.signature);
} else {
console.error("Error:", data.error);
}Partial sell (25%):
const body = JSON.stringify({
type: "sell_token",
session_id: "<jwt>",
api_key: "<encrypted_solana_key>",
mint_address: "MintAddressHere",
basis_points: 2500,
mode: "pump",
});Python
import json
import requests
BASE = "https://nyc.j7tracker.io/deploy"
payload = {
"type": "sell_token",
"session_id": "<jwt>",
"api_key": "<encrypted_solana_key>",
"mint_address": "MintAddressHere",
"basis_points": 10000,
"mode": "pump",
}
resp = requests.post(
f"{BASE}/submit",
headers={"Content-Type": "text/plain;charset=UTF-8"},
data=json.dumps(payload),
timeout=35,
)
data = resp.json()
if data.get("type") == "sell_success":
print(f"Sold: {data['signature']}")
else:
print(f"Error: {data.get('error')}")Rust
use reqwest::Client;
use serde_json::{json, Value};
let base = "https://nyc.j7tracker.io/deploy";
let client = Client::new();
let body = json!({
"type": "sell_token",
"session_id": "<jwt>",
"api_key": "<encrypted_solana_key>",
"mint_address": "MintAddressHere",
"basis_points": 10000,
"mode": "pump",
});
let resp = client
.post(format!("{base}/submit"))
.header("Content-Type", "text/plain;charset=UTF-8")
.body(body.to_string())
.timeout(std::time::Duration::from_secs(35))
.send()
.await?;
let data: Value = resp.json().await?;
match data.get("type").and_then(|t| t.as_str()) {
Some("sell_success") => {
println!("Sold: {}", data["signature"]);
}
_ => {
eprintln!("Error: {}", data["error"]);
}
}Responses
Success
{
"type": "sell_success",
"signature": "transaction_signature",
"mint_address": "...",
"basis_points": 10000,
"wallet_address": "...",
"mode": "pump",
"username": "..."
}Error
{
"type": "sell_error",
"error": "description",
"username": "..."
}The request may take up to 30 seconds before sell_success or sell_error, otherwise 504 with optional last_status.
Buy (SOL amount)
POST /submit does not support buy-by-SOL. This API only documents create_token and sell_token on /submit.