BitoPro exchange API wrapper for executing spot trades and managing your account. Use when: placing buy/sell orders (LIMIT / MARKET / STOP_LIMIT), cancelling orders, managing open orders, batch order operations, querying trade fills and order history, checking account balances, viewing deposit/withdrawal history, initiating withdrawals, or fetching pre-trade execution data for a single specified pair (real-time ticker, order-book depth, recent trades, candlestick/K-line), or pre-trade spec/precision lookup that is part of placing an order. Supports TWD (New Taiwan Dollar) fiat trading pairs. Requires API key. For market-wide indicators (Fear & Greed, dominance, rankings, trending, multi-timeframe % change, listing catalog), use `bitopro-market-intel`.
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 |