Full BitoPro exchange API wrapper for cryptocurrency trading. Use when: checking crypto prices on BitoPro, viewing order books, getting candlestick charts, checking account balances, placing buy/sell orders, cancelling orders, managing open orders, querying trade fills, batch order operations, viewing deposit/withdrawal history, initiating withdrawals, or looking up trading pair info, fees, and currency details. Supports TWD (New Taiwan Dollar) fiat trading pairs.
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.
BITOPRO_API_KEY, BITOPRO_API_SECRET, BITOPRO_EMAIL| Requirement | Details |
|---|
| API credentials | BitoPro dashboard → API Management |
| Environment variables | BITOPRO_API_KEY, BITOPRO_API_SECRET, BITOPRO_EMAIL |
| Base URL | https://api.bitopro.com/v3 |
| Pair format | Lowercase with underscore: btc_twd, eth_twd, usdt_twd |
BITOPRO_API_KEY: Show first 5 + last 4 characters only (e.g., abc12...6789)BITOPRO_API_SECRET: Always mask, never display any portionclientId: 2147483647 for tracking| Endpoint | Method | Description | Auth |
|---|---|---|---|
/tickers/{pair} | GET | Real-time ticker data | No |
/order-book/{pair} | GET | Order book depth | No |
/trades/{pair} | GET | Recent trade records | No |
/trading-history/{pair} | GET | OHLCV candlesticks | No |
/provisioning/trading-pairs | GET | Trading pair info | No |
/provisioning/currencies | GET | Currency info | No |
/provisioning/limitations-and-fees | GET | Fees and limits | No |
/price/otc/{currency} | GET | OTC buy/sell price | No |
/accounts/balance | GET | Account balances | Yes |
/orders/{pair} | POST | Create order | Yes |
/orders/batch | POST | Create batch orders (max 10) | Yes |
/orders/{pair}/{orderId} | GET | Get single order | Yes |
/orders/{pair}/{orderId} | DELETE | Cancel order | Yes |
/orders | PUT | Cancel batch orders | Yes |
/orders/all or /orders/{pair} | DELETE | Cancel all orders | Yes |
/orders/open | GET | Open orders | Yes |
/orders/all/{pair} | GET | Order history | Yes |
/orders/trades/{pair} | GET | Trade fills | Yes |
/wallet/depositHistory/{currency} | GET | Deposit history | Yes |
/wallet/withdrawHistory/{currency} | GET | Withdraw history | Yes |
/wallet/withdraw/{currency}/{serial} | GET | Get withdraw detail | Yes |
/wallet/withdraw/{currency} | POST | Create withdraw | Yes |
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
Private endpoints require HMAC-SHA384 signing. Headers: X-BITOPRO-APIKEY, X-BITOPRO-PAYLOAD, X-BITOPRO-SIGNATURE.
| Method | Payload Source |
|---|---|
| GET / DELETE | { "identity": BITOPRO_EMAIL, "nonce": timestamp_ms } |
| POST / PUT | { ...requestBody, "nonce": timestamp_ms } (no identity) |
Full signing guide with Python/Go examples: references/authentication.md
get_tickersGET /tickers/{pair} | auth: falsepair (string, optional) — e.g. btc_twd. Omit for all pairs.lastPrice, high24hr, low24hr, volume24hr, priceChange24hr, isBuyerget_order_bookGET /order-book/{pair} | auth: falsepair (string, required), limit (int, optional: 1/5/10/20/30/50, default 5), scale (int, optional)asks[] and bids[] with price, amount, count, totalget_tradesGET /trades/{pair} | auth: falsepair (string, required)data[] with price, amount, isBuyer, timestampget_candlesticksGET /trading-history/{pair} | auth: falsepair (required), resolution (required), from (required, Unix seconds), to (required, Unix seconds)data[] with timestamp (ms!), open, high, low, close, volume1m/5m only last 365 days. Query params in seconds, response timestamp in milliseconds.get_account_balanceGET /accounts/balance | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }data[] with currency, amount, available, stake, tradablecreate_orderPOST /orders/{pair} | auth: true{ ...requestBody, "nonce": timestamp_ms } (no identity)pair (required), action (BUY/SELL, required), type (LIMIT/MARKET/STOP_LIMIT, required), amount (required), timestamp (required), price (required for LIMIT/STOP_LIMIT), stopPrice, condition (>=, <=), timeInForce, clientId (default: 2147483647)nonce must be in both signing payload AND request body. For MARKET BUY, amount is in quote currency (TWD).cancel_orderDELETE /orders/{pair}/{orderId} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (required), orderId (required)get_open_ordersGET /orders/open | auth: true | rate_limit: 5 req/sec{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (optional, filter)id, pair, action, type, price, originalAmount, remainingAmount, executedAmount, avgExecutionPrice, status, fee, feeSymbol, timeInForce, createdTimestamp, updatedTimestampget_order_historyGET /orders/all/{pair} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (required), startTimestamp (ms, default 90d ago), endTimestamp (ms, default now), statusKind (OPEN/DONE/ALL), status (code), orderId (pagination cursor), limit (1-1000, default 100)get_trading_pairsGET /provisioning/trading-pairs | auth: falsedata[] with pair, base, quote, basePrecision, quotePrecision, minLimitBaseAmount, maxLimitBaseAmount, minMarketBuyQuoteAmount, orderOpenLimit, maintain, amountPrecisionget_currenciesGET /provisioning/currencies | auth: falsedata[] with currency, withdrawFee, minWithdraw, maxWithdraw, maxDailyWithdraw, withdraw (bool), deposit (bool), depositConfirmationget_limitations_and_feesGET /provisioning/limitations-and-fees | auth: falsetradingFeeRate[] (VIP tiers with maker/taker fees), restrictionsOfWithdrawalFees[], cryptocurrencyDepositFeeAndConfirmation[], ttCheckFeesAndLimitationsLevel1[], ttCheckFeesAndLimitationsLevel2[]get_otc_priceGET /price/otc/{currency} | auth: falsecurrency (required, e.g. btc)currency, buySwapQuotation.twd.exchangeRate, sellSwapQuotation.twd.exchangeRatecreate_batch_ordersPOST /orders/batch | auth: true | rate_limit: 90 req/min{ ...requestBody, "nonce": timestamp_ms } (no identity)pair (required), action (BUY/SELL), type (LIMIT/MARKET), amount (required), price (required for LIMIT), timestamp (ms), timeInForce, clientIdcancel_batch_ordersPUT /orders | auth: true | rate_limit: 2 req/sec{ ...requestBody, "nonce": timestamp_ms } (no identity){ "BTC_USDT": ["123", "456"], "ETH_USDT": ["789"] }cancel_all_ordersDELETE /orders/all or DELETE /orders/{pair} | auth: true | rate_limit: 1 req/sec{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (optional — omit to cancel all pairs)get_orderGET /orders/{pair}/{orderId} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (required), orderId (required)id, pair, price, avgExecutionPrice, action, type, status, originalAmount, remainingAmount, executedAmount, fee, feeSymbol, bitoFee, stopPrice, condition, timeInForce, createdTimestamp, updatedTimestampget_tradesGET /orders/trades/{pair} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }pair (required), startTimestamp (ms, default 90d ago), endTimestamp (ms, default now), orderId (filter by order), tradeId (pagination cursor), limit (1-1000, default 100)data[] with tradeId, orderId, price, action, baseAmount, quoteAmount, fee, feeSymbol, isTaker, createdTimestampget_deposit_historyGET /wallet/depositHistory/{currency} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }currency (required), startTimestamp (ms), endTimestamp (ms), limit (1-100, default 20), id (pagination cursor), statuses (comma-separated), txID (crypto only)data[] with serial, timestamp, address, amount, fee, total, status, txid, protocol, idtxID filter not supported for TWD.get_withdraw_historyGET /wallet/withdrawHistory/{currency} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }currency (required), startTimestamp (ms), endTimestamp (ms), limit (1-100, default 20), id (pagination cursor), statuses (comma-separated), txID (crypto only)data[] with serial, timestamp, address, amount, fee, total, status, txid, protocol, idtxID filter not supported for TWD.get_withdrawGET /wallet/withdraw/{currency}/{serial} or GET /wallet/withdraw/{currency}/id/{id} | auth: true{ "identity": BITOPRO_EMAIL, "nonce": timestamp_ms }currency (required), serial or id (required — use one to look up)serial, protocol, address, amount, fee, total, status, id, timestampcreate_withdrawPOST /wallet/withdraw/{currency} | auth: true | rate_limit: 60 req/min{ ...requestBody, "nonce": timestamp_ms } (no identity)currency (path, required — currency name without protocol), amount (required), protocol (default MAIN; options: ERC20, TRX, BSC, POLYGON), address (required for non-TWD), message (required for EOS/BNB), bankAccountSerial (TWD only), bankSerial (TWD only)serial, currency, protocol, address, amount, fee, total, id{base}_{quote} lowercase with underscore.amount is in quote currency (TWD), not base.from/to in seconds, response timestamp in milliseconds.create_withdraw. Withdraw addresses must be pre-configured on the BitoPro website.| 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 |
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 | Purpose |
|---|---|
SKILL.md | Core skill definition (this file) |
references/authentication.md | Full HMAC-SHA384 signing guide with Python/Go examples |
references/endpoints.md | Detailed endpoint specs with full request/response examples |
evals/evals.json | Evaluation test cases for skill verification |
LICENSE.md | MIT license |