Install
openclaw skills install binance-spot-openapi-skillOperate Binance Spot market, account, and order APIs through UXC with a curated OpenAPI schema, Binance query signing, and separate mainnet/testnet link flows.
openclaw skills install binance-spot-openapi-skillUse this skill to run Binance Spot REST operations through uxc + OpenAPI.
Reuse the uxc skill for shared execution, auth, and error-handling guidance.
uxc is installed and available in PATH.https://api.binance.comhttps://testnet.binance.visionhttps://raw.githubusercontent.com/holon-run/uxc/main/skills/binance-spot-openapi-skill/references/binance-spot.openapi.jsonThis skill covers curated Binance Spot REST endpoints for:
This skill does not cover:
orderList/* endpointsorder/cancelReplaceorder/amend/*historicalTradesuiKlinesticker/tradingDay/sapi/* endpointshttps://demo-api.binance.comPublic market endpoints do not require credentials.
Signed Spot endpoints require:
api_key field for X-MBX-APIKEYprivate_key field for Ed25519 PKCS#8 PEM signing, or secret_key for deprecated HMAC SHA256 signingBinance Spot testnet uses a separate host and separate API key records from mainnet:
https://testnet.binance.visionThere are two practical testnet flows:
Ed25519 (recommended by Binance)
API key for that Ed25519 key record.API key in X-MBX-APIKEY, and use the matching private key PEM for signing.HMAC (legacy compatibility)
API key and Secret key.API key in X-MBX-APIKEY, and use Secret key for HMAC SHA256 signing.Important:
API key.API key.API key with an Ed25519 private key, or an Ed25519 API key with an HMAC secret.-1022 Signature for this request is not valid.Binance recommends Ed25519. Store the private key PEM text in an environment variable, or source it from 1Password.
export BINANCE_TESTNET_ED25519_PRIVATE_KEY="$(cat /absolute/path/to/binance_testnet_ed25519_private.pem)"
export BINANCE_MAINNET_ED25519_PRIVATE_KEY="$(cat /absolute/path/to/binance_mainnet_ed25519_private.pem)"
Create one credential per environment so mainnet and testnet keys are never mixed:
uxc auth credential set binance-spot-mainnet \
--auth-type api_key \
--field api_key=env:BINANCE_MAINNET_API_KEY \
--field private_key=env:BINANCE_MAINNET_ED25519_PRIVATE_KEY
uxc auth credential set binance-spot-testnet \
--auth-type api_key \
--field api_key=env:BINANCE_TESTNET_API_KEY \
--field private_key=env:BINANCE_TESTNET_ED25519_PRIVATE_KEY
Add one signer binding per environment:
uxc auth binding add \
--id binance-spot-mainnet \
--host api.binance.com \
--path-prefix /api/v3 \
--scheme https \
--credential binance-spot-mainnet \
--signer-json '{"kind":"ed25519_query_v1","algorithm":"ed25519","signing_field":"private_key","key_field":"api_key","key_placement":"header","key_name":"X-MBX-APIKEY","signature_param":"signature","signature_encoding":"base64","timestamp_param":"timestamp","timestamp_unit":"milliseconds","canonicalization":{"mode":"preserve_order"}}' \
--priority 100
uxc auth binding add \
--id binance-spot-testnet \
--host testnet.binance.vision \
--path-prefix /api/v3 \
--scheme https \
--credential binance-spot-testnet \
--signer-json '{"kind":"ed25519_query_v1","algorithm":"ed25519","signing_field":"private_key","key_field":"api_key","key_placement":"header","key_name":"X-MBX-APIKEY","signature_param":"signature","signature_encoding":"base64","timestamp_param":"timestamp","timestamp_unit":"milliseconds","canonicalization":{"mode":"preserve_order"}}' \
--priority 100
If you already have legacy HMAC keys, uxc still supports them:
uxc auth credential set binance-spot-mainnet-hmac \
--auth-type api_key \
--field api_key=env:BINANCE_MAINNET_API_KEY \
--field secret_key=env:BINANCE_MAINNET_SECRET_KEY
uxc auth credential set binance-spot-testnet-hmac \
--auth-type api_key \
--field api_key=env:BINANCE_TESTNET_API_KEY \
--field secret_key=env:BINANCE_TESTNET_SECRET_KEY
uxc auth binding add \
--id binance-spot-mainnet-hmac \
--host api.binance.com \
--path-prefix /api/v3 \
--scheme https \
--credential binance-spot-mainnet-hmac \
--signer-json '{"kind":"hmac_query_v1","algorithm":"hmac_sha256","signing_field":"secret_key","key_field":"api_key","key_placement":"header","key_name":"X-MBX-APIKEY","signature_param":"signature","signature_encoding":"hex","timestamp_param":"timestamp","timestamp_unit":"milliseconds","canonicalization":{"mode":"preserve_order"}}' \
--priority 100
uxc auth binding add \
--id binance-spot-testnet-hmac \
--host testnet.binance.vision \
--path-prefix /api/v3 \
--scheme https \
--credential binance-spot-testnet-hmac \
--signer-json '{"kind":"hmac_query_v1","algorithm":"hmac_sha256","signing_field":"secret_key","key_field":"api_key","key_placement":"header","key_name":"X-MBX-APIKEY","signature_param":"signature","signature_encoding":"hex","timestamp_param":"timestamp","timestamp_unit":"milliseconds","canonicalization":{"mode":"preserve_order"}}' \
--priority 100
Use fixed link commands by default:
command -v binance-spot-mainnet-openapi-cliuxc link binance-spot-mainnet-openapi-cli https://api.binance.com --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/binance-spot-openapi-skill/references/binance-spot.openapi.jsoncommand -v binance-spot-testnet-openapi-cliuxc link binance-spot-testnet-openapi-cli https://testnet.binance.vision --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/binance-spot-openapi-skill/references/binance-spot.openapi.jsonDiscover operations with help-first flow:
binance-spot-mainnet-openapi-cli -hbinance-spot-testnet-openapi-cli -hbinance-spot-testnet-openapi-cli post:/api/v3/order/test -hbinance-spot-testnet-openapi-cli get:/api/v3/account -hExecute reads first:
binance-spot-mainnet-openapi-cli get:/api/v3/ticker/price symbol=BTCUSDTbinance-spot-testnet-openapi-cli get:/api/v3/account omitZeroBalances=true recvWindow=5000Use order/test before real writes:
binance-spot-testnet-openapi-cli post:/api/v3/order/test symbol=BTCUSDT side=BUY type=MARKET quoteOrderQty=100 recvWindow=5000get:/api/v3/pingget:/api/v3/timeget:/api/v3/exchangeInfoget:/api/v3/avgPriceget:/api/v3/depthget:/api/v3/klinesget:/api/v3/ticker/24hrget:/api/v3/ticker/priceget:/api/v3/tradesget:/api/v3/accountget:/api/v3/openOrdersget:/api/v3/orderget:/api/v3/allOrdersget:/api/v3/myTradesget:/api/v3/rateLimit/orderpost:/api/v3/order/testpost:/api/v3/orderdelete:/api/v3/orderdelete:/api/v3/openOrders--text.ok, kind, protocol, data, error.order/test as the default validation path before any real order placement.exchangeInfo for symbol filters and ticker/price or depth for current market context.-1021, call get:/api/v3/time, then retry with a fresh timestamp and, if needed, a larger recvWindow.-1022, first verify you are using the API key from the same Binance key record as the signing material:
API key + matching private key PEMAPI key + matching Secret key--path-prefix /api/v3 on auth bindings. uxc now resolves OpenAPI auth against the final operation URL, so this narrower binding works for signed Spot requests and avoids over-broad host-level matching.timestamp and signature are injected by the signer binding; users normally provide business parameters plus optional recvWindow.binance-spot-*-openapi-cli <operation> ... is equivalent to uxc <host> --schema-url <binance_spot_openapi_schema> <operation> ....references/usage-patterns.mdreferences/binance-spot.openapi.json