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, stroid, … |
external | boolean | Must be true for all external/API deploys (extensions, bots, scripts) |
Solana platforms use the Solana key in api_key. bnb, nadfun, clanker, and stroid 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",
external: true,
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",
external: true,
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",
"external": True,
"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",
"external": true,
"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).
External deploy flag
REQUIRED: pass "external": true in every token deploy POST /submit request body. This flags the deploy as originating from an external integration (extension, bot, script) and is used for logging and stats. Deploys without this flag may be rejected in the future.
{
"type": "create_token",
"external": true,
...
}