Skills bitopro-spot
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bitopro/bitopro-skills-hub" ~/.claude/skills/openclaw-skills-bitopro-spot && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/bitopro/bitopro-skills-hub" ~/.openclaw/skills/openclaw-skills-bitopro-spot && rm -rf "$T"
skills/bitopro/bitopro-skills-hub/SKILL.mdBitoPro Spot Skill
You are an AI agent equipped with the full BitoPro cryptocurrency exchange API (22 endpoints). Use this skill when the user needs to: check crypto prices, view order books, look up candlestick charts, query trading pair info and fees, get OTC prices, check account balances, place or batch-place orders, cancel single/batch/all orders, query order details and trade fills, or view deposit and withdrawal history on BitoPro. BitoPro is a Taiwan-based exchange that supports TWD (New Taiwan Dollar) fiat trading pairs.
Quick Start
- Set environment variables:
,BITOPRO_API_KEY
,BITOPRO_API_SECRETBITOPRO_EMAIL - Public endpoints (tickers, order book, trades, candlesticks) require no auth
- Private endpoints (balance, orders) require HMAC-SHA384 signing — see references/authentication.md
Prerequisites
| Requirement | Details |
|---|---|
| API credentials | BitoPro dashboard → API Management |
| Environment variables | , , |
| Base URL | |
| Pair format | Lowercase with underscore: , , |
Security Notes
: Show first 5 + last 4 characters only (e.g.,BITOPRO_API_KEY
)abc12...6789
: Always mask, never display any portionBITOPRO_API_SECRET- Before placing or cancelling any order, display full order details and obtain explicit user confirmation
- All Skill orders must include
for trackingclientId: 2147483647
Quick Reference
| Endpoint | Method | Description | Auth |
|---|---|---|---|
| GET | Real-time ticker data | No |
| GET | Order book depth | No |
| GET | Recent trade records | No |
| GET | OHLCV candlesticks | No |
| GET | Trading pair info | No |
| GET | Currency info | No |
| GET | Fees and limits | No |
| GET | OTC buy/sell price | No |
| GET | Account balances | Yes |
| POST | Create order | Yes |
| POST | Create batch orders (max 10) | Yes |
| GET | Get single order | Yes |
| DELETE | Cancel order | Yes |
| PUT | Cancel batch orders | Yes |
or | DELETE | Cancel all orders | Yes |
| GET | Open orders | Yes |
| GET | Order history | Yes |
| GET | Trade fills | Yes |
| GET | Deposit history | Yes |
| GET | Withdraw history | Yes |
| GET | Get withdraw detail | Yes |
| POST | Create withdraw | Yes |
Enums
Order Side:
BUY, SELL | Order Type: LIMIT, MARKET, STOP_LIMIT | Time in Force: GTC (default), POST_ONLY
Status Kind Filter:
OPEN, DONE, ALL
Order Status Codes: -1 (Not Triggered), 0 (Unfilled), 1 (Partial Fill), 2 (Completed), 3 (Partial Complete + Cancelled), 4 (Cancelled), 6 (Post-Only Cancelled)
Candlestick Resolution:
1m, 5m, 15m, 30m, 1h, 3h, 4h, 6h, 12h, 1d, 1w, 1M
Deposit Status (crypto):
PROCESSING, COMPLETE, EXPIRED, INVALID, WAIT_PROCESS, CANCELLED
Deposit Status (TWD):
PROCESSING, COMPLETE, INVALID, WAIT_PROCESS, CANCELLED, FAILED
Withdraw Status (crypto):
PROCESSING, COMPLETE, EXPIRED, INVALID, WAIT_PROCESS, WAIT_CONFIRMATION, EMAIL_VERIFICATION, CANCELLED
Withdraw Status (TWD):
PROCESSING, COMPLETE, INVALID, WAIT_PROCESS, EMAIL_VERIFICATION, CANCELLED, FAILED
Withdraw Protocol:
MAIN, ERC20, OMNI, TRX, BSC, POLYGON
Authentication
Private endpoints require HMAC-SHA384 signing. Headers:
X-BITOPRO-APIKEY, X-BITOPRO-PAYLOAD, X-BITOPRO-SIGNATURE.
| Method | Payload Source |
|---|---|
| GET / DELETE | |
| POST / PUT | (no ) |
Full signing guide with Python/Go examples: references/authentication.md
Tools
Tool 1: get_tickers
get_tickers- endpoint:
| auth: falseGET /tickers/{pair} - params:
(string, optional) — e.g.pair
. Omit for all pairs.btc_twd - returns:
,lastPrice
,high24hr
,low24hr
,volume24hr
,priceChange24hrisBuyer
Tool 2: get_order_book
get_order_book- endpoint:
| auth: falseGET /order-book/{pair} - params:
(string, required),pair
(int, optional: 1/5/10/20/30/50, default 5),limit
(int, optional)scale - returns:
andasks[]
withbids[]
,price
,amount
,counttotal
Tool 3: get_trades
get_trades- endpoint:
| auth: falseGET /trades/{pair} - params:
(string, required)pair - returns:
withdata[]
,price
,amount
,isBuyertimestamp
Tool 4: get_candlesticks
get_candlesticks- endpoint:
| auth: falseGET /trading-history/{pair} - params:
(required),pair
(required),resolution
(required, Unix seconds),from
(required, Unix seconds)to - returns:
withdata[]
(ms!),timestamp
,open
,high
,low
,closevolume - note:
/1m
only last 365 days. Query params in seconds, response timestamp in milliseconds.5m
Tool 5: get_account_balance
get_account_balance- endpoint:
| auth: trueGET /accounts/balance - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params: none
- returns:
withdata[]
,currency
,amount
,available
,staketradable
Tool 6: create_order
create_order- endpoint:
| auth: truePOST /orders/{pair} - signing:
(no{ ...requestBody, "nonce": timestamp_ms }
)identity - params:
(required),pair
(BUY/SELL, required),action
(LIMIT/MARKET/STOP_LIMIT, required),type
(required),amount
(required),timestamp
(required for LIMIT/STOP_LIMIT),price
,stopPrice
(>=, <=),condition
,timeInForce
(default: 2147483647)clientId - critical:
must be in both signing payload AND request body. For MARKET BUY,nonce
is in quote currency (TWD).amount - safety: Always confirm order details with user before executing.
Tool 7: cancel_order
cancel_order- endpoint:
| auth: trueDELETE /orders/{pair}/{orderId} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),pair
(required)orderId
Tool 8: get_open_orders
get_open_orders- endpoint:
| auth: true | rate_limit: 5 req/secGET /orders/open - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(optional, filter)pair - returns: Order objects with
,id
,pair
,action
,type
,price
,originalAmount
,remainingAmount
,executedAmount
,avgExecutionPrice
,status
,fee
,feeSymbol
,timeInForce
,createdTimestampupdatedTimestamp
Tool 9: get_order_history
get_order_history- endpoint:
| auth: trueGET /orders/all/{pair} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),pair
(ms, default 90d ago),startTimestamp
(ms, default now),endTimestamp
(OPEN/DONE/ALL),statusKind
(code),status
(pagination cursor),orderId
(1-1000, default 100)limit
Tool 10: get_trading_pairs
get_trading_pairs- endpoint:
| auth: falseGET /provisioning/trading-pairs - params: none
- returns:
withdata[]
,pair
,base
,quote
,basePrecision
,quotePrecision
,minLimitBaseAmount
,maxLimitBaseAmount
,minMarketBuyQuoteAmount
,orderOpenLimit
,maintainamountPrecision
Tool 11: get_currencies
get_currencies- endpoint:
| auth: falseGET /provisioning/currencies - params: none
- returns:
withdata[]
,currency
,withdrawFee
,minWithdraw
,maxWithdraw
,maxDailyWithdraw
(bool),withdraw
(bool),depositdepositConfirmation
Tool 12: get_limitations_and_fees
get_limitations_and_fees- endpoint:
| auth: falseGET /provisioning/limitations-and-fees - params: none
- returns:
(VIP tiers with maker/taker fees),tradingFeeRate[]
,restrictionsOfWithdrawalFees[]
,cryptocurrencyDepositFeeAndConfirmation[]
,ttCheckFeesAndLimitationsLevel1[]ttCheckFeesAndLimitationsLevel2[]
Tool 13: get_otc_price
get_otc_price- endpoint:
| auth: falseGET /price/otc/{currency} - params:
(required, e.g.currency
)btc - returns:
,currency
,buySwapQuotation.twd.exchangeRatesellSwapQuotation.twd.exchangeRate
Tool 14: create_batch_orders
create_batch_orders- endpoint:
| auth: true | rate_limit: 90 req/minPOST /orders/batch - signing:
(no{ ...requestBody, "nonce": timestamp_ms }
)identity - params: Array of up to 10 order objects, each with:
(required),pair
(BUY/SELL),action
(LIMIT/MARKET),type
(required),amount
(required for LIMIT),price
(ms),timestamp
,timeInForceclientId - safety: Always confirm all order details with user before executing.
Tool 15: cancel_batch_orders
cancel_batch_orders- endpoint:
| auth: true | rate_limit: 2 req/secPUT /orders - signing:
(no{ ...requestBody, "nonce": timestamp_ms }
)identity - params: JSON object keyed by pair, values are arrays of order IDs. e.g.
{ "BTC_USDT": ["123", "456"], "ETH_USDT": ["789"] } - safety: Always confirm cancellation targets with user before executing.
Tool 16: cancel_all_orders
cancel_all_orders- endpoint:
orDELETE /orders/all
| auth: true | rate_limit: 1 req/secDELETE /orders/{pair} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(optional — omit to cancel all pairs)pair - safety: Always confirm with user before executing. This cancels ALL open orders.
Tool 17: get_order
get_order- endpoint:
| auth: trueGET /orders/{pair}/{orderId} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),pair
(required)orderId - returns: Full order object with
,id
,pair
,price
,avgExecutionPrice
,action
,type
,status
,originalAmount
,remainingAmount
,executedAmount
,fee
,feeSymbol
,bitoFee
,stopPrice
,condition
,timeInForce
,createdTimestampupdatedTimestamp - note: History available only for past 90 days.
Tool 18: get_trades
get_trades- endpoint:
| auth: trueGET /orders/trades/{pair} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),pair
(ms, default 90d ago),startTimestamp
(ms, default now),endTimestamp
(filter by order),orderId
(pagination cursor),tradeId
(1-1000, default 100)limit - returns:
withdata[]
,tradeId
,orderId
,price
,action
,baseAmount
,quoteAmount
,fee
,feeSymbol
,isTakercreatedTimestamp
Tool 19: get_deposit_history
get_deposit_history- endpoint:
| auth: trueGET /wallet/depositHistory/{currency} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),currency
(ms),startTimestamp
(ms),endTimestamp
(1-100, default 20),limit
(pagination cursor),id
(comma-separated),statuses
(crypto only)txID - returns:
withdata[]
,serial
,timestamp
,address
,amount
,fee
,total
,status
,txid
,protocolid - note: Max query window 90 days.
filter not supported for TWD.txID
Tool 20: get_withdraw_history
get_withdraw_history- endpoint:
| auth: trueGET /wallet/withdrawHistory/{currency} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),currency
(ms),startTimestamp
(ms),endTimestamp
(1-100, default 20),limit
(pagination cursor),id
(comma-separated),statuses
(crypto only)txID - returns:
withdata[]
,serial
,timestamp
,address
,amount
,fee
,total
,status
,txid
,protocolid - note: Max query window 90 days.
filter not supported for TWD.txID
Tool 21: get_withdraw
get_withdraw- endpoint:
orGET /wallet/withdraw/{currency}/{serial}
| auth: trueGET /wallet/withdraw/{currency}/id/{id} - signing:
{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } - params:
(required),currency
orserial
(required — use one to look up)id - returns:
,serial
,protocol
,address
,amount
,fee
,total
,status
,idtimestamp
Tool 22: create_withdraw
create_withdraw- endpoint:
| auth: true | rate_limit: 60 req/minPOST /wallet/withdraw/{currency} - signing:
(no{ ...requestBody, "nonce": timestamp_ms }
)identity - params:
(path, required — currency name without protocol),currency
(required),amount
(defaultprotocol
; options:MAIN
,ERC20
,TRX
,BSC
),POLYGON
(required for non-TWD),address
(required for EOS/BNB),message
(TWD only),bankAccountSerial
(TWD only)bankSerial - returns:
,serial
,currency
,protocol
,address
,amount
,fee
,totalid - critical: Withdraw addresses must be pre-configured at https://www.bitopro.com/address
- safety: Always confirm withdrawal details with user before executing. Display amount, address, fee, and network.
Agent Behavior
- Validate trading pair format — must be
lowercase with underscore.{base}_{quote} - Handle errors gracefully. Explain API errors to the user and suggest corrections.
- Respect rate limits. Public: 600 req/min/IP. Private: 600 req/min/IP + 600 req/min/UID. Create: 1200/min. Batch create: 90/min. Cancel: 900/min. Cancel all/batch: 1-2/sec. Open orders: 5/sec. Withdraw: 60/min.
- Market order specifics. For MARKET BUY,
is in quote currency (TWD), not base.amount - Candlestick timestamps. Query
/from
in seconds, responseto
in milliseconds.timestamp - Withdrawal safety. Always display amount, destination address, fee, and network/protocol for user confirmation before executing
. Withdraw addresses must be pre-configured on the BitoPro website.create_withdraw - Batch operations. Batch create supports max 10 orders. Always show the full list of orders/cancellations for user confirmation.
Error Handling
| HTTP Code | Description |
|---|---|
| 400 | Bad Request (invalid parameters) |
| 401 | Unauthorized (invalid API key or signature) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Not Found (invalid pair or order ID) |
| 429 | Rate Limit Exceeded |
Skill Identification
All requests must include these headers for tracking:
User-Agent: bitopro-spot/2.0.0 (Skill) X-Execution-Source: Claude-Skill X-Skill-Name: bitopro/spot X-Skill-Version: 2.0.0 X-Client-Type: AI-Agent
All order requests must include
clientId: 2147483647 to distinguish AI-executed orders from manual trades.
File Reference
| File | Purpose |
|---|---|
| Core skill definition (this file) |
| Full HMAC-SHA384 signing guide with Python/Go examples |
| Detailed endpoint specs with full request/response examples |
| Evaluation test cases for skill verification |
| MIT license |