Binance Derivatives-trading-coin-futures Skill
Derivatives-trading-coin-futures request on Binance using authenticated API endpoints. Requires API key and secret key for certain endpoints. Return the result in JSON format.
Quick Reference
| Endpoint |
Description |
Required |
Optional |
Authentication |
/dapi/v1/account (GET) |
Account Information (USER_DATA) |
None |
recvWindow |
Yes |
/dapi/v1/balance (GET) |
Futures Account Balance (USER_DATA) |
None |
recvWindow |
Yes |
/dapi/v1/positionSide/dual (GET) |
Get Current Position Mode(USER_DATA) |
None |
recvWindow |
Yes |
/dapi/v1/positionSide/dual (POST) |
Change Position Mode(TRADE) |
dualSidePosition |
recvWindow |
Yes |
/dapi/v1/order/asyn (GET) |
Get Download Id For Futures Order History (USER_DATA) |
startTime, endTime |
recvWindow |
Yes |
/dapi/v1/trade/asyn (GET) |
Get Download Id For Futures Trade History (USER_DATA) |
startTime, endTime |
recvWindow |
Yes |
/dapi/v1/income/asyn (GET) |
Get Download Id For Futures Transaction History(USER_DATA) |
startTime, endTime |
recvWindow |
Yes |
/dapi/v1/order/asyn/id (GET) |
Get Futures Order History Download Link by Id (USER_DATA) |
downloadId |
recvWindow |
Yes |
/dapi/v1/trade/asyn/id (GET) |
Get Futures Trade Download Link by Id(USER_DATA) |
downloadId |
recvWindow |
Yes |
/dapi/v1/income/asyn/id (GET) |
Get Futures Transaction History Download Link by Id (USER_DATA) |
downloadId |
recvWindow |
Yes |
/dapi/v1/income (GET) |
Get Income History(USER_DATA) |
None |
symbol, incomeType, startTime, endTime, page, limit, recvWindow |
Yes |
/dapi/v1/leverageBracket (GET) |
Notional Bracket for Pair(USER_DATA) |
None |
pair, recvWindow |
Yes |
/dapi/v2/leverageBracket (GET) |
Notional Bracket for Symbol(USER_DATA) |
None |
symbol, recvWindow |
Yes |
/dapi/v1/commissionRate (GET) |
User Commission Rate (USER_DATA) |
symbol |
recvWindow |
Yes |
/dapi/v1/ticker/24hr (GET) |
24hr Ticker Price Change Statistics |
None |
symbol, pair |
No |
/futures/data/basis (GET) |
Basis |
pair, contractType, period |
limit, startTime, endTime |
No |
/dapi/v1/time (GET) |
Check Server time |
None |
None |
No |
/dapi/v1/aggTrades (GET) |
Compressed/Aggregate Trades List |
symbol |
fromId, startTime, endTime, limit |
No |
/dapi/v1/continuousKlines (GET) |
Continuous Contract Kline/Candlestick Data |
pair, contractType, interval |
startTime, endTime, limit |
No |
/dapi/v1/exchangeInfo (GET) |
Exchange Information |
None |
None |
No |
/dapi/v1/fundingInfo (GET) |
Get Funding Rate Info |
None |
None |
No |
/dapi/v1/fundingRate (GET) |
Get Funding Rate History of Perpetual Futures |
symbol |
startTime, endTime, limit |
No |
/dapi/v1/constituents (GET) |
Query Index Price Constituents |
symbol |
None |
No |
/dapi/v1/indexPriceKlines (GET) |
Index Price Kline/Candlestick Data |
pair, interval |
startTime, endTime, limit |
No |
/dapi/v1/premiumIndex (GET) |
Index Price and Mark Price |
None |
symbol, pair |
No |
/dapi/v1/klines (GET) |
Kline/Candlestick Data |
symbol, interval |
startTime, endTime, limit |
No |
/futures/data/globalLongShortAccountRatio (GET) |
Long/Short Ratio |
pair, period |
limit, startTime, endTime |
No |
/dapi/v1/markPriceKlines (GET) |
Mark Price Kline/Candlestick Data |
symbol, interval |
startTime, endTime, limit |
No |
/dapi/v1/historicalTrades (GET) |
Old Trades Lookup(MARKET_DATA) |
symbol |
limit, fromId |
No |
/futures/data/openInterestHist (GET) |
Open Interest Statistics |
pair, contractType, period |
limit, startTime, endTime |
No |
/dapi/v1/openInterest (GET) |
Open Interest |
symbol |
None |
No |
/dapi/v1/depth (GET) |
Order Book |
symbol |
limit |
No |
/dapi/v1/premiumIndexKlines (GET) |
Premium index Kline Data |
symbol, interval |
startTime, endTime, limit |
No |
/dapi/v1/trades (GET) |
Recent Trades List |
symbol |
limit |
No |
/dapi/v1/ticker/bookTicker (GET) |
Symbol Order Book Ticker |
None |
symbol, pair |
No |
/dapi/v1/ticker/price (GET) |
Symbol Price Ticker |
None |
symbol, pair |
No |
/futures/data/takerBuySellVol (GET) |
Taker Buy/Sell Volume |
pair, contractType, period |
limit, startTime, endTime |
No |
/dapi/v1/ping (GET) |
Test Connectivity |
None |
None |
No |
/futures/data/topLongShortAccountRatio (GET) |
Top Trader Long/Short Ratio (Accounts) |
symbol, period |
limit, startTime, endTime |
No |
/futures/data/topLongShortPositionRatio (GET) |
Top Trader Long/Short Ratio (Positions) |
pair, period |
limit, startTime, endTime |
No |
/dapi/v1/pmAccountInfo (GET) |
Classic Portfolio Margin Account Information (USER_DATA) |
asset |
recvWindow |
Yes |
/dapi/v1/userTrades (GET) |
Account Trade List (USER_DATA) |
None |
symbol, pair, orderId, startTime, endTime, fromId, limit, recvWindow |
Yes |
/dapi/v1/allOrders (GET) |
All Orders (USER_DATA) |
None |
symbol, pair, orderId, startTime, endTime, limit, recvWindow |
Yes |
/dapi/v1/countdownCancelAll (POST) |
Auto-Cancel All Open Orders (TRADE) |
symbol, countdownTime |
recvWindow |
Yes |
/dapi/v1/allOpenOrders (DELETE) |
Cancel All Open Orders(TRADE) |
symbol |
recvWindow |
Yes |
/dapi/v1/batchOrders (DELETE) |
Cancel Multiple Orders(TRADE) |
symbol |
orderIdList, origClientOrderIdList, recvWindow |
Yes |
/dapi/v1/batchOrders (PUT) |
Modify Multiple Orders(TRADE) |
batchOrders |
recvWindow |
Yes |
/dapi/v1/batchOrders (POST) |
Place Multiple Orders(TRADE) |
batchOrders |
recvWindow |
Yes |
/dapi/v1/order (DELETE) |
Cancel Order (TRADE) |
symbol |
orderId, origClientOrderId, recvWindow |
Yes |
/dapi/v1/order (PUT) |
Modify Order (TRADE) |
symbol, side |
orderId, origClientOrderId, quantity, price, priceMatch, recvWindow |
Yes |
/dapi/v1/order (POST) |
New Order (TRADE) |
symbol, side, type |
positionSide, timeInForce, quantity, reduceOnly, price, newClientOrderId, stopPrice, closePosition, activationPrice, callbackRate, workingType, priceProtect, newOrderRespType, priceMatch, selfTradePreventionMode, recvWindow |
Yes |
/dapi/v1/order (GET) |
Query Order (USER_DATA) |
symbol |
orderId, origClientOrderId, recvWindow |
Yes |
/dapi/v1/leverage (POST) |
Change Initial Leverage (TRADE) |
symbol, leverage |
recvWindow |
Yes |
/dapi/v1/marginType (POST) |
Change Margin Type (TRADE) |
symbol, marginType |
recvWindow |
Yes |
/dapi/v1/openOrders (GET) |
Current All Open Orders (USER_DATA) |
None |
symbol, pair, recvWindow |
Yes |
/dapi/v1/orderAmendment (GET) |
Get Order Modify History (USER_DATA) |
symbol |
orderId, origClientOrderId, startTime, endTime, limit, recvWindow |
Yes |
/dapi/v1/positionMargin/history (GET) |
Get Position Margin Change History(TRADE) |
symbol |
type, startTime, endTime, limit, recvWindow |
Yes |
/dapi/v1/positionMargin (POST) |
Modify Isolated Position Margin(TRADE) |
symbol, amount, type |
positionSide, recvWindow |
Yes |
/dapi/v1/adlQuantile (GET) |
Position ADL Quantile Estimation(USER_DATA) |
None |
symbol, recvWindow |
Yes |
/dapi/v1/positionRisk (GET) |
Position Information(USER_DATA) |
None |
marginAsset, pair, recvWindow |
Yes |
/dapi/v1/openOrder (GET) |
Query Current Open Order(USER_DATA) |
symbol |
orderId, origClientOrderId, recvWindow |
Yes |
/dapi/v1/forceOrders (GET) |
User's Force Orders(USER_DATA) |
None |
symbol, autoCloseType, startTime, endTime, limit, recvWindow |
Yes |
/dapi/v1/listenKey (DELETE) |
Close User Data Stream(USER_STREAM) |
None |
None |
No |
/dapi/v1/listenKey (PUT) |
Keepalive User Data Stream (USER_STREAM) |
None |
None |
No |
/dapi/v1/listenKey (POST) |
Start User Data Stream (USER_STREAM) |
None |
None |
No |
Parameters
Common Parameters
- recvWindow: (e.g., 5000)
- startTime: Timestamp in ms (e.g., 1623319461670)
- endTime: Timestamp in ms (e.g., 1641782889000)
- downloadId: get by download id api (e.g., 1)
- symbol:
- incomeType: "TRANSFER","WELCOME_BONUS", "FUNDING_FEE", "REALIZED_PNL", "COMMISSION", "INSURANCE_CLEAR", and "DELIVERED_SETTELMENT"
- startTime: (e.g., 1623319461670)
- endTime: (e.g., 1641782889000)
- page:
- limit: Default 100; max 1000 (e.g., 100)
- pair:
- symbol:
- pair: BTCUSD
- fromId: ID to get aggregate trades from INCLUSIVE. (e.g., 1)
- asset:
- orderId: (e.g., 1)
- orderId: (e.g., 1)
- countdownTime: countdown time, 1000 for 1 second. 0 to cancel the timer
- orderIdList: max length 10 e.g. [1234567,2345678]
- origClientOrderIdList: max length 10 e.g. ["my_id_1","my_id_2"], encode the double quotes. No space after comma.
- origClientOrderId: (e.g., 1)
- leverage: target initial leverage: int from 1 to 125
- dualSidePosition: "true": Hedge Mode; "false": One-way Mode
- type: 1: Add position margin,2: Reduce position margin
- amount: (e.g., 1.0)
- batchOrders: order list. Max 5 orders
- quantity: quantity measured by contract number, Cannot be sent with
closePosition=true (e.g., 1.0)
- price: (e.g., 1.0)
- reduceOnly: "true" or "false". default "false". Cannot be sent in Hedge Mode; cannot be sent with
closePosition=true(Close-All)
- newClientOrderId: A unique id among open orders. Automatically generated if not sent. Can only be string following the rule:
^[\.A-Z\:/a-z0-9_-]{1,36}$ (e.g., 1)
- stopPrice: Used with
STOP/STOP_MARKET or TAKE_PROFIT/TAKE_PROFIT_MARKET orders. (e.g., 1.0)
- closePosition:
true, false;Close-All,used with STOP_MARKET or TAKE_PROFIT_MARKET.
- activationPrice: Used with
TRAILING_STOP_MARKET orders, default as the latest price(supporting different workingType) (e.g., 1.0)
- callbackRate: Used with
TRAILING_STOP_MARKET orders, min 0.1, max 10 where 1 for 1% (e.g., 1.0)
- priceProtect: "TRUE" or "FALSE", default "FALSE". Used with
STOP/STOP_MARKET or TAKE_PROFIT/TAKE_PROFIT_MARKET orders.
- batchOrders: order list. Max 5 orders
- marginAsset:
Enums
- contractType: PERPETUAL | CURRENT_QUARTER | NEXT_QUARTER | CURRENT_QUARTER_DELIVERING | NEXT_QUARTER_DELIVERING | PERPETUAL_DELIVERING
- period: 5m | 15m | 30m | 1h | 2h | 4h | 6h | 12h | 1d
- interval: 1m | 3m | 5m | 15m | 30m | 1h | 2h | 4h | 6h | 8h | 12h | 1d | 3d | 1w | 1M
- marginType: ISOLATED | CROSSED
- positionSide: BOTH | LONG | SHORT
- type: LIMIT | MARKET | STOP | STOP_MARKET | TAKE_PROFIT | TAKE_PROFIT_MARKET | TRAILING_STOP_MARKET
- side: BUY | SELL
- priceMatch: NONE | OPPONENT | OPPONENT_5 | OPPONENT_10 | OPPONENT_20 | QUEUE | QUEUE_5 | QUEUE_10 | QUEUE_20
- timeInForce: GTC | IOC | FOK | GTX
- workingType: MARK_PRICE | CONTRACT_PRICE
- newOrderRespType: ACK | RESULT
- selfTradePreventionMode: NONE | EXPIRE_TAKER | EXPIRE_BOTH | EXPIRE_MAKER
- autoCloseType: LIQUIDATION | ADL
Authentication
For endpoints that require authentication, you will need to provide Binance API credentials.
Required credentials:
- apiKey: Your Binance API key (for header)
- secretKey: Your Binance API secret (for signing)
Base URLs:
Security
Share Credentials
Users can provide Binance API credentials in different ways. The agent will try to retrieve automatically with the two first ways the credentials, but users can also explicitly tell the agent that they have set the credentials or stored them in a .env file, and the agent should re-read that file when they do. The agent can also make http requests with the two first methods without user confirmation.
- Environment variables
Search for the following specific variables only (never dump the full environment):
Authorized environment variables
- Mainnet:
BINANCE_API_KEY and BINANCE_SECRET_KEY
- Testnet:
BINANCE_TESTNET_API_KEY and BINANCE_TESTNET_SECRET_KEY
Read and use in a single exec call so the raw key never enters the agent's context:
KEY="$BINANCE_API_KEY"
SECRET="$BINANCE_SECRET_KEY"
response=$(curl -s -X GET "$URL" \
-H "X-MBX-APIKEY: $KEY" \
--data-urlencode "param1=value1")
echo "$response"
Environment variables must be set before OpenClaw starts. They are inherited at process startup and cannot be injected into a running instance. If you need to add or update credentials without restarting, use a secrets file (see option 2).
- Secrets file (.env)
Check ~/.openclaw/secrets.env , ~/.env, or a .env file in the workspace. Read individual keys with grep, never source the full file:
# Try all credential locations in order
API_KEY=$(grep '^BINANCE_API_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
# Fallback: search .env in known directories (KEY=VALUE then raw line format)
for dir in ~/.openclaw ~; do
[ -n "$API_KEY" ] && break
env_file="$dir/.env"
[ -f "$env_file" ] || continue
# Read first two lines
line1=$(sed -n '1p' "$env_file")
line2=$(sed -n '2p' "$env_file")
# Check if lines contain '=' indicating KEY=VALUE format
if [[ "$line1" == *=* && "$line2" == *=* ]]; then
API_KEY=$(grep '^BINANCE_API_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
else
# Treat lines as raw values
API_KEY="$line1"
SECRET_KEY="$line2"
fi
done
This file can be updated at any time without restarting OpenClaw, keys are read fresh on each invocation. Users can tell you the variables are now set or stored in a .env file, and you should re-read that file when they do.
- Inline file
Sending a file where the content is in the following format:
abc123...xyz
secret123...key
- Never run
printenv, env, export, or set without a specific variable name
- Never run
grep on env files without anchoring to a specific key ('^VARNAME=')
- Never source a secrets file into the shell environment (
source .env or . .env)
- Only read credentials explicitly needed for the current task
- Never echo or log raw credentials in output or replies
- Never commit
TOOLS.md to version control if it contains real credentials — add it to .gitignore
Never Disclose API Key and Secret
Never disclose the location of the API key and secret file.
Never send the API key and secret to any website other than Mainnet and Testnet.
Never Display Full Secrets
When showing credentials to users:
- API Key: Show first 5 + last 4 characters:
su1Qc...8akf
- Secret Key: Always mask, show only last 5:
***...aws1
Example response when asked for credentials:
Account: main
API Key: su1Qc...8akf
Secret: ***...aws1
Environment: Mainnet
Listing Accounts
When listing accounts, show names and environment only — never keys:
Binance Accounts:
- main (Mainnet/Testnet)
- testnet-dev (Testnet)
- futures-keys (Mainnet)
Transactions in Mainnet
When performing transactions in mainnet, always confirm with the user before proceeding by asking them to write "CONFIRM" to proceed.
Binance Accounts
main
- API Key: your_mainnet_api_key
- Secret: your_mainnet_secret
- Testnet: false
testnet-dev
- API Key: your_testnet_api_key
- Secret: your_testnet_secret
- Testnet: true
TOOLS.md Structure
## Binance Accounts
### main
- API Key: abc123...xyz
- Secret: secret123...key
- Testnet: false
- Description: Primary trading account
### testnet-dev
- API Key: test456...abc
- Secret: testsecret...xyz
- Testnet: true
- Description: Development/testing
### futures-keys
- API Key: futures789...def
- Secret: futuressecret...uvw
- Testnet: false
- Description: Futures trading account
Agent Behavior
- Credentials requested: Mask secrets (show last 5 chars only)
- Listing accounts: Show names and environment, never keys
- Account selection: Ask if ambiguous, default to main
- When doing a transaction in mainnet, confirm with user before by asking to write "CONFIRM" to proceed
- New credentials: Prompt for name, environment, signing mode
- When a request requires signing, if the request isn't an order and the API keys aren't described as
mainnet or testnet keys, try to make request to the different base urls and see if it works, without asking the user. If it works, store the keys with the corresponding environment.
Adding New Accounts
When user provides new credentials by Inline file or message:
- Ask for account name
- Ask: Mainnet, Testnet
- Store in
TOOLS.md with masked display confirmation
Signing Requests
For trading endpoints that require a signature:
- Detect key type first, inspect the secret key format before signing.
- Build query string with all parameters, including the timestamp (Unix ms).
- Percent-encode the parameters using UTF-8 according to RFC 3986.
- Sign query string with secretKey using HMAC SHA256, RSA, or Ed25519 (depending on the account configuration).
- Append signature to query string.
- Include
X-MBX-APIKEY header.
Otherwise, do not perform steps 4–6.
New Client Order ID
For endpoints that include the newClientOrderId parameter, the value must always start with agent-. If the parameter is not provided, agent- followed by 18 random alphanumeric characters will be generated automatically. If a value is provided, it will be prefixed with agent-
Example: agent-1a2b3c4d5e6f7g8h9i
User Agent Header
Include User-Agent header with the following string: binance-derivatives-trading-coin-futures/1.1.0 (Skill)
See references/authentication.md for implementation details.
1---2name: derivatives-trading-coin-futures3description: Binance Derivatives-trading-coin-futures request using the Binance API. Authentication requires API key and secret key. Supports testnet and mainnet.4license: MIT5---6
7# Binance Derivatives-trading-coin-futures Skill
8
9Derivatives-trading-coin-futures request on Binance using authenticated API endpoints. Requires API key and secret key for certain endpoints. Return the result in JSON format.
10
11## Quick Reference
12
13| Endpoint | Description | Required | Optional | Authentication |
14|----------|-------------|----------|----------|----------------|
15| `/dapi/v1/account` (GET) | Account Information (USER_DATA) | None | recvWindow | Yes |
16| `/dapi/v1/balance` (GET) | Futures Account Balance (USER_DATA) | None | recvWindow | Yes |
17| `/dapi/v1/positionSide/dual` (GET) | Get Current Position Mode(USER_DATA) | None | recvWindow | Yes |
18| `/dapi/v1/positionSide/dual` (POST) | Change Position Mode(TRADE) | dualSidePosition | recvWindow | Yes |
19| `/dapi/v1/order/asyn` (GET) | Get Download Id For Futures Order History (USER_DATA) | startTime, endTime | recvWindow | Yes |
20| `/dapi/v1/trade/asyn` (GET) | Get Download Id For Futures Trade History (USER_DATA) | startTime, endTime | recvWindow | Yes |
21| `/dapi/v1/income/asyn` (GET) | Get Download Id For Futures Transaction History(USER_DATA) | startTime, endTime | recvWindow | Yes |
22| `/dapi/v1/order/asyn/id` (GET) | Get Futures Order History Download Link by Id (USER_DATA) | downloadId | recvWindow | Yes |
23| `/dapi/v1/trade/asyn/id` (GET) | Get Futures Trade Download Link by Id(USER_DATA) | downloadId | recvWindow | Yes |
24| `/dapi/v1/income/asyn/id` (GET) | Get Futures Transaction History Download Link by Id (USER_DATA) | downloadId | recvWindow | Yes |
25| `/dapi/v1/income` (GET) | Get Income History(USER_DATA) | None | symbol, incomeType, startTime, endTime, page, limit, recvWindow | Yes |
26| `/dapi/v1/leverageBracket` (GET) | Notional Bracket for Pair(USER_DATA) | None | pair, recvWindow | Yes |
27| `/dapi/v2/leverageBracket` (GET) | Notional Bracket for Symbol(USER_DATA) | None | symbol, recvWindow | Yes |
28| `/dapi/v1/commissionRate` (GET) | User Commission Rate (USER_DATA) | symbol | recvWindow | Yes |
29| `/dapi/v1/ticker/24hr` (GET) | 24hr Ticker Price Change Statistics | None | symbol, pair | No |
30| `/futures/data/basis` (GET) | Basis | pair, contractType, period | limit, startTime, endTime | No |
31| `/dapi/v1/time` (GET) | Check Server time | None | None | No |
32| `/dapi/v1/aggTrades` (GET) | Compressed/Aggregate Trades List | symbol | fromId, startTime, endTime, limit | No |
33| `/dapi/v1/continuousKlines` (GET) | Continuous Contract Kline/Candlestick Data | pair, contractType, interval | startTime, endTime, limit | No |
34| `/dapi/v1/exchangeInfo` (GET) | Exchange Information | None | None | No |
35| `/dapi/v1/fundingInfo` (GET) | Get Funding Rate Info | None | None | No |
36| `/dapi/v1/fundingRate` (GET) | Get Funding Rate History of Perpetual Futures | symbol | startTime, endTime, limit | No |
37| `/dapi/v1/constituents` (GET) | Query Index Price Constituents | symbol | None | No |
38| `/dapi/v1/indexPriceKlines` (GET) | Index Price Kline/Candlestick Data | pair, interval | startTime, endTime, limit | No |
39| `/dapi/v1/premiumIndex` (GET) | Index Price and Mark Price | None | symbol, pair | No |
40| `/dapi/v1/klines` (GET) | Kline/Candlestick Data | symbol, interval | startTime, endTime, limit | No |
41| `/futures/data/globalLongShortAccountRatio` (GET) | Long/Short Ratio | pair, period | limit, startTime, endTime | No |
42| `/dapi/v1/markPriceKlines` (GET) | Mark Price Kline/Candlestick Data | symbol, interval | startTime, endTime, limit | No |
43| `/dapi/v1/historicalTrades` (GET) | Old Trades Lookup(MARKET_DATA) | symbol | limit, fromId | No |
44| `/futures/data/openInterestHist` (GET) | Open Interest Statistics | pair, contractType, period | limit, startTime, endTime | No |
45| `/dapi/v1/openInterest` (GET) | Open Interest | symbol | None | No |
46| `/dapi/v1/depth` (GET) | Order Book | symbol | limit | No |
47| `/dapi/v1/premiumIndexKlines` (GET) | Premium index Kline Data | symbol, interval | startTime, endTime, limit | No |
48| `/dapi/v1/trades` (GET) | Recent Trades List | symbol | limit | No |
49| `/dapi/v1/ticker/bookTicker` (GET) | Symbol Order Book Ticker | None | symbol, pair | No |
50| `/dapi/v1/ticker/price` (GET) | Symbol Price Ticker | None | symbol, pair | No |
51| `/futures/data/takerBuySellVol` (GET) | Taker Buy/Sell Volume | pair, contractType, period | limit, startTime, endTime | No |
52| `/dapi/v1/ping` (GET) | Test Connectivity | None | None | No |
53| `/futures/data/topLongShortAccountRatio` (GET) | Top Trader Long/Short Ratio (Accounts) | symbol, period | limit, startTime, endTime | No |
54| `/futures/data/topLongShortPositionRatio` (GET) | Top Trader Long/Short Ratio (Positions) | pair, period | limit, startTime, endTime | No |
55| `/dapi/v1/pmAccountInfo` (GET) | Classic Portfolio Margin Account Information (USER_DATA) | asset | recvWindow | Yes |
56| `/dapi/v1/userTrades` (GET) | Account Trade List (USER_DATA) | None | symbol, pair, orderId, startTime, endTime, fromId, limit, recvWindow | Yes |
57| `/dapi/v1/allOrders` (GET) | All Orders (USER_DATA) | None | symbol, pair, orderId, startTime, endTime, limit, recvWindow | Yes |
58| `/dapi/v1/countdownCancelAll` (POST) | Auto-Cancel All Open Orders (TRADE) | symbol, countdownTime | recvWindow | Yes |
59| `/dapi/v1/allOpenOrders` (DELETE) | Cancel All Open Orders(TRADE) | symbol | recvWindow | Yes |
60| `/dapi/v1/batchOrders` (DELETE) | Cancel Multiple Orders(TRADE) | symbol | orderIdList, origClientOrderIdList, recvWindow | Yes |
61| `/dapi/v1/batchOrders` (PUT) | Modify Multiple Orders(TRADE) | batchOrders | recvWindow | Yes |
62| `/dapi/v1/batchOrders` (POST) | Place Multiple Orders(TRADE) | batchOrders | recvWindow | Yes |
63| `/dapi/v1/order` (DELETE) | Cancel Order (TRADE) | symbol | orderId, origClientOrderId, recvWindow | Yes |
64| `/dapi/v1/order` (PUT) | Modify Order (TRADE) | symbol, side | orderId, origClientOrderId, quantity, price, priceMatch, recvWindow | Yes |
65| `/dapi/v1/order` (POST) | New Order (TRADE) | symbol, side, type | positionSide, timeInForce, quantity, reduceOnly, price, newClientOrderId, stopPrice, closePosition, activationPrice, callbackRate, workingType, priceProtect, newOrderRespType, priceMatch, selfTradePreventionMode, recvWindow | Yes |
66| `/dapi/v1/order` (GET) | Query Order (USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | Yes |
67| `/dapi/v1/leverage` (POST) | Change Initial Leverage (TRADE) | symbol, leverage | recvWindow | Yes |
68| `/dapi/v1/marginType` (POST) | Change Margin Type (TRADE) | symbol, marginType | recvWindow | Yes |
69| `/dapi/v1/openOrders` (GET) | Current All Open Orders (USER_DATA) | None | symbol, pair, recvWindow | Yes |
70| `/dapi/v1/orderAmendment` (GET) | Get Order Modify History (USER_DATA) | symbol | orderId, origClientOrderId, startTime, endTime, limit, recvWindow | Yes |
71| `/dapi/v1/positionMargin/history` (GET) | Get Position Margin Change History(TRADE) | symbol | type, startTime, endTime, limit, recvWindow | Yes |
72| `/dapi/v1/positionMargin` (POST) | Modify Isolated Position Margin(TRADE) | symbol, amount, type | positionSide, recvWindow | Yes |
73| `/dapi/v1/adlQuantile` (GET) | Position ADL Quantile Estimation(USER_DATA) | None | symbol, recvWindow | Yes |
74| `/dapi/v1/positionRisk` (GET) | Position Information(USER_DATA) | None | marginAsset, pair, recvWindow | Yes |
75| `/dapi/v1/openOrder` (GET) | Query Current Open Order(USER_DATA) | symbol | orderId, origClientOrderId, recvWindow | Yes |
76| `/dapi/v1/forceOrders` (GET) | User's Force Orders(USER_DATA) | None | symbol, autoCloseType, startTime, endTime, limit, recvWindow | Yes |
77| `/dapi/v1/listenKey` (DELETE) | Close User Data Stream(USER_STREAM) | None | None | No |
78| `/dapi/v1/listenKey` (PUT) | Keepalive User Data Stream (USER_STREAM) | None | None | No |
79| `/dapi/v1/listenKey` (POST) | Start User Data Stream (USER_STREAM) | None | None | No |
80
81---
82
83## Parameters
84
85### Common Parameters
86
87* **recvWindow**: (e.g., 5000)
88* **startTime**: Timestamp in ms (e.g., 1623319461670)
89* **endTime**: Timestamp in ms (e.g., 1641782889000)
90* **downloadId**: get by download id api (e.g., 1)
91* **symbol**:
92* **incomeType**: "TRANSFER","WELCOME_BONUS", "FUNDING_FEE", "REALIZED_PNL", "COMMISSION", "INSURANCE_CLEAR", and "DELIVERED_SETTELMENT"
93* **startTime**: (e.g., 1623319461670)
94* **endTime**: (e.g., 1641782889000)
95* **page**:
96* **limit**: Default 100; max 1000 (e.g., 100)
97* **pair**:
98* **symbol**:
99* **pair**: BTCUSD
100* **fromId**: ID to get aggregate trades from INCLUSIVE. (e.g., 1)
101* **asset**:
102* **orderId**: (e.g., 1)
103* **orderId**: (e.g., 1)
104* **countdownTime**: countdown time, 1000 for 1 second. 0 to cancel the timer
105* **orderIdList**: max length 10 e.g. [1234567,2345678]
106* **origClientOrderIdList**: max length 10 e.g. ["my_id_1","my_id_2"], encode the double quotes. No space after comma.
107* **origClientOrderId**: (e.g., 1)
108* **leverage**: target initial leverage: int from 1 to 125
109* **dualSidePosition**: "true": Hedge Mode; "false": One-way Mode
110* **type**: 1: Add position margin,2: Reduce position margin
111* **amount**: (e.g., 1.0)
112* **batchOrders**: order list. Max 5 orders
113* **quantity**: quantity measured by contract number, Cannot be sent with `closePosition`=`true` (e.g., 1.0)
114* **price**: (e.g., 1.0)
115* **reduceOnly**: "true" or "false". default "false". Cannot be sent in Hedge Mode; cannot be sent with `closePosition`=`true`(Close-All)
116* **newClientOrderId**: A unique id among open orders. Automatically generated if not sent. Can only be string following the rule: `^[\.A-Z\:/a-z0-9_-]{1,36}$` (e.g., 1)
117* **stopPrice**: Used with `STOP/STOP_MARKET` or `TAKE_PROFIT/TAKE_PROFIT_MARKET` orders. (e.g., 1.0)
118* **closePosition**: `true`, `false`;Close-All,used with `STOP_MARKET` or `TAKE_PROFIT_MARKET`.
119* **activationPrice**: Used with `TRAILING_STOP_MARKET` orders, default as the latest price(supporting different `workingType`) (e.g., 1.0)
120* **callbackRate**: Used with `TRAILING_STOP_MARKET` orders, min 0.1, max 10 where 1 for 1% (e.g., 1.0)
121* **priceProtect**: "TRUE" or "FALSE", default "FALSE". Used with `STOP/STOP_MARKET` or `TAKE_PROFIT/TAKE_PROFIT_MARKET` orders.
122* **batchOrders**: order list. Max 5 orders
123* **marginAsset**:
124
125
126### Enums
127
128* **contractType**: PERPETUAL | CURRENT_QUARTER | NEXT_QUARTER | CURRENT_QUARTER_DELIVERING | NEXT_QUARTER_DELIVERING | PERPETUAL_DELIVERING
129* **period**: 5m | 15m | 30m | 1h | 2h | 4h | 6h | 12h | 1d
130* **interval**: 1m | 3m | 5m | 15m | 30m | 1h | 2h | 4h | 6h | 8h | 12h | 1d | 3d | 1w | 1M
131* **marginType**: ISOLATED | CROSSED
132* **positionSide**: BOTH | LONG | SHORT
133* **type**: LIMIT | MARKET | STOP | STOP_MARKET | TAKE_PROFIT | TAKE_PROFIT_MARKET | TRAILING_STOP_MARKET
134* **side**: BUY | SELL
135* **priceMatch**: NONE | OPPONENT | OPPONENT_5 | OPPONENT_10 | OPPONENT_20 | QUEUE | QUEUE_5 | QUEUE_10 | QUEUE_20
136* **timeInForce**: GTC | IOC | FOK | GTX
137* **workingType**: MARK_PRICE | CONTRACT_PRICE
138* **newOrderRespType**: ACK | RESULT
139* **selfTradePreventionMode**: NONE | EXPIRE_TAKER | EXPIRE_BOTH | EXPIRE_MAKER
140* **autoCloseType**: LIQUIDATION | ADL
141
142
143## Authentication
144
145For endpoints that require authentication, you will need to provide Binance API credentials.
146Required credentials:
147
148* apiKey: Your Binance API key (for header)
149* secretKey: Your Binance API secret (for signing)
150
151Base URLs:
152* Mainnet: https://dapi.binance.com
153* Testnet: https://testnet.binancefuture.com
154
155## Security
156
157### Share Credentials
158
159Users can provide Binance API credentials in different ways. The agent will try to retrieve automatically with the two first ways the credentials, but users can also explicitly tell the agent that they have set the credentials or stored them in a `.env` file, and the agent should re-read that file when they do. The agent can also make http requests with the two first methods without user confirmation.
160
1611. **Environment variables**
162
163Search for the following specific variables only (never dump the full environment):
164
165**Authorized environment variables**
166- Mainnet: `BINANCE_API_KEY` and `BINANCE_SECRET_KEY`
167- Testnet: `BINANCE_TESTNET_API_KEY` and `BINANCE_TESTNET_SECRET_KEY`
168
169Read and use in a single exec call so the raw key never enters the agent's context:
170```bash
171KEY="$BINANCE_API_KEY"
172SECRET="$BINANCE_SECRET_KEY"
173
174response=$(curl -s -X GET "$URL" \
175 -H "X-MBX-APIKEY: $KEY" \
176 --data-urlencode "param1=value1")
177
178echo "$response"
179```
180
181Environment variables must be set before OpenClaw starts. They are inherited at process startup and cannot be injected into a running instance. If you need to add or update credentials without restarting, use a secrets file (see option 2).
182
1832. **Secrets file (.env)**
184
185Check `~/.openclaw/secrets.env` , `~/.env`, or a `.env` file in the workspace. Read individual keys with `grep`, never source the full file:
186```bash
187# Try all credential locations in order
188API_KEY=$(grep '^BINANCE_API_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
189SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' ~/.openclaw/secrets.env 2>/dev/null | cut -d= -f2-)
190
191# Fallback: search .env in known directories (KEY=VALUE then raw line format)
192for dir in ~/.openclaw ~; do
193 [ -n "$API_KEY" ] && break
194 env_file="$dir/.env"
195 [ -f "$env_file" ] || continue
196
197 # Read first two lines
198 line1=$(sed -n '1p' "$env_file")
199 line2=$(sed -n '2p' "$env_file")
200
201 # Check if lines contain '=' indicating KEY=VALUE format
202 if [[ "$line1" == *=* && "$line2" == *=* ]]; then
203 API_KEY=$(grep '^BINANCE_API_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
204 SECRET_KEY=$(grep '^BINANCE_SECRET_KEY=' "$env_file" 2>/dev/null | cut -d= -f2-)
205 else
206 # Treat lines as raw values
207 API_KEY="$line1"
208 SECRET_KEY="$line2"
209 fi
210done
211```
212
213This file can be updated at any time without restarting OpenClaw, keys are read fresh on each invocation. Users can tell you the variables are now set or stored in a `.env` file, and you should re-read that file when they do.
214
2153. **Inline file**
216
217Sending a file where the content is in the following format:
218
219```bash
220abc123...xyz
221secret123...key
222```
223
224* Never run `printenv`, `env`, `export`, or set without a specific variable name
225* Never run `grep` on `env` files without anchoring to a specific key ('`^VARNAME='`)
226* Never source a secrets file into the shell environment (`source .env` or `. .env`)
227* Only read credentials explicitly needed for the current task
228* Never echo or log raw credentials in output or replies
229* Never commit `TOOLS.md` to version control if it contains real credentials — add it to `.gitignore`
230
231### Never Disclose API Key and Secret
232
233Never disclose the location of the API key and secret file.
234
235Never send the API key and secret to any website other than Mainnet and Testnet.
236
237### Never Display Full Secrets
238
239When showing credentials to users:
240- **API Key:** Show first 5 + last 4 characters: `su1Qc...8akf`
241- **Secret Key:** Always mask, show only last 5: `***...aws1`
242
243Example response when asked for credentials:
244Account: main
245API Key: su1Qc...8akf
246Secret: ***...aws1
247Environment: Mainnet
248
249### Listing Accounts
250
251When listing accounts, show names and environment only — never keys:
252Binance Accounts:
253* main (Mainnet/Testnet)
254* testnet-dev (Testnet)
255* futures-keys (Mainnet)
256
257### Transactions in Mainnet
258
259When performing transactions in mainnet, always confirm with the user before proceeding by asking them to write "CONFIRM" to proceed.
260
261---
262
263## Binance Accounts
264
265### main
266- API Key: your_mainnet_api_key
267- Secret: your_mainnet_secret
268- Testnet: false
269
270### testnet-dev
271- API Key: your_testnet_api_key
272- Secret: your_testnet_secret
273- Testnet: true
274
275### TOOLS.md Structure
276
277```bash
278## Binance Accounts
279
280### main
281- API Key: abc123...xyz
282- Secret: secret123...key
283- Testnet: false
284- Description: Primary trading account
285
286### testnet-dev
287- API Key: test456...abc
288- Secret: testsecret...xyz
289- Testnet: true
290- Description: Development/testing
291
292### futures-keys
293- API Key: futures789...def
294- Secret: futuressecret...uvw
295- Testnet: false
296- Description: Futures trading account
297```
298
299## Agent Behavior
300
3011. Credentials requested: Mask secrets (show last 5 chars only)
3022. Listing accounts: Show names and environment, never keys
3033. Account selection: Ask if ambiguous, default to main
3044. When doing a transaction in mainnet, confirm with user before by asking to write "CONFIRM" to proceed
3055. New credentials: Prompt for name, environment, signing mode
3066. When a request requires signing, if the request isn't an order and the API keys aren't described as `mainnet` or `testnet` keys, try to make request to the different base urls and see if it works, without asking the user. If it works, store the keys with the corresponding environment.
307
308## Adding New Accounts
309
310When user provides new credentials by Inline file or message:
311
312* Ask for account name
313* Ask: Mainnet, Testnet
314* Store in `TOOLS.md` with masked display confirmation
315
316## Signing Requests
317
318For trading endpoints that require a signature:
319
3201. **Detect key type first**, inspect the secret key format before signing.
3212. Build query string with all parameters, including the timestamp (Unix ms).
3223. Percent-encode the parameters using UTF-8 according to RFC 3986.
3234. Sign query string with secretKey using HMAC SHA256, RSA, or Ed25519 (depending on the account configuration).
3245. Append signature to query string.
3256. Include `X-MBX-APIKEY` header.
326
327Otherwise, do not perform steps 4–6.
328
329## New Client Order ID
330
331For endpoints that include the `newClientOrderId` parameter, the value must always start with `agent-`. If the parameter is not provided, `agent-` followed by 18 random alphanumeric characters will be generated automatically. If a value is provided, it will be prefixed with `agent-`
332
333Example: `agent-1a2b3c4d5e6f7g8h9i`
334
335## User Agent Header
336
337Include `User-Agent` header with the following string: `binance-derivatives-trading-coin-futures/1.1.0 (Skill)`
338
339See [`references/authentication.md`](./references/authentication.md) for implementation details.