Deploy Token
JSON body with type create_token — platform in mode, common optional fields.
Use POST {regionBase}/submit with "type": "create_token". The platform is the string field mode (not type — type is always create_token here).
Latency: keep /ping warm on your region
Deploy latency improves when the HTTPS path to {regionBase} is already warm. From your client (including extension background), call GET {regionBase}/ping once at startup, then periodically (e.g. every 15–30 seconds) against the same base you use for /submit — the J7Tracker client does this on about a 20s cadence for the selected region. Details and regional URLs: Endpoints & Regions — keep-alive.
Required
| Field | Type | Description |
|---|---|---|
type | string | Must be create_token |
session_id | string | JWT (or send Authorization: Bearer instead) |
api_key | string | Your encrypted API key (see How to get an API key) |
mode | string | Platform: pump, bonk, bags, usd1, bnb, nadfun, clanker, … |
Solana platforms use the Solana key in api_key. bnb, nadfun, and clanker use the EVM key in api_key.
Common fields
| Field | Type | Description |
|---|---|---|
name | string | Token name (app may send a space if empty) |
ticker | string | Symbol |
website | string | URL |
twitter | string | X/Twitter URL |
buy_amount | number | Creator buy (SOL or chain-specific unit) |
image_url | string | Image URL or data; some prefixes select alternate image/metadata handling |
image_type | string | e.g. letter, ascii, sol_ascii, url |
sell_panel_enabled | boolean | UX flag after deploy |
private_desc | boolean | Omit default description in metadata when true |
ref | string | Referral code; server may map username → ref from config |
multi_deploy | number | >1 enables multi-deploy (server clamps 1–10) |
multi_deploy_buy_amount | number | Per-mint buy when multi-deploy (else falls back to buy_amount) |
anon_wallets | boolean | With multi-deploy, anonymous wallet mode |
vanity_mint_keypair | string | Base58 keypair for custom mint |
use_vanity_pool | string | "pump" or "bonk" / "usd1" pool id for pooled vanity mint |
Pump-style fee / agent flags
| Field | Type | Description |
|---|---|---|
mayhem_mode | boolean | Mayhem / Token2022 path when supported |
cashback_mode | boolean | 0% creator fees (cashback-style); same as no_creator_fees |
agent_mode | boolean | Agent / buyback routing |
buyback_bps | number | Buyback basis points (e.g. 10000) |
agent_buyback | boolean | Auto buyback from creator fees (server forces agent + full buyback); same as auto_buyback_cfees |
pump_fee_shareholders | array | Fee-share table (see Pump.fun) |
Bundle / sniper / auto-sell
| Field | Type | Description |
|---|---|---|
bundle | boolean | With bundle_wallets, same-block bundle buys |
bundle_wallets | string | Comma-separated encrypted_key:amount_sol |
sniper_wallets | string | Comma-separated encrypted_key:amount_sol:delay_ms |
auto_sell | boolean | Enable auto-sell path |
auto_sell_wallets | string | Format parsed server-side for auto-sell |
Details: Bundle & Sniper Wallets.
Bags / Bonk / BNB
Platform-specific fields: Other Platforms.
Full examples
All examples use Content-Type: text/plain;charset=UTF-8 with a JSON string body. This skips the CORS preflight OPTIONS request that application/json triggers, shaving one round-trip off deploy latency — critical for browser extensions.
JavaScript (browser extension / fetch)
const BASE = "https://nyc.j7tracker.io/deploy"; // or regional: eu / lax / sgp
const body = JSON.stringify({
type: "create_token",
session_id: "<jwt>",
api_key: "<encrypted_solana_key>",
mode: "pump",
name: "My Token",
ticker: "MTK",
buy_amount: 1,
image_url: "https://example.com/image.png",
});
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 === "token_create_success") {
console.log("Mint:", data.mint_address);
} else {
console.error("Error:", data.error);
}With Authorization header instead of session_id (non-browser clients):
const res = await fetch(`${BASE}/submit`, {
method: "POST",
headers: {
"Content-Type": "text/plain;charset=UTF-8",
"Authorization": `Bearer ${jwt}`,
},
body: JSON.stringify({
type: "create_token",
api_key: "<encrypted_solana_key>",
mode: "pump",
name: "My Token",
ticker: "MTK",
buy_amount: 1,
}),
});Python
import requests
BASE = "https://nyc.j7tracker.io/deploy"
payload = {
"type": "create_token",
"session_id": "<jwt>",
"api_key": "<encrypted_solana_key>",
"mode": "pump",
"name": "My Token",
"ticker": "MTK",
"buy_amount": 1,
"image_url": "https://example.com/image.png",
}
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") == "token_create_success":
print(f"Mint: {data['mint_address']}")
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": "create_token",
"session_id": "<jwt>",
"api_key": "<encrypted_solana_key>",
"mode": "pump",
"name": "My Token",
"ticker": "MTK",
"buy_amount": 1,
"image_url": "https://example.com/image.png",
});
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("token_create_success") => {
println!("Mint: {}", data["mint_address"]);
}
_ => {
eprintln!("Error: {}", data["error"]);
}
}Responses
Success
{
"type": "token_create_success",
"mint_address": "...",
"mode": "pump",
"username": "..."
}Error
{
"type": "token_create_error",
"error": "description",
"username": "..."
}The HTTP layer may also return 401 (bad JWT), 400 (bad type), or 504 (wait timeout with optional last_status).