Help us improve
Share bugs, ideas, or general feedback.
From bingx-ai-skills
Manages BingX fund accounts: queries spot/futures balances and asset overviews across accounts, transfers assets between account types, and performs internal P2P transfers to other users.
npx claudepluginhub bingx-api/api-ai-skills --plugin bingx-ai-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/bingx-ai-skills:fund-accountThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Authenticated endpoints for BingX fund account management. All endpoints require HMAC SHA256 signature authentication.
Queries BingX spot and fund account balances, asset overviews, and transfers assets between accounts via authenticated REST API endpoints. Useful for BingX trading account management.
Manages cryptocurrency exchange accounts: check balance, positions, order/trade history, transfer funds, register with referral links, configure API keys, and verify tier upgrades. Supports Binance, OKX, Bybit, Bitget, Gate.io, HTX, Pionex, Hyperliquid.
Queries Revolut X account balances, open orders, order history, fills, and private trades via revx CLI commands. Activates on balance checks, order views, or revx commands.
Share bugs, ideas, or general feedback.
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
| 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 |
USDT, BTC) — requiredtype)1)10, max 100)60000)USDT) — requireduserAccountType is 2)60000)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 ContractAccountType (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 accountUserAccountType (userAccountType for internal transfer):
1 — UID2 — Phone number (requires callingCode)3 — Email addressWalletType (walletType for internal transfer source):
1 — Fund account2 — Standard contract accountBefore sending a request, validate parameters client-side to avoid unnecessary API errors:
^[A-Z0-9]{1,20}$ (e.g., USDT, BTC)TransferDirection enum values (e.g., FUND_PFUTURES)userAccountType — UID (digits), email, or phone numberuserAccountType is 2 (phone); must be a valid international dialing code (e.g., 86, 1)10endTime must be ≥ startTimerecvWindow 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 checkQuery 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
For full parameter descriptions and response schemas, 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.
Write operations (POST asset transfer and internal transfer) require CONFIRM on prod-live. Read-only queries do not.
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
For asset transfer:
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)
USDT) and amount.For internal transfer:
Recipient identifier:
1— UID2— Phone number3— Email address
86 for China).Source account:
1— Fund account2— Standard contract account
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.
Execute the API call and return key result fields to the user:
tranIdid (internal transfer record ID)free and locked balances