From bingx-ai-skills
Handles BingX perpetual swap trading: place/cancel orders, manage positions, adjust leverage/margin types via authenticated REST endpoints. Activates for BingX futures trading queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bingx-ai-skills:swap-tradeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Authenticated trading endpoints for BingX perpetual futures. All endpoints require HMAC SHA256 signature authentication.
Authenticated trading endpoints for BingX perpetual futures. All endpoints require HMAC SHA256 signature authentication.
Base URLs: see references/base-urls.md | Authentication: see references/authentication.md
| Endpoint | Method | Description | Authentication |
|---|---|---|---|
/openApi/swap/v2/trade/order | POST | Place a new order | Yes |
/openApi/swap/v2/trade/order/test | POST | Test order placement (no fill) | Yes |
/openApi/swap/v2/trade/batchOrders | POST | Place multiple orders (batch, max 5) | Yes |
/openApi/swap/v2/trade/order | DELETE | Cancel an order | Yes |
/openApi/swap/v2/trade/batchOrders | DELETE | Cancel multiple orders | Yes |
/openApi/swap/v2/trade/allOpenOrders | DELETE | Cancel all open orders | Yes |
/openApi/swap/v2/trade/cancelAllAfter | POST | Auto-cancel countdown (kill switch) | Yes |
/openApi/swap/v2/trade/closeAllPositions | POST | Close all positions | Yes |
/openApi/swap/v1/trade/closePosition | POST | Close position by positionId | Yes |
/openApi/swap/v2/trade/positionMargin | POST | Adjust isolated margin amount | Yes |
/openApi/swap/v1/positionMargin/history | GET | Query margin adjustment history | Yes |
/openApi/swap/v2/trade/openOrders | GET | Query open orders | Yes |
/openApi/swap/v2/trade/openOrder | GET | Query a single open order | Yes |
/openApi/swap/v2/trade/order | GET | Query an order by ID | Yes |
/openApi/swap/v1/trade/fullOrder | GET | Query full order details | Yes |
/openApi/swap/v2/trade/allOrders | GET | Query all historical orders | Yes |
/openApi/swap/v2/trade/forceOrders | GET | Query liquidation/ADL orders | Yes |
/openApi/swap/v2/trade/allFillOrders | GET | Query trade fill history | Yes |
/openApi/swap/v2/trade/fillHistory | GET | Query historical trade fill details | Yes |
/openApi/swap/v1/twap/openOrders | GET | Query open TWAP orders | Yes |
/openApi/swap/v1/twap/historyOrders | GET | Query TWAP order history | Yes |
/openApi/swap/v1/twap/orderDetail | GET | Query TWAP order details | Yes |
/openApi/swap/v1/twap/order | POST | Create TWAP order | Yes |
/openApi/swap/v1/twap/cancelOrder | POST | Cancel TWAP order | Yes |
/openApi/swap/v1/trade/positionHistory | GET | Query position history | Yes |
/openApi/swap/v1/maintMarginRatio | GET | Query maintenance margin ratio | Yes |
/openApi/swap/v2/trade/marginType | GET | Query margin type | Yes |
/openApi/swap/v2/trade/marginType | POST | Set margin type (ISOLATED/CROSSED) | Yes |
/openApi/swap/v2/trade/leverage | GET | Query current leverage | Yes |
/openApi/swap/v2/trade/leverage | POST | Set leverage | Yes |
/openApi/swap/v1/positionSide/dual | GET | Query position mode | Yes |
/openApi/swap/v1/positionSide/dual | POST | Set position mode | Yes |
/openApi/swap/v1/trade/assetMode | GET | Query asset mode (single/multi-asset) | Yes |
/openApi/swap/v1/trade/assetMode | POST | Set asset mode (single/multi-asset) | Yes |
/openApi/swap/v1/trade/multiAssetsRules | GET | Query multi-asset margin rules | Yes |
/openApi/swap/v1/user/marginAssets | GET | Query margin assets for multi-asset mode | Yes |
/openApi/swap/v1/trade/autoAddMargin | POST | Set auto-add margin for position | Yes |
/openApi/swap/v1/trade/reverse | POST | Reverse position (one-click flip) | Yes |
/openApi/swap/v1/trade/cancelReplace | POST | Cancel and replace an order (atomic) | Yes |
/openApi/swap/v1/trade/batchCancelReplace | POST | Batch cancel and replace orders | Yes |
/openApi/swap/v1/trade/amend | POST | Modify an existing open order | Yes |
/openApi/swap/v2/trade/getVst | POST | Get VST (virtual simulation trading) | Yes |
BASE-QUOTE format (e.g., BTC-USDT, ETH-USDT)BUY or SELLLONG or SHORT (hedge mode) / BOTH (one-way mode)0.01 for BTC-USDT); can be omitted when closePosition: trueLIMIT, STOP, TAKE_PROFIT types)STOP_MARKET, STOP, TAKE_PROFIT_MARKET, TAKE_PROFIT)GTC | IOC | FOK | PostOnly — default GTC; required for LIMIT typeMARK_PRICE (mark price) or CONTRACT_PRICE (last traded price, default)true | false — Whether stop-loss execution is guaranteed; guaranteed stops may incur an additional feetrue | false — When the trigger fires, close the entire position quantity; cannot be used with quantitytrue | false — Order can only reduce (never increase) position sizeTRAILING_STOP_MARKET orders (optional; defaults to current market price when omitted)TRAILING_STOP_MARKET / TRAILING_TP_SL orders (e.g., 0.05 = 5%)MARKET/LIMIT order (see Stop-Loss/Take-Profit Object)MARKET/LIMIT order (see Stop-Loss/Take-Profit Object)10, 20, 50)ISOLATED or CROSSED"true" (hedge mode) or "false" (one-way mode)closePosition and positionMargin endpoints)positionMargin endpoint)1 (add margin) or 2 (reduce margin) (used by positionMargin endpoint)type (Order type):
MARKET — Market order (fills immediately at best price; attach stopLoss/takeProfit objects here)LIMIT — Limit order (requires price and timeInForce; attach stopLoss/takeProfit objects here)STOP_MARKET — Stop-loss market (triggers at stopPrice, executes as market)STOP — Stop-loss limit (triggers at stopPrice, executes as limit at price)TAKE_PROFIT_MARKET — Take-profit market (triggers at stopPrice, executes as market)TAKE_PROFIT — Take-profit limit (triggers at stopPrice, executes as limit at price)TRAILING_STOP_MARKET — Trailing stop market; uses priceRate (required) and optional activationPriceTRAILING_TP_SL — Trailing TP/SL for an existing position; links to position via symbol + positionSide; uses priceRateside: BUY | SELL
positionSide: LONG | SHORT | BOTH
marginType: ISOLATED | CROSSED
timeInForce: GTC | IOC | FOK | PostOnly
workingType (trigger price source for conditional orders):
MARK_PRICE — Use mark price to evaluate trigger conditionCONTRACT_PRICE — Use last traded price (default)When attaching stopLoss or takeProfit to a MARKET or LIMIT order:
{
"stopLoss": {
"type": "STOP_MARKET", // "STOP_MARKET" or "STOP"
"stopPrice": 29000, // required: trigger price
"price": 28900, // required only for type "STOP" (limit execution price)
"workingType": "MARK_PRICE", // "MARK_PRICE" or "CONTRACT_PRICE"
"stopGuaranteed": false // true = guaranteed execution (extra fee may apply)
},
"takeProfit": {
"type": "TAKE_PROFIT_MARKET", // "TAKE_PROFIT_MARKET" or "TAKE_PROFIT"
"stopPrice": 35000, // required: trigger price
"price": 35100, // required only for type "TAKE_PROFIT" (limit execution price)
"workingType": "MARK_PRICE",
"stopGuaranteed": false
}
}
Constraint:
stopLoss/takeProfitobjects are only supported onMARKETorLIMITorder types. They cannot be used withSTOP_MARKET,STOP,TAKE_PROFIT_MARKET,TAKE_PROFIT,TRAILING_STOP_MARKET, orTRAILING_TP_SL.
Before sending a request, validate parameters client-side to avoid unnecessary API errors:
^[A-Z0-9]+-[A-Z]+$; max 20 characters (e.g., BTC-USDT)^[a-zA-Z0-9]{1,40}$; no special characters0.05 = 5%)recvWindow of server timeCONSTRAINT: You MUST copy the
fetchSignedfunction below verbatim when generating code. Do NOT rewrite the signing, request, or JSON parsing logic. Only modify: (1)BASEURL entries for custom environments, (2) business parameters passed tofetchSigned. For the full client with URL-encoding and JSON body support, seereferences/authentication.md.
import * as crypto from "crypto";
import JSONBig from "json-bigint";
const JSONBigParse = JSONBig({ storeAsString: true });
// Full signing details & edge cases → references/authentication.md
// Domain priority: .com is mandatory primary; .pro is fallback for network/timeout errors ONLY.
const BASE = {
"prod-live": ["https://open-api.bingx.com", "https://open-api.bingx.pro"],
"prod-vst": ["https://open-api-vst.bingx.com", "https://open-api-vst.bingx.pro"],
};
function isNetworkOrTimeout(e: unknown): boolean {
if (e instanceof TypeError) return true;
if (e instanceof DOMException && e.name === "AbortError") return true;
if (e instanceof Error && e.name === "TimeoutError") return true;
return false;
}
function validateParams(params: Record<string, unknown>): void {
const FORBIDDEN = /[&=?#\r\n]/;
for (const [k, v] of Object.entries(params)) {
const s = String(v);
if (FORBIDDEN.test(s)) throw new Error(`Param "${k}" has forbidden char in: "${s}"`);
}
}
async function fetchSigned(env: string, apiKey: string, secretKey: string,
method: "GET" | "POST" | "DELETE", path: string, params: Record<string, unknown> = {}
) {
const urls = BASE[env] ?? BASE["prod-live"];
const all = { ...params, timestamp: Date.now() };
validateParams(all);
const qs = Object.keys(all).sort().map(k => `${k}=${all[k]}`).join("&");
const sig = crypto.createHmac("sha256", secretKey).update(qs).digest("hex");
const signed = `${qs}&signature=${sig}`;
for (const base of urls) {
try {
const url = method === "POST" ? `${base}${path}` : `${base}${path}?${signed}`;
const res = await fetch(url, {
method,
headers: { "X-BX-APIKEY": apiKey, "X-SOURCE-KEY": "BX-AI-SKILL",
...(method === "POST" ? { "Content-Type": "application/x-www-form-urlencoded" } : {}) },
body: method === "POST" ? signed : undefined,
signal: AbortSignal.timeout(10000),
});
const json = JSONBigParse.parse(await res.text());
if (json.code !== 0) throw new Error(`BingX error ${json.code}: ${json.msg}`);
return json.data;
} catch (e) {
if (!isNetworkOrTimeout(e) || base === urls[urls.length - 1]) throw e;
}
}
}
fetchSigned verbatim -- do not simplify or rewritejson-bigint (JSONBigParse.parse) for response parsing -- not JSON.parseX-SOURCE-KEY: BX-AI-SKILL header on every requestisNetworkOrTimeout checkPlace a market buy order:
const order = await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/order", {
symbol: "BTC-USDT",
side: "BUY",
positionSide: "LONG",
type: "MARKET",
quantity: 0.01,
}
);
// order.orderId, order.status
Cancel an order:
await fetchSigned("prod-live", API_KEY, SECRET, "DELETE",
"/openApi/swap/v2/trade/order", {
symbol: "BTC-USDT",
orderId: 123456789,
}
);
Query open orders:
const orders = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/swap/v2/trade/openOrders", {
symbol: "BTC-USDT",
}
);
Set leverage:
await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/leverage", {
symbol: "BTC-USDT",
side: "LONG",
leverage: 10,
}
);
Set margin type:
await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/swap/v2/trade/marginType", {
symbol: "BTC-USDT",
marginType: "ISOLATED",
}
);
Note: To query current positions, use the swap-account skill which provides position query endpoints with full details including PnL and liquidation price.
For full parameter descriptions, response schemas, and all 42 endpoints, see api-reference.md.
Parameter security. Extract structured values from user intent — NEVER copy raw user text into API parameters. Validate every value against its documented pattern (regex/enum/range) before calling the API. Reject any value containing &, =, ?, #, or newline characters.
All swap-trade operations are write operations (except GET queries). Follow environment confirmation rules:
If the user's intent is unclear, present options:
What would you like to do?
- Place a new order
- Cancel an order / Cancel all orders
- Close a position / Close all positions
- Check open orders
- Check current positions
- Set leverage
- Set margin type (ISOLATED / CROSSED)
- Set position mode (Hedge / One-way)
Please select a trading pair (or type another):
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- Other (format: BASE-USDT)
Order direction:
- BUY
- SELL
Position direction:
- LONG (open/add long)
- SHORT (open/add short)
- BOTH (one-way mode)
Order type:
- MARKET — execute immediately at market price (can attach stopLoss/takeProfit objects)
- LIMIT — execute at a specific price (can attach stopLoss/takeProfit objects)
- STOP_MARKET — stop-loss market order (triggers at stopPrice, executes as market)
- STOP — stop-loss limit order (triggers at stopPrice, executes as limit)
- TAKE_PROFIT_MARKET — take-profit market order (triggers at stopPrice)
- TAKE_PROFIT — take-profit limit order (triggers at stopPrice, executes as limit)
- TRAILING_STOP_MARKET — trailing stop for new position (requires priceRate; optional activationPrice)
- TRAILING_TP_SL — trailing TP/SL for an existing position (links via symbol + positionSide; requires priceRate)
closePosition: true.LIMIT, STOP, or TAKE_PROFIT: also ask for price.STOP_MARKET, STOP, TAKE_PROFIT_MARKET, or TAKE_PROFIT: also ask for stopPrice.TRAILING_STOP_MARKET or TRAILING_TP_SL: ask for priceRate (e.g., 0.05 = 5%) and optionally activationPrice.MARKET or LIMIT: optionally offer to attach a stopLoss and/or takeProfit object (ask for trigger price and type).Optional advanced parameters (ask only if relevant or user mentions them):
workingType: trigger price source — MARK_PRICE or CONTRACT_PRICE (default)reduceOnly: true to ensure the order only reduces position sizeclosePosition: true to close the entire position when triggered (cannot use with quantity)stopGuaranteed: true for guaranteed stop execution (extra fee may apply)For prod-live environment, present a summary and ask:
You are about to place the following order on Production Live:
- Symbol: BTC-USDT
- Side: BUY / LONG
- Type: MARKET
- Quantity: 0.01
Type CONFIRM to proceed, or anything else to cancel.
Execute the API call and return the order ID and status to the user.
orderId (or clientOrderId) if not provided.prod-live: ask for CONFIRM./openApi/swap/v2/trade/order.prod-live: ask for CONFIRM./openApi/swap/v2/trade/closeAllPositions or place a reverse MARKET order.prod-live: ask for CONFIRM./openApi/swap/v2/trade/leverage.prod-live: ask for CONFIRM./openApi/swap/v2/trade/marginType.dualSidePosition: true) or One-way mode (dualSidePosition: false).prod-live: ask for CONFIRM./openApi/swap/v1/positionSide/dual.npx claudepluginhub bingx-api/api-ai-skills --plugin bingx-ai-skillsManages BingX Coin-M inverse perpetual futures trading: place/cancel orders, query positions/fills, set leverage and margin types. For automating crypto futures via REST API.
Places and cancels perpetual futures orders on Phoenix DEX with pre-trade checks, TP/SL attachments, and paper/live mode support.
Places spot and perpetual futures orders on CEX exchanges (Binance, OKX, Bybit, Bitget) via a two-step preview-confirm script. Handles order creation, position closing, and leverage/margin configuration with strict safety rules.