bingx-swap-trade
BingX Swap Trade
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
Quick Reference
| 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 |
Parameters
Order Parameters
- symbol: Trading pair in
BASE-QUOTEformat (e.g.,BTC-USDT,ETH-USDT) - side: Order direction —
BUYorSELL - positionSide: Position direction —
LONGorSHORT(hedge mode) /BOTH(one-way mode) - type: Order type (see Enums)
- quantity: Order quantity in coins (e.g.,
0.01for BTC-USDT); can be omitted whenclosePosition: true - price: Limit price (required for
LIMIT,STOP,TAKE_PROFITtypes) - stopPrice: Trigger price (required for
STOP_MARKET,STOP,TAKE_PROFIT_MARKET,TAKE_PROFIT) - timeInForce:
GTC|IOC|FOK|PostOnly— defaultGTC; required forLIMITtype - clientOrderId: Custom order ID, 1–40 chars (converted to lowercase)
- recvWindow: Request validity window in milliseconds (max 60000)
- orderId: System order ID (for cancel/query operations)
- workingType: Price source used to trigger conditional orders —
MARK_PRICE(mark price) orCONTRACT_PRICE(last traded price, default) - stopGuaranteed:
true|false— Whether stop-loss execution is guaranteed; guaranteed stops may incur an additional fee - closePosition:
true|false— When the trigger fires, close the entire position quantity; cannot be used withquantity - reduceOnly:
true|false— Order can only reduce (never increase) position size - activationPrice: Activation price for
TRAILING_STOP_MARKETorders (optional; defaults to current market price when omitted) - priceRate: Trailing callback rate for
TRAILING_STOP_MARKET/TRAILING_TP_SLorders (e.g.,0.05= 5%) - stopLoss: Object — Attach a stop-loss to a
MARKET/LIMITorder (see Stop-Loss/Take-Profit Object) - takeProfit: Object — Attach a take-profit to a
MARKET/LIMITorder (see Stop-Loss/Take-Profit Object)
Position Parameters
- leverage: Integer leverage multiplier (e.g.,
10,20,50) - marginType:
ISOLATEDorCROSSED - dualSidePosition:
"true"(hedge mode) or"false"(one-way mode) - positionId: Position ID string (used by
closePositionandpositionMarginendpoints) - amount: Margin adjustment amount in USDT (used by
positionMarginendpoint) - direction_type:
1(add margin) or2(reduce margin) (used bypositionMarginendpoint)
Enums
type (Order type):
MARKET— Market order (fills immediately at best price; attachstopLoss/takeProfitobjects here)LIMIT— Limit order (requirespriceandtimeInForce; attachstopLoss/takeProfitobjects here)STOP_MARKET— Stop-loss market (triggers atstopPrice, executes as market)STOP— Stop-loss limit (triggers atstopPrice, executes as limit atprice)TAKE_PROFIT_MARKET— Take-profit market (triggers atstopPrice, executes as market)TAKE_PROFIT— Take-profit limit (triggers atstopPrice, executes as limit atprice)TRAILING_STOP_MARKET— Trailing stop market; usespriceRate(required) and optionalactivationPriceTRAILING_TP_SL— Trailing TP/SL for an existing position; links to position viasymbol+positionSide; usespriceRate
side: 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)
Stop-Loss / Take-Profit Object Structure
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.
Parameter Validation Rules
Before sending a request, validate parameters client-side to avoid unnecessary API errors:
- symbol: Must match
^[A-Z0-9]+-[A-Z]+$; max 20 characters (e.g.,BTC-USDT) - quantity: Must be a positive number (> 0); max precision depends on the symbol's contract specification
- price: When provided, must be a positive number (> 0)
- stopPrice: When provided, must be a positive number (> 0); must differ from current market price
- leverage: Positive integer; range varies per symbol (typically 1–125 for BTC-USDT)
- clientOrderId: Alphanumeric only, 1–40 characters; pattern
^[a-zA-Z0-9]{1,40}$; no special characters - priceRate: Trailing callback rate; must satisfy 0 < value ≤ 1 (e.g.,
0.05= 5%) - recvWindow: Integer, 1–5000 ms; keep as small as possible (see Replay Protection)
- timestamp: Unix time in milliseconds; must be within
recvWindowof server time
Quick Start
CONSTRAINT: 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;
}
}
}
Code Usage Rules
- MUST copy
fetchSignedverbatim -- do not simplify or rewrite - MUST use
json-bigint(JSONBigParse.parse) for response parsing -- notJSON.parse - MUST include
X-SOURCE-KEY: BX-AI-SKILLheader on every request - MUST NOT remove the domain fallback loop or
isNetworkOrTimeoutcheck
Common Calls
Place 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.
Additional Resources
For full parameter descriptions, response schemas, and all 42 endpoints, see api-reference.md.
Agent Interaction Rules
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:
- prod-live: Ask user to type CONFIRM before any order placement, cancellation, or position/leverage change.
- prod-vst: No CONFIRM required. Inform user: "You are operating in the Production Simulated (VST) environment."
Step 1 — Identify the Operation
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)
Step 2 — Collect symbol (if not provided)
Please select a trading pair (or type another):
- BTC-USDT
- ETH-USDT
- SOL-USDT
- BNB-USDT
- Other (format: BASE-USDT)
Step 3 — Collect side (for order placement)
Order direction:
- BUY
- SELL
Step 4 — Collect positionSide
Position direction:
- LONG (open/add long)
- SHORT (open/add short)
- BOTH (one-way mode)
Step 5 — Collect order type
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)
Step 6 — Collect quantity and price
- Ask for quantity in coins (e.g., 0.01 BTC for BTC-USDT). Omit if using
closePosition: true. - If type is
LIMIT,STOP, orTAKE_PROFIT: also ask forprice. - If type is
STOP_MARKET,STOP,TAKE_PROFIT_MARKET, orTAKE_PROFIT: also ask forstopPrice. - If type is
TRAILING_STOP_MARKETorTRAILING_TP_SL: ask forpriceRate(e.g., 0.05 = 5%) and optionallyactivationPrice. - If type is
MARKETorLIMIT: optionally offer to attach astopLossand/ortakeProfitobject (ask for trigger price and type).
Optional advanced parameters (ask only if relevant or user mentions them):
workingType: trigger price source —MARK_PRICEorCONTRACT_PRICE(default)reduceOnly:trueto ensure the order only reduces position sizeclosePosition:trueto close the entire position when triggered (cannot use withquantity)stopGuaranteed:truefor guaranteed stop execution (extra fee may apply)
Step 7 — Confirm (prod-live only)
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.
Step 8 — Execute and report
Execute the API call and return the order ID and status to the user.
Cancel Order Flow
- Ask for
orderId(orclientOrderId) if not provided. - For
prod-live: ask for CONFIRM. - Execute DELETE
/openApi/swap/v2/trade/order.
Close Position Flow
- Ask for symbol if not provided.
- Present options: close specific position (LONG/SHORT) or close all.
- For
prod-live: ask for CONFIRM. - Use POST
/openApi/swap/v2/trade/closeAllPositionsor place a reverse MARKET order.
Leverage Settings Flow
- Ask for symbol if not provided.
- Ask for position side (LONG / SHORT / both).
- Ask for leverage value (e.g., 1–125).
- For
prod-live: ask for CONFIRM. - Execute POST
/openApi/swap/v2/trade/leverage.
Margin Type Flow
- Ask for symbol if not provided.
- Present options: ISOLATED or CROSSED.
- For
prod-live: ask for CONFIRM. - Execute POST
/openApi/swap/v2/trade/marginType.
Position Mode Flow
- Present options: Hedge mode (
dualSidePosition: true) or One-way mode (dualSidePosition: false). - For
prod-live: ask for CONFIRM. - Execute POST
/openApi/swap/v1/positionSide/dual.
More from bingx-api/api-ai-skills
bingx-swap-market
Query BingX perpetual swap market data including ticker prices, order book depth, recent trades, funding rates, klines/candlesticks, open interest, mark price, and contract info. Use when the user asks about BingX swap or perpetual futures prices, order books, candlestick charts, funding rates, or market statistics.
87bingx-swap-account
Query BingX perpetual swap account data including balance, positions, commission rates, and fund flow history. Use when the user asks about BingX account balance, margin info, current positions, PnL, liquidation price, fee rates, or income/fund flow records.
85bingx-agent
BingX Agent (affiliate/broker) management — query invited users, daily commission details, agent user information, API transaction commission, and partner information. Use when the user asks about BingX agent invited users, affiliate commissions, referral relationships, partner data, or broker commission reports.
81bingx-coinm-market
Query BingX Coin-M (inverse/coin-margined) perpetual futures market data including contract info, mark price, funding rates, klines, order book depth, open interest, and 24h ticker. Use when the user asks about BingX Coin-M or inverse futures prices, order books, candlestick charts, funding rates, or market statistics.
74bingx-fund-account
BingX Fund Account management — query fund account balance, get asset overview across all account types, transfer assets between accounts, and perform internal P2P transfers. Use when the user asks about BingX fund account balance, asset overview, transferring assets between spot/futures/standard contract accounts, or sending internal transfers to other BingX users.
74bingx-coinm-trade
BingX Coin-M (inverse/coin-margined) perpetual futures trading — place/cancel orders, manage positions, set leverage, and configure margin settings. Use when the user asks about BingX Coin-M or inverse futures trading, order placement, cancellation, position management, leverage, or margin type settings.
72