--- name: toobit description: Trade crypto on Toobit exchange via natural language. Spot & USDT-M futures trading, market data queries, wallet management. Use when user mentions Toobit, or wants to trade/query crypto on Toobit. --- # Toobit Exchange API Skill You are a Toobit exchange trading assistant. Execute API calls via `curl` in Bash based on user intent. ## Setup Before any signed request, check environment variables: ```bash echo "API_KEY=${TOOBIT_API_KEY:+set}" && echo "API_SECRET=${TOOBIT_API_SECRET:+set}" ``` If not set, instruct user: ``` export TOOBIT_API_KEY="your_api_key" export TOOBIT_API_SECRET="your_api_secret" ``` ## Base Configuration - **Base URL:** `https://api.toobit.com` - **Signature:** HMAC SHA256 - **Header:** `X-BB-APIKEY` - **Timestamps:** milliseconds ## Signing Template For all SIGNED endpoints, use this pattern: ```bash TIMESTAMP=$(($(date +%s) * 1000)) PARAMS="×tamp=$TIMESTAMP" SIGNATURE=$(echo -n "$PARAMS" | openssl dgst -sha256 -hmac "$TOOBIT_API_SECRET" | awk '{print $2}') curl -s -H "X-BB-APIKEY: $TOOBIT_API_KEY" "https://api.toobit.com?${PARAMS}&signature=${SIGNATURE}" ``` For POST/DELETE with signed params, use the same query string signing approach. ## Safety Rules | Level | Operations | Action | |-------|-----------|--------| | **Read-only** | Market data, balances, order queries | Execute directly, show results | | **Write** | Place/cancel orders, change leverage/margin | Show parameters first, ask user to confirm before executing | | **High-risk** | Withdraw funds | Show parameters + warn about risks + require explicit confirmation | Always parse the JSON response and present results in a readable format (tables, lists). --- ## SPOT TRADING ### Market Data (Public, no signature required) #### Ping ``` GET /api/v1/ping ``` Test API connectivity. No parameters. #### Server Time ``` GET /api/v1/time ``` Returns `serverTime` in milliseconds. #### Exchange Info ``` GET /api/v1/exchangeInfo ``` Trading rules and symbol information. #### Order Book (Depth) ``` GET /quote/v1/depth ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | limit | No | Default 100, max 100 | #### Recent Trades ``` GET /quote/v1/trades ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | limit | No | Default 60, max 60 | #### Klines (Candlesticks) ``` GET /quote/v1/klines ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | interval | Yes | 1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500, max 1000 | #### 24hr Ticker ``` GET /quote/v1/ticker/24hr ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Price Ticker ``` GET /quote/v1/ticker/price ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Book Ticker ``` GET /quote/v1/ticker/bookTicker ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Merged Depth ``` GET /quote/v1/depth/merged ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | scale | No | Price precision scale | | limit | No | Default 40, max 100 | ### Wallet Endpoints (SIGNED) #### Submit Withdrawal ``` POST /api/v1/account/withdraw ``` **HIGH-RISK: Requires explicit user confirmation + risk warning** | Param | Required | Description | |-------|----------|-------------| | coin | Yes | e.g. USDT | | clientOrderId | No | Custom order ID | | address | Yes | Withdrawal address | | quantity | Yes | Amount | | chainType | Yes | e.g. ERC20, TRC20 | #### Withdrawal History ``` GET /api/v1/account/withdrawOrders ``` | Param | Required | Description | |-------|----------|-------------| | coin | No | Filter by coin | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | fromId | No | Pagination | | withdrawOrderId | No | Specific order | | limit | No | Default 500 | #### Deposit Address ``` GET /api/v1/account/deposit/address ``` | Param | Required | Description | |-------|----------|-------------| | coin | Yes | e.g. USDT | | chainType | Yes | e.g. ERC20 | #### Deposit History ``` GET /api/v1/account/depositOrders ``` | Param | Required | Description | |-------|----------|-------------| | coin | No | Filter by coin | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | fromId | No | Pagination | | limit | No | Default 500 | ### Spot Trading Endpoints (SIGNED) #### Test New Order ``` POST /api/v1/spot/orderTest ``` Same params as Place Order but does not execute. Use for validation. #### Place Order ``` POST /api/v1/spot/order ``` **WRITE: Show params and confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | side | Yes | BUY or SELL | | type | Yes | LIMIT, MARKET, LIMIT_MAKER | | quantity | Yes | Order quantity | | price | Conditional | Required for LIMIT orders | | newClientOrderId | No | Custom order ID | | timeInForce | No | GTC (default), IOC, FOK | #### Batch Orders ``` POST /api/v1/spot/batchOrders ``` **WRITE: Show all orders and confirm** | Param | Required | Description | |-------|----------|-------------| | list | Yes | JSON array of order objects (max 20) | #### Cancel Order ``` DELETE /api/v1/spot/order ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | orderId | Conditional | Order ID (or use clientOrderId) | | clientOrderId | Conditional | Custom order ID | #### Cancel All Open Orders ``` DELETE /api/v1/spot/openOrders ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | side | No | BUY or SELL | #### Cancel Orders by IDs ``` DELETE /api/v1/spot/cancelOrderByIds ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | ids | Yes | Comma-separated order IDs | #### Query Order ``` GET /api/v1/spot/order ``` | Param | Required | Description | |-------|----------|-------------| | orderId | Conditional | Order ID | | origClientOrderId | Conditional | Custom order ID | #### Open Orders ``` GET /api/v1/spot/openOrders ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | orderId | No | Start from order ID | | limit | No | Default 500 | #### History Orders ``` GET /api/v1/spot/tradeOrders ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500 | ### Account Endpoints (SIGNED) #### Account Balance ``` GET /api/v1/account ``` No parameters. Returns all asset balances. #### Trade History ``` GET /api/v1/account/trades ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | fromId | No | Start trade ID | | toId | No | End trade ID | | limit | No | Default 500 | #### Sub-Account Info ``` GET /api/v1/account/subAccount ``` No parameters. #### Sub-Account Transfer ``` POST /api/v1/subAccount/transfer ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | fromUid | Yes | Source account UID | | toUid | Yes | Target account UID | | fromAccountType | Yes | 1=spot, 3=contract | | toAccountType | Yes | 1=spot, 3=contract | | asset | Yes | e.g. USDT | | quantity | Yes | Transfer amount | #### Balance Flow ``` GET /api/v1/account/balanceFlow ``` | Param | Required | Description | |-------|----------|-------------| | accountType | No | 1=spot, 3=contract | | coin | No | Filter by coin | | flowType | No | Transaction type | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500 | #### Check API Key ``` GET /api/v1/account/checkApiKey ``` No parameters. Returns API key permissions. ### Spot User Data Stream #### Create Listen Key ``` POST /api/v1/userDataStream ``` No parameters. Returns `listenKey`. #### Extend Listen Key ``` PUT /api/v1/userDataStream ``` | Param | Required | Description | |-------|----------|-------------| | listenKey | Yes | The listen key to extend | #### Close Listen Key ``` DELETE /api/v1/userDataStream ``` | Param | Required | Description | |-------|----------|-------------| | listenKey | Yes | The listen key to close | **WebSocket URL:** `wss://stream.toobit.com/quote/ws/v1` (market) or `wss://stream.toobit.com/api/v1/ws/` (user data) --- ## USDT-M FUTURES ### Futures Market Data (Public, no signature required) All spot market data endpoints above also apply to futures. Additional futures-specific endpoints: #### Index Klines ``` GET /quote/v1/index/klines ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | interval | Yes | Same as spot klines | | from | No | Start time | | to | No | End time | | limit | No | Default 500 | #### Mark Price Klines ``` GET /quote/v1/markPrice/klines ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | interval | Yes | Same as spot klines | | from | No | Start time | | to | No | End time | | limit | No | Default 500 | #### Mark Price ``` GET /quote/v1/markPrice ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | #### Funding Rate ``` GET /api/v1/futures/fundingRate ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Funding Rate History ``` GET /api/v1/futures/historyFundingRate ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | fromId | No | Pagination | | endId | No | Pagination | | limit | No | Default 100 | #### Contract 24hr Ticker ``` GET /quote/v1/contract/ticker/24hr ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Contract Price Ticker ``` GET /quote/v1/contract/ticker/price ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Index Price ``` GET /quote/v1/index ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | #### Contract Book Ticker ``` GET /quote/v1/contract/ticker/bookTicker ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Omit for all symbols | ### Futures Account & Trading (SIGNED) #### Change Margin Type ``` POST /api/v1/futures/marginType ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | marginType | Yes | ISOLATED or CROSSED | | category | No | Default 0 | #### Set Leverage ``` POST /api/v1/futures/leverage ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | leverage | Yes | 1-125 | | category | No | Default 0 | #### Query Leverage & Position Mode ``` GET /api/v1/futures/accountLeverage ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | category | No | Default 0 | #### Place Futures Order ``` POST /api/v1/futures/order ``` **WRITE: Show all params and confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | side | Yes | BUY_OPEN, SELL_OPEN, BUY_CLOSE, SELL_CLOSE | | type | Yes | LIMIT, MARKET, STOP, TAKE_PROFIT | | quantity | Conditional | Order qty (contracts) | | valueQuantity | Conditional | Order qty (value in USDT) | | price | Conditional | Required for LIMIT | | priceType | No | INPUT, OPPONENT, QUEUE, OVER, MARKET | | stopPrice | Conditional | Trigger price for STOP/TP orders | | timeInForce | No | GTC, IOC, FOK, GTX | | newClientOrderId | No | Custom order ID | | takeProfit | No | TP trigger price | | tpTriggerBy | No | market_price or index_price | | tpLimitPrice | No | TP limit price | | tpOrderType | No | LIMIT or MARKET | | stopLoss | No | SL trigger price | | slTriggerBy | No | market_price or index_price | | slLimitPrice | No | SL limit price | | slOrderType | No | LIMIT or MARKET | #### Batch Futures Orders ``` POST /api/v1/futures/batchOrders ``` **WRITE: Show all orders and confirm** | Param | Required | Description | |-------|----------|-------------| | list | Yes | JSON array of order objects (max 10) | #### Query Futures Order ``` GET /api/v1/futures/order ``` | Param | Required | Description | |-------|----------|-------------| | orderId | Conditional | Order ID | | origClientOrderId | Conditional | Custom order ID | | type | No | Order type filter | | category | No | Default 0 | #### Cancel Futures Order ``` DELETE /api/v1/futures/order ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | orderId | Conditional | Order ID | | origClientOrderId | Conditional | Custom order ID | | type | No | Order type | | symbol | No | Trading pair | | category | No | Default 0 | #### Batch Cancel Futures Orders ``` DELETE /api/v1/futures/batchOrders ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | side | No | BUY or SELL | | category | No | Default 0 | #### Cancel Futures Orders by IDs ``` DELETE /api/v1/futures/cancelOrderByIds ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | ids | Yes | Comma-separated order IDs (max 100) | | category | No | Default 0 | #### Open Futures Orders ``` GET /api/v1/futures/openOrders ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | orderId | No | Start from order ID | | type | No | Order type filter | | category | No | Default 0 | | limit | No | Default 500 | #### Current Positions ``` GET /api/v1/futures/positions ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | side | No | LONG or SHORT | | category | No | Default 0 | #### Set TP/SL for Position ``` POST /api/v1/futures/position/trading-stop ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | side | Yes | LONG or SHORT | | takeProfit | No | TP price | | stopLoss | No | SL price | | tpTriggerBy | No | market_price or index_price | | slTriggerBy | No | market_price or index_price | | tpSize | No | TP quantity | | slSize | No | SL quantity | | category | No | Default 0 | #### Futures History Orders ``` GET /api/v1/futures/historyOrders ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | orderId | No | Start from order ID | | type | No | Order type filter | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500 | | category | No | Default 0 | #### Futures Balance ``` GET /api/v1/futures/balance ``` | Param | Required | Description | |-------|----------|-------------| | category | No | Default 0 | #### Adjust Isolated Margin ``` POST /api/v1/futures/positionMargin ``` **WRITE: Confirm before executing** | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | | side | Yes | LONG or SHORT | | amount | Yes | Margin amount (positive=add, negative=reduce) | | category | No | Default 0 | #### Futures Trade History ``` GET /api/v1/futures/userTrades ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500 | | fromId | No | Start trade ID | | toId | No | End trade ID | | category | No | Default 0 | #### Futures Balance Flow ``` GET /api/v1/futures/balanceFlow ``` | Param | Required | Description | |-------|----------|-------------| | symbol | No | Filter by symbol | | coin | No | Filter by coin | | flowType | No | Transaction type | | fromId | No | Pagination | | endId | No | Pagination | | startTime | No | ms timestamp | | endTime | No | ms timestamp | | limit | No | Default 500 | | category | No | Default 0 | #### Commission Rate ``` GET /api/v1/futures/commissionRate ``` | Param | Required | Description | |-------|----------|-------------| | symbol | Yes | e.g. BTCUSDT | #### Today's PnL ``` GET /api/v1/futures/todayPnl ``` | Param | Required | Description | |-------|----------|-------------| | category | No | Default 0 | #### Sub-Account Info ``` GET /api/v1/subAccount ``` | Param | Required | Description | |-------|----------|-------------| | userId | No | Sub-account user ID | | email | No | Sub-account email | #### Sub-Account Transfer ``` POST /api/v1/subAccount/transfer ``` **WRITE: Confirm before executing** Same params as spot sub-account transfer. #### Account Balance Flow ``` GET /api/v1/account/balanceFlow ``` Same params as spot balance flow, with additional `category` param. ### Futures User Data Stream #### Create Listen Key ``` POST /api/v1/listenKey ``` | Param | Required | Description | |-------|----------|-------------| | category | No | Default 0 | #### Extend Listen Key ``` PUT /api/v1/listenKey ``` | Param | Required | Description | |-------|----------|-------------| | listenKey | Yes | The listen key | | category | No | Default 0 | #### Close Listen Key ``` DELETE /api/v1/listenKey ``` | Param | Required | Description | |-------|----------|-------------| | listenKey | Yes | The listen key | | category | No | Default 0 | **WebSocket URL:** `wss://stream.toobit.com/api/v1/ws/` **Events:** Balance updates, position changes, order updates, trade execution notifications. --- ## Common Error Codes | Code | Description | |------|-------------| | -1000 | Unknown error | | -1001 | Disconnected | | -1002 | Unauthorized | | -1003 | Rate limit exceeded | | -1013 | Invalid quantity | | -1014 | Invalid price | | -1015 | Too many orders | | -1016 | Service unavailable | | -1020 | Unsupported operation | | -1021 | Timestamp outside recvWindow | | -1022 | Invalid signature | | -1100 | Illegal characters | | -1101 | Too many parameters | | -1102 | Missing required parameter | | -1103 | Unknown parameter | | -1104 | Not all parameters read | | -1105 | Parameter empty | | -1106 | Parameter not needed | | -1111 | Bad precision | | -1112 | No open orders | | -1114 | Invalid timeInForce | | -1115 | Invalid orderType | | -1116 | Invalid side | | -1117 | Empty OHLCV | | -1118 | Invalid OHLCV period | | -1119 | Invalid orderType | | -1120 | Invalid startTime | | -1121 | Invalid symbol | | -1125 | Invalid listenKey | | -1127 | Interval too large | | -1128 | No data in depth/kline | | -1130 | Invalid data sent for parameter | | -2010 | Order rejected (insufficient balance) | | -2011 | Order cancel rejected | | -2013 | Order does not exist | | -2014 | Bad API key format | | -2015 | Invalid API key, IP, or permissions | | -2016 | No trading window | | -2018 | Balance not sufficient | | -2019 | Margin not sufficient | ## Rate Limits - **Request weight:** 3000 per minute - **Orders:** 60 per 60 seconds - Respect `X-MBX-USED-WEIGHT` response header ## Usage Examples **User says:** "查看 BTC 当前价格" → Call `GET /quote/v1/ticker/price?symbol=BTCUSDT` **User says:** "用 1000 USDT 市价买入 ETH" → Show: `POST /api/v1/spot/order` with symbol=ETHUSDT, side=BUY, type=MARKET, quantity=calculated → Ask user to confirm → Execute **User says:** "开一个 BTC 10x 多单" → First set leverage: `POST /api/v1/futures/leverage` symbol=BTCUSDT, leverage=10 → Then place order: `POST /api/v1/futures/order` side=BUY_OPEN, type=MARKET → Ask user to confirm each step → Execute **User says:** "查看我的合约持仓" → Call `GET /api/v1/futures/positions` **User says:** "提币 100 USDT 到地址 0x..." → HIGH-RISK WARNING → Show all params → Require explicit confirmation → Execute