bingx-fund-account
BingX Fund Account
Authenticated endpoints for BingX fund account management. 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/spot/v1/account/balance |
GET | Query fund account asset balances | Yes |
/openApi/account/v1/allAccountBalance |
GET | Asset overview across all account types | Yes |
/openApi/api/asset/v1/transfer |
POST | Transfer assets between account types | Yes |
/openApi/api/v3/asset/transfer |
GET | Query asset transfer records | Yes |
/openApi/wallets/v1/capital/innerTransfer/apply |
POST | Internal P2P transfer to another BingX user | Yes |
/openApi/wallets/v1/capital/innerTransfer/records |
GET | Query internal transfer history | Yes |
Parameters
Asset Transfer Parameters
- type: Transfer direction (see TransferDirection enum) — required
- asset: Coin name (e.g.,
USDT,BTC) — required - amount: Transfer amount — required
- tranId: Transaction ID (for record queries; mutually exclusive with
type) - startTime: Start of time range in milliseconds
- endTime: End of time range in milliseconds
- current: Page index for pagination (default
1) - size: Page size for pagination (default
10, max100) - recvWindow: Request validity window in milliseconds (max
60000)
Internal Transfer Parameters
- coin: Name of the transferred coin (e.g.,
USDT) — required - userAccountType: Recipient account identifier type — required (see UserAccountType enum)
- userAccount: Recipient account value (UID, phone number, or email) — required
- amount: Transfer amount — required
- walletType: Source account type — required (see WalletType enum)
- callingCode: Phone calling code (required when
userAccountTypeis2) - transferClientId: Custom client ID for the transfer (optional, for idempotency)
- recvWindow: Request validity window in milliseconds (max
60000)
Asset Overview Parameters
- accountType: Filter by account type (see AccountType enum); returns all accounts if omitted
- recvWindow: Request validity window in milliseconds
Enums
TransferDirection (type for asset transfer):
FUND_SFUTURES— Funding Account → Standard ContractSFUTURES_FUND— Standard Contract → Funding AccountFUND_PFUTURES— Funding Account → Perpetual FuturesPFUTURES_FUND— Perpetual Futures → Funding AccountSFUTURES_PFUTURES— Standard Contract → Perpetual FuturesPFUTURES_SFUTURES— Perpetual Futures → Standard Contract
AccountType (accountType for asset overview):
sopt— Spot / Fund accountstdFutures— Standard futures accountcoinMPerp— Coin-margined perpetual accountUSDTMPerp— USDT-margined perpetual accountcopyTrading— Copy trading accountgrid— Grid trading accounteran— Wealth management accountc2c— C2C account
UserAccountType (userAccountType for internal transfer):
1— UID2— Phone number (requirescallingCode)3— Email address
WalletType (walletType for internal transfer source):
1— Fund account2— Standard contract account
Parameter Validation Rules
Before sending a request, validate parameters client-side to avoid unnecessary API errors:
- asset / coin: Uppercase letters and digits only; pattern
^[A-Z0-9]{1,20}$(e.g.,USDT,BTC) - amount: Must be a positive number (> 0); precision depends on the asset
- type: Must exactly match one of the
TransferDirectionenum values (e.g.,FUND_PFUTURES) - userAccount: Non-empty string; format depends on
userAccountType— UID (digits), email, or phone number - callingCode: Required when
userAccountTypeis2(phone); must be a valid international dialing code (e.g.,86,1) - size: Integer, 1–100; default
10 - startTime / endTime: Unix timestamps in milliseconds;
endTimemust be ≥startTime - 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
Query fund account balance:
const balance = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/spot/v1/account/balance"
);
// balance.balances[].asset, balance.balances[].free, balance.balances[].locked
Get asset overview across all accounts:
const overview = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/account/v1/allAccountBalance"
);
// overview[].accountType, overview[].usdtBalance
Transfer assets from Fund Account to Perpetual Futures:
const result = await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/api/v3/asset/transfer", {
type: "FUND_PFUTURES",
asset: "USDT",
amount: 100,
}
);
// result.tranId — transaction ID
Query asset transfer records:
const records = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/api/v3/asset/transfer", {
type: "FUND_PFUTURES",
current: 1,
size: 20,
}
);
// records.total, records.rows[].asset, records.rows[].amount, records.rows[].status, records.rows[].tranId
Internal P2P transfer to another user (by UID):
const result = await fetchSigned("prod-live", API_KEY, SECRET, "POST",
"/openApi/wallets/v1/capital/innerTransfer/apply", {
coin: "USDT",
userAccountType: 1,
userAccount: "123456789", // recipient UID
amount: 50,
walletType: 1,
}
);
// result.id — internal transfer record ID
Query internal transfer records:
const records = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
"/openApi/wallets/v1/capital/innerTransfer/records", {
coin: "USDT",
limit: 20,
}
);
// records.data[].id, records.data[].coin, records.data[].amount, records.data[].status, records.data[].receiver
Additional Resources
For full parameter descriptions and response schemas, 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.
Write operations (POST asset transfer and internal transfer) require CONFIRM on prod-live. Read-only queries do not.
- prod-live: Ask user to type CONFIRM before any asset transfer or internal transfer.
- 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?
- Check fund account balance
- View asset overview (all account types)
- Transfer assets between accounts (e.g., Spot ↔ Futures)
- View asset transfer history
- Send an internal transfer to another BingX user
- View internal transfer history
Step 2 — Collect details based on operation
For asset transfer:
- Ask for transfer direction:
Transfer direction:
- Spot → Perpetual Futures (
FUND_PFUTURES) - Perpetual Futures → Spot (
PFUTURES_FUND) - Spot → Standard Contract (
FUND_SFUTURES) - Standard Contract → Spot (
SFUTURES_FUND) - Standard Contract → Perpetual Futures (
SFUTURES_PFUTURES) - Perpetual Futures → Standard Contract (
PFUTURES_SFUTURES)
- Spot → Perpetual Futures (
- Ask for coin (e.g.,
USDT) and amount.
For internal transfer:
- Ask for coin and amount.
- Ask for recipient account type:
Recipient identifier:
1— UID2— Phone number3— Email address
- Ask for the recipient account value (UID / phone / email).
- If phone number: ask for calling code (e.g.,
86for China). - Ask for source wallet:
Source account:
1— Fund account2— Standard contract account
Step 3 — Confirm (prod-live write ops only)
You are about to transfer {amount} {coin} on Production Live:
- Direction: {transfer direction or recipient info}
- Source: {wallet type}
Type CONFIRM to proceed, or anything else to cancel.
Step 4 — Execute and report
Execute the API call and return key result fields to the user:
- Asset transfer:
tranId - Internal transfer:
id(internal transfer record ID) - Balance query: list of assets with
freeandlockedbalances - Asset overview: list of account types with equivalent USDT value
More from bingx-api/api-ai-skills
bingx-swap-trade
BingX perpetual swap trading — place/cancel orders, manage positions, set leverage, and configure margin settings. Use when the user asks about BingX swap trading, order placement, cancellation, position management, leverage, or margin type settings.
88bingx-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-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