# BtcBox Exchange Specification # # Auto-generated by: mix ccxt.extract btcbox # CCXT version: 4.5.34 # Spec format version: 1 # # Review before use: # - signing: Detected from sign() method, verify with testnet # - endpoints: Raw paths extracted, map to unified API as needed # - exceptions: Extracted (exact, broad, HTTP status codes) # - features/options: Extracted from describe() # - classification: Set to :supported initially, promote after validation # %{ api_param_requirements: nil, certified: false, classification: :supported, comment: nil, countries: [ "JP" ], currencies: %{}, currency_aliases: %{ "BCHSV" => "BSV", "XBT" => "BTC" }, dex: false, enable_rate_limit: true, endpoint_extraction_stats: %{ "capturedMethods" => 13, "coveragePercent" => 100, "enabledMethods" => 15, "excluded" => [ %{ "method" => "editOrder", "reason" => "emulated (returns cached data, no HTTP call)" } ], "excludedMethods" => 1, "extractableMethods" => 14, "failures" => [ %{ "error" => "Cannot read properties of undefined (reading 'length')", "method" => "fetchL2OrderBook" } ] }, endpoints: [ %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :post, name: :cancel_order, param_mappings: %{}, params: [ :id, :symbol ], path: "/trade_cancel", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :post, name: :create_limit_order, param_mappings: %{ "side" => "type" }, params: [ :symbol, :side, :amount, :price ], path: "/trade_add", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :post, name: :create_market_order, param_mappings: %{ "side" => "type" }, params: [ :symbol, :side, :amount, :price ], path: "/trade_add", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :post, name: :create_order, param_mappings: %{ "side" => "type" }, params: [ :symbol, :type, :side, :amount, :price ], path: "/trade_add", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, market_type: :spot, method: :post, name: :fetch_balance, param_mappings: %{}, params: [], path: "/balance", source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_markets, param_mappings: %{}, params: [], path: "/tickers", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC", "type" => "open" }, market_type: :spot, method: :post, name: :fetch_open_orders, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/trade_list", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :post, name: :fetch_order, param_mappings: %{}, params: [ :id, :symbol ], path: "/trade_view", source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :get, name: :fetch_order_book, param_mappings: %{}, params: [ :symbol, :limit ], path: "/depth", source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "coin" => "BTC", "type" => "all" }, market_type: :spot, method: :post, name: :fetch_orders, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/trade_list", source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :get, name: :fetch_ticker, param_mappings: %{}, params: [ :symbol ], path: "/ticker", source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_tickers, param_mappings: %{}, params: [ :symbols ], path: "/tickers", source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "coin" => "BTC" }, market_type: :spot, method: :get, name: :fetch_trades, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/orders", source: :intercepted } ], error_code_details: %{ 104 => %{ description: nil, type: :invalid_credentials }, 105 => %{ description: nil, type: :access_restricted }, 106 => %{ description: nil, type: :invalid_credentials }, 107 => %{ description: "price should be an integer", type: :invalid_order }, 200 => %{ description: nil, type: :insufficient_balance }, 201 => %{ description: "amount too small", type: :invalid_order }, 202 => %{ description: "price should be [0 : 1000000]", type: :invalid_order }, 203 => %{ description: nil, type: :order_not_found }, 401 => %{ description: "cancel canceled, closed or non-existent order", type: :order_not_found }, 402 => %{ description: nil, type: :rate_limited } }, error_codes: %{ 104 => :invalid_credentials, 105 => :access_restricted, 106 => :invalid_credentials, 107 => :invalid_order, 200 => :insufficient_balance, 201 => :invalid_order, 202 => :invalid_order, 203 => :order_not_found, 401 => :order_not_found, 402 => :rate_limited }, exceptions: nil, exchange_options: %{ "amountPrecision" => "0.0001", "defaultNetworkCodeReplacements" => %{ "BRC20" => %{ "BRC20" => "BTC" }, "CRO" => %{ "CRC20" => "CRONOS" }, "ETH" => %{ "ERC20" => "ETH" }, "TRX" => %{ "TRC20" => "TRX" } }, "fetchMarkets" => %{ "webApiEnable" => true, "webApiRetries" => 3 }, "networksById" => %{} }, extended_metadata: %{ fees_url: "https://support.btcbox.co.jp/hc/en-us/articles/360001235694-Fees-introduction", limits: %{ "amount" => %{}, "cost" => %{}, "leverage" => %{}, "price" => %{} }, logo_url: "https://github.com/user-attachments/assets/1e2cb499-8d0f-4f8f-9464-3c015cfbc76b" }, extracted_metadata: %{ ccxt_version: "4.5.34" }, features: %{ future: %{}, spot: %{ create_order: %{ hedged: false, iceberg: false, leverage: false, margin_mode: false, market_buy_by_cost: false, market_buy_requires_price: false, self_trade_prevention: false, stop_loss_price: false, take_profit_price: false, time_in_force: %{ fok: false, gtd: false, ioc: false, po: false }, trailing: false, trigger_direction: false, trigger_price: false }, fetch_open_orders: %{ limit: 100, margin_mode: false, symbol_required: true, trailing: false, trigger: false }, fetch_order: %{ margin_mode: false, symbol_required: true, trailing: false, trigger: false }, fetch_orders: %{ limit: 100, margin_mode: false, symbol_required: true, trailing: false, trigger: false }, sandbox: false }, swap: %{} }, fees: nil, handle_content_type_application_zip: nil, handle_errors_source: "handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (response === undefined) {\n return undefined; // resort to defaultErrorHandler\n }\n // typical error response: {\"result\":false,\"code\":\"401\"}\n if (httpCode >= 400) {\n return undefined; // resort to defaultErrorHandler\n }\n const result = this.safeValue(response, 'result');\n if (result === undefined || result === true) {\n return undefined; // either public API (no error codes expected) or success\n }\n const code = this.safeValue(response, 'code');\n const feedback = this.id + ' ' + body;\n this.throwExactlyMatchedException(this.exceptions, code, feedback);\n throw new errors.ExchangeError(feedback); // unknown message\n }", has: %{ add_margin: false, borrow_cross_margin: false, borrow_isolated_margin: false, borrow_margin: false, c_o_r_s: false, cancel_all_orders: false, cancel_all_orders_ws: false, cancel_order: true, cancel_order_with_client_order_id: false, cancel_order_ws: false, cancel_orders: false, cancel_orders_with_client_order_id: false, cancel_orders_ws: false, close_all_positions: false, close_position: false, create_deposit_address: false, create_limit_buy_order: false, create_limit_buy_order_ws: false, create_limit_order: true, create_limit_order_ws: false, create_limit_sell_order: false, create_limit_sell_order_ws: false, create_market_buy_order: false, create_market_buy_order_with_cost: false, create_market_buy_order_with_cost_ws: false, create_market_buy_order_ws: false, create_market_order: true, create_market_order_with_cost: false, create_market_order_with_cost_ws: false, create_market_order_ws: true, create_market_sell_order: false, create_market_sell_order_with_cost: false, create_market_sell_order_with_cost_ws: false, create_market_sell_order_ws: false, create_order: true, create_order_with_take_profit_and_stop_loss: false, create_order_with_take_profit_and_stop_loss_ws: false, create_order_ws: false, create_orders: false, create_post_only_order: false, create_post_only_order_ws: false, create_reduce_only_order: false, create_reduce_only_order_ws: false, create_stop_limit_order: false, create_stop_limit_order_ws: false, create_stop_loss_order: false, create_stop_loss_order_ws: false, create_stop_market_order: false, create_stop_market_order_ws: false, create_stop_order: false, create_stop_order_ws: false, create_take_profit_order: false, create_take_profit_order_ws: false, create_trailing_amount_order: false, create_trailing_amount_order_ws: false, create_trailing_percent_order: false, create_trailing_percent_order_ws: false, create_trigger_order: false, create_trigger_order_ws: false, deposit: false, edit_order: true, edit_order_with_client_order_id: false, edit_order_ws: false, edit_orders: false, fetch_accounts: false, fetch_balance: true, fetch_balance_ws: false, fetch_bids_asks: false, fetch_borrow_interest: false, fetch_borrow_rate: false, fetch_borrow_rate_histories: false, fetch_borrow_rate_history: false, fetch_borrow_rates: false, fetch_borrow_rates_per_symbol: false, fetch_canceled_and_closed_orders: false, fetch_canceled_orders: false, fetch_closed_order: false, fetch_closed_orders: false, fetch_closed_orders_ws: false, fetch_convert_currencies: false, fetch_convert_quote: false, fetch_convert_trade: false, fetch_convert_trade_history: false, fetch_cross_borrow_rate: false, fetch_cross_borrow_rates: false, fetch_currencies: false, fetch_currencies_ws: true, fetch_deposit: false, fetch_deposit_address: false, fetch_deposit_addresses: false, fetch_deposit_addresses_by_network: false, fetch_deposit_withdraw_fee: false, fetch_deposit_withdraw_fees: false, fetch_deposits: false, fetch_deposits_withdrawals: false, fetch_deposits_ws: false, fetch_funding_history: false, fetch_funding_interval: false, fetch_funding_intervals: false, fetch_funding_rate: false, fetch_funding_rate_history: false, fetch_funding_rates: false, fetch_greeks: false, fetch_index_ohlcv: false, fetch_isolated_borrow_rate: false, fetch_isolated_borrow_rates: false, fetch_isolated_positions: false, fetch_l2_order_book: true, fetch_l3_order_book: false, fetch_last_prices: false, fetch_ledger: false, fetch_ledger_entry: false, fetch_leverage: false, fetch_leverage_tiers: false, fetch_leverages: false, fetch_liquidations: false, fetch_long_short_ratio: false, fetch_long_short_ratio_history: false, fetch_margin_adjustment_history: false, fetch_margin_mode: false, fetch_margin_modes: false, fetch_mark_ohlcv: false, fetch_mark_prices: false, fetch_market_leverage_tiers: false, fetch_markets: true, fetch_markets_ws: false, fetch_my_liquidations: false, fetch_my_settlement_history: false, fetch_my_trades: false, fetch_my_trades_ws: false, fetch_ohlcv: false, fetch_ohlcv_ws: false, fetch_open_interest: false, fetch_open_interest_history: false, fetch_open_interests: false, fetch_open_order: false, fetch_open_orders: true, fetch_open_orders_ws: false, fetch_option: false, fetch_option_chain: false, fetch_order: true, fetch_order_book: true, fetch_order_book_ws: false, fetch_order_books: false, fetch_order_trades: false, fetch_order_with_client_order_id: false, fetch_order_ws: false, fetch_orders: true, fetch_orders_by_status: false, fetch_orders_ws: false, fetch_position: false, fetch_position_history: false, fetch_position_mode: false, fetch_position_ws: false, fetch_positions: false, fetch_positions_for_symbol: false, fetch_positions_for_symbol_ws: false, fetch_positions_history: false, fetch_positions_risk: false, fetch_positions_ws: false, fetch_premium_index_ohlcv: false, fetch_settlement_history: false, fetch_status: false, fetch_ticker: true, fetch_ticker_ws: false, fetch_tickers: true, fetch_tickers_ws: false, fetch_time: false, fetch_trades: true, fetch_trades_ws: false, fetch_trading_fee: false, fetch_trading_fees: false, fetch_trading_fees_ws: false, fetch_trading_limits: false, fetch_transaction_fee: false, fetch_transaction_fees: false, fetch_transactions: false, fetch_transfer: false, fetch_transfers: false, fetch_underlying_assets: false, fetch_volatility_history: false, fetch_withdraw_addresses: false, fetch_withdrawal: false, fetch_withdrawal_whitelist: false, fetch_withdrawals: false, fetch_withdrawals_ws: false, future: false, margin: false, option: false, private_api: true, public_api: true, reduce_margin: false, repay_cross_margin: false, repay_isolated_margin: false, repay_margin: false, sandbox: false, set_leverage: false, set_margin: false, set_margin_mode: false, set_position_mode: false, sign_in: false, spot: true, swap: false, transfer: false, un_watch_my_trades: false, un_watch_ohlcv: false, un_watch_ohlcv_for_symbols: false, un_watch_order_book: false, un_watch_order_book_for_symbols: false, un_watch_orders: false, un_watch_positions: false, un_watch_ticker: false, un_watch_tickers: false, un_watch_trades: false, un_watch_trades_for_symbols: false, watch_balance: false, watch_bids_asks: false, watch_liquidations: false, watch_liquidations_for_symbols: false, watch_my_liquidations: false, watch_my_liquidations_for_symbols: false, watch_my_trades: false, watch_ohlcv: false, watch_ohlcv_for_symbols: false, watch_order_book: false, watch_order_book_for_symbols: false, watch_orders: false, watch_orders_for_symbols: false, watch_position: false, watch_positions: false, watch_status: false, watch_ticker: false, watch_tickers: false, watch_trades: false, watch_trades_for_symbols: false, withdraw: false, ws: false }, http_config: nil, id: "btcbox", markets: nil, name: "BtcBox", ohlcv_timestamp_resolution: :unknown, options: %{ "amount_precision" => "0.0001", :fetch_markets => %{ "webApiEnable" => true, "webApiRetries" => 3 } }, order_mappings: nil, param_mappings: %{ "side" => "type" }, parse_methods: [ %{ "comment" => nil, "examples" => [], "line_end" => 395, "line_start" => 378, "mappings" => [], "name" => "parseBalance", "signature" => "parseBalance (response): Balances", "source" => "parseBalance (response): Balances {\n const result: Dict = { 'info': response };\n const codes = Object.keys (this.currencies);\n for (let i = 0; i < codes.length; i++) {\n const code = codes[i];\n const currency = this.currency (code);\n const currencyId = currency['id'];\n const free = currencyId + '_balance';\n if (free in response) {\n const account = this.account ();\n const used = currencyId + '_lock';\n account['free'] = this.safeString (response, free);\n account['used'] = this.safeString (response, used);\n result[code] = account;\n }\n }\n return this.safeBalance (result);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 376, "line_start" => 320, "mappings" => [ %{ "comment" => nil, "key" => "id", "value" => "this.safeString (market, 'symbol')" }, %{ "comment" => nil, "key" => "uppercaseId", "value" => "undefined" }, %{ "comment" => nil, "key" => "symbol", "value" => "symbol" }, %{ "comment" => nil, "key" => "base", "value" => "base" }, %{ "comment" => nil, "key" => "baseId", "value" => "baseId" }, %{ "comment" => nil, "key" => "quote", "value" => "quote" }, %{ "comment" => nil, "key" => "quoteId", "value" => "quoteId" }, %{ "comment" => nil, "key" => "settle", "value" => "undefined" }, %{ "comment" => nil, "key" => "settleId", "value" => "undefined" }, %{ "comment" => nil, "key" => "type", "value" => "'spot'" }, %{ "comment" => nil, "key" => "spot", "value" => "true" }, %{ "comment" => nil, "key" => "margin", "value" => "false" }, %{ "comment" => nil, "key" => "swap", "value" => "false" }, %{ "comment" => nil, "key" => "future", "value" => "false" }, %{ "comment" => nil, "key" => "option", "value" => "false" }, %{ "comment" => nil, "key" => "contract", "value" => "false" }, %{ "comment" => nil, "key" => "linear", "value" => "undefined" }, %{ "comment" => nil, "key" => "inverse", "value" => "undefined" }, %{ "comment" => nil, "key" => "contractSize", "value" => "undefined" }, %{ "comment" => nil, "key" => "expiry", "value" => "undefined" }, %{ "comment" => nil, "key" => "expiryDatetime", "value" => "undefined" }, %{ "comment" => nil, "key" => "strike", "value" => "undefined" }, %{ "comment" => nil, "key" => "optionType", "value" => "undefined" }, %{ "comment" => nil, "key" => "limits", "value" => "{\n 'amount': {\n 'min': this.safeNumber (market, 'minLimitBaseAmount'),\n 'max': this.safeNumber (market, 'maxLimitBaseAmount'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n }" }, %{ "comment" => nil, "key" => "precision", "value" => "{\n 'price': this.parseNumber (this.parsePrecision (this.safeString (market, 'quotePrecision'))),\n 'amount': this.parseNumber (this.parsePrecision (this.safeString (market, 'basePrecision'))),\n }" }, %{ "comment" => nil, "key" => "active", "value" => "undefined" }, %{ "comment" => nil, "key" => "created", "value" => "undefined" }, %{ "comment" => nil, "key" => "info", "value" => "market" }, %{ "comment" => nil, "key" => "amount", "value" => "{\n 'min': this.safeNumber (market, 'minLimitBaseAmount'),\n 'max': this.safeNumber (market, 'maxLimitBaseAmount'),\n }" }, %{ "comment" => nil, "key" => "price", "value" => "{\n 'min': undefined,\n 'max': undefined,\n }" }, %{ "comment" => nil, "key" => "cost", "value" => "{\n 'min': undefined,\n 'max': undefined,\n }" }, %{ "comment" => nil, "key" => "leverage", "value" => "{\n 'min': undefined,\n 'max': undefined,\n }" }, %{ "comment" => nil, "key" => "min", "value" => "undefined" }, %{ "comment" => nil, "key" => "max", "value" => "undefined" } ], "name" => "parseMarket", "signature" => "parseMarket (market: Dict): Market", "source" => "parseMarket (market: Dict): Market {\n const baseId = this.safeString (market, 'base');\n const base = this.safeCurrencyCode (baseId);\n const quoteId = this.safeString (market, 'quote');\n const quote = this.safeCurrencyCode (quoteId);\n const symbol = base + '/' + quote;\n return {\n 'id': this.safeString (market, 'symbol'),\n 'uppercaseId': undefined,\n 'symbol': symbol,\n 'base': base,\n 'baseId': baseId,\n 'quote': quote,\n 'quoteId': quoteId,\n 'settle': undefined,\n 'settleId': undefined,\n 'type': 'spot',\n 'spot': true,\n 'margin': false,\n 'swap': false,\n 'future': false,\n 'option': false,\n 'contract': false,\n 'linear': undefined,\n 'inverse': undefined,\n 'contractSize': undefined,\n 'expiry': undefined,\n 'expiryDatetime': undefined,\n 'strike': undefined,\n 'optionType': undefined,\n 'limits': {\n 'amount': {\n 'min': this.safeNumber (market, 'minLimitBaseAmount'),\n 'max': this.safeNumber (market, 'maxLimitBaseAmount'),\n },\n 'price': {\n 'min': undefined,\n 'max': undefined,\n },\n 'cost': {\n 'min': undefined,\n 'max': undefined,\n },\n 'leverage': {\n 'min': undefined,\n 'max': undefined,\n },\n },\n 'precision': {\n 'price': this.parseNumber (this.parsePrecision (this.safeString (market, 'quotePrecision'))),\n 'amount': this.parseNumber (this.parsePrecision (this.safeString (market, 'basePrecision'))),\n },\n 'active': undefined,\n 'created': undefined,\n 'info': market,\n };\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"id\":11,\n \"datetime\":\"2014-10-21 10:47:20\",\n \"type\":\"sell\",\n \"price\":42000,\n \"amount_original\":1.2,\n \"amount_outstanding\":1.2,\n \"status\":\"closed\",\n \"trades\":[] // no clarification of trade value structure of order endpoint\n }" ], "line_end" => 693, "line_start" => 637, "mappings" => [ %{ "comment" => nil, "key" => "id", "value" => "id" }, %{ "comment" => nil, "key" => "clientOrderId", "value" => "undefined" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "lastTradeTimestamp", "value" => "undefined" }, %{ "comment" => nil, "key" => "amount", "value" => "amount" }, %{ "comment" => nil, "key" => "remaining", "value" => "remaining" }, %{ "comment" => nil, "key" => "filled", "value" => "undefined" }, %{ "comment" => nil, "key" => "side", "value" => "side" }, %{ "comment" => nil, "key" => "type", "value" => "undefined" }, %{ "comment" => nil, "key" => "timeInForce", "value" => "undefined" }, %{ "comment" => nil, "key" => "postOnly", "value" => "undefined" }, %{ "comment" => nil, "key" => "status", "value" => "status" }, %{ "comment" => nil, "key" => "symbol", "value" => "market['symbol']" }, %{ "comment" => nil, "key" => "price", "value" => "price" }, %{ "comment" => nil, "key" => "triggerPrice", "value" => "undefined" }, %{ "comment" => nil, "key" => "cost", "value" => "undefined" }, %{ "comment" => nil, "key" => "trades", "value" => "trades" }, %{ "comment" => nil, "key" => "fee", "value" => "undefined" }, %{ "comment" => nil, "key" => "info", "value" => "order" }, %{ "comment" => nil, "key" => "average", "value" => "undefined" } ], "name" => "parseOrder", "signature" => "parseOrder (order: Dict, market: Market = undefined): Order", "source" => "parseOrder (order: Dict, market: Market = undefined): Order {\n //\n // {\n // \"id\":11,\n // \"datetime\":\"2014-10-21 10:47:20\",\n // \"type\":\"sell\",\n // \"price\":42000,\n // \"amount_original\":1.2,\n // \"amount_outstanding\":1.2,\n // \"status\":\"closed\",\n // \"trades\":[] // no clarification of trade value structure of order endpoint\n // }\n //\n const id = this.safeString (order, 'id');\n const datetimeString = this.safeString (order, 'datetime');\n let timestamp = undefined;\n if (datetimeString !== undefined) {\n timestamp = this.parse8601 (order['datetime'] + '+09:00'); // Tokyo time\n }\n const amount = this.safeString (order, 'amount_original');\n const remaining = this.safeString (order, 'amount_outstanding');\n const price = this.safeString (order, 'price');\n // status is set by fetchOrder method only\n let status = this.parseOrderStatus (this.safeString (order, 'status'));\n // fetchOrders do not return status, use heuristic\n if (status === undefined) {\n if (Precise.stringEquals (remaining, '0')) {\n status = 'closed';\n }\n }\n const trades = undefined; // todo: this.parseTrades (order['trades']);\n market = this.safeMarket (undefined, market);\n const side = this.safeString (order, 'type');\n return this.safeOrder ({\n 'id': id,\n 'clientOrderId': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'lastTradeTimestamp': undefined,\n 'amount': amount,\n 'remaining': remaining,\n 'filled': undefined,\n 'side': side,\n 'type': undefined,\n 'timeInForce': undefined,\n 'postOnly': undefined,\n 'status': status,\n 'symbol': market['symbol'],\n 'price': price,\n 'triggerPrice': undefined,\n 'cost': undefined,\n 'trades': trades,\n 'fee': undefined,\n 'info': order,\n 'average': undefined,\n }, market);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 635, "line_start" => 625, "mappings" => [], "name" => "parseOrderStatus", "signature" => "parseOrderStatus (status: Str)", "source" => "parseOrderStatus (status: Str) {\n const statuses: Dict = {\n // TODO: complete list\n 'part': 'open', // partially or not at all executed\n 'all': 'closed', // fully executed\n 'cancelled': 'canceled',\n 'closed': 'closed', // never encountered, seems to be bug in the doc\n 'no': 'closed', // not clarified in the docs...\n };\n return this.safeString (statuses, status, status);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 458, "line_start" => 433, "mappings" => [ %{ "comment" => nil, "key" => "symbol", "value" => "symbol" }, %{ "comment" => nil, "key" => "timestamp", "value" => "undefined" }, %{ "comment" => nil, "key" => "datetime", "value" => "undefined" }, %{ "comment" => nil, "key" => "high", "value" => "this.safeString (ticker, 'high')" }, %{ "comment" => nil, "key" => "low", "value" => "this.safeString (ticker, 'low')" }, %{ "comment" => nil, "key" => "bid", "value" => "this.safeString (ticker, 'buy')" }, %{ "comment" => nil, "key" => "bidVolume", "value" => "undefined" }, %{ "comment" => nil, "key" => "ask", "value" => "this.safeString (ticker, 'sell')" }, %{ "comment" => nil, "key" => "askVolume", "value" => "undefined" }, %{ "comment" => nil, "key" => "vwap", "value" => "undefined" }, %{ "comment" => nil, "key" => "open", "value" => "undefined" }, %{ "comment" => nil, "key" => "close", "value" => "last" }, %{ "comment" => nil, "key" => "last", "value" => "last" }, %{ "comment" => nil, "key" => "previousClose", "value" => "undefined" }, %{ "comment" => nil, "key" => "change", "value" => "undefined" }, %{ "comment" => nil, "key" => "percentage", "value" => "undefined" }, %{ "comment" => nil, "key" => "average", "value" => "undefined" }, %{ "comment" => nil, "key" => "baseVolume", "value" => "this.safeString (ticker, 'vol')" }, %{ "comment" => nil, "key" => "quoteVolume", "value" => "this.safeString (ticker, 'volume')" }, %{ "comment" => nil, "key" => "info", "value" => "ticker" } ], "name" => "parseTicker", "signature" => "parseTicker (ticker: Dict, market: Market = undefined): Ticker", "source" => "parseTicker (ticker: Dict, market: Market = undefined): Ticker {\n const symbol = this.safeSymbol (undefined, market);\n const last = this.safeString (ticker, 'last');\n return this.safeTicker ({\n 'symbol': symbol,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'high': this.safeString (ticker, 'high'),\n 'low': this.safeString (ticker, 'low'),\n 'bid': this.safeString (ticker, 'buy'),\n 'bidVolume': undefined,\n 'ask': this.safeString (ticker, 'sell'),\n 'askVolume': undefined,\n 'vwap': undefined,\n 'open': undefined,\n 'close': last,\n 'last': last,\n 'previousClose': undefined,\n 'change': undefined,\n 'percentage': undefined,\n 'average': undefined,\n 'baseVolume': this.safeString (ticker, 'vol'),\n 'quoteVolume': this.safeString (ticker, 'volume'),\n 'info': ticker,\n }, market);\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"date\":\"0\",\n \"price\":3,\n \"amount\":0.1,\n \"tid\":\"1\",\n \"type\":\"buy\"\n }" ], "line_end" => 529, "line_start" => 495, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "trade" }, %{ "comment" => nil, "key" => "id", "value" => "id" }, %{ "comment" => nil, "key" => "order", "value" => "undefined" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "symbol", "value" => "market['symbol']" }, %{ "comment" => nil, "key" => "type", "value" => "type" }, %{ "comment" => nil, "key" => "side", "value" => "side" }, %{ "comment" => nil, "key" => "takerOrMaker", "value" => "undefined" }, %{ "comment" => nil, "key" => "price", "value" => "priceString" }, %{ "comment" => nil, "key" => "amount", "value" => "amountString" }, %{ "comment" => nil, "key" => "cost", "value" => "undefined" }, %{ "comment" => nil, "key" => "fee", "value" => "undefined" } ], "name" => "parseTrade", "signature" => "parseTrade (trade: Dict, market: Market = undefined): Trade", "source" => "parseTrade (trade: Dict, market: Market = undefined): Trade {\n //\n // fetchTrades (public)\n //\n // {\n // \"date\":\"0\",\n // \"price\":3,\n // \"amount\":0.1,\n // \"tid\":\"1\",\n // \"type\":\"buy\"\n // }\n //\n const timestamp = this.safeTimestamp (trade, 'date');\n market = this.safeMarket (undefined, market);\n const id = this.safeString (trade, 'tid');\n const priceString = this.safeString (trade, 'price');\n const amountString = this.safeString (trade, 'amount');\n const type = undefined;\n const side = this.safeString (trade, 'type');\n return this.safeTrade ({\n 'info': trade,\n 'id': id,\n 'order': undefined,\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'symbol': market['symbol'],\n 'type': type,\n 'side': side,\n 'takerOrMaker': undefined,\n 'price': priceString,\n 'amount': amountString,\n 'cost': undefined,\n 'fee': undefined,\n }, market);\n }" } ], path_prefix: "/v1/", pro: false, quote_json_numbers: nil, rate_limits: %{ interval_ms: 1000, period: 1000, requests: 1, rolling_window_size: 60000 }, raw_endpoints: %{ private: [], public: [] }, required_credentials: %{ api_key: true, password: false, secret: true, uid: false }, requires_eddsa: false, response_error: nil, signing: %{ confidence: :medium, pattern: :hmac_sha256_query }, spec_format_version: 1, status: %{ "eta" => nil, "status" => "ok", "updated" => nil, "url" => nil }, symbol_format: nil, symbol_formats: nil, symbol_patterns: %{}, timeframes: %{}, url_strategy: %{ detected_from: "sign_method", pattern: :version_slash, prefix: "/v1/" }, urls: %{ api: "https://www.btcbox.co.jp/api", api_sections: %{ "rest" => "https://www.btcbox.co.jp/api" }, doc: "https://blog.btcbox.jp/en/archives/8762", other: nil, sandbox: nil, www: "https://www.btcbox.co.jp/" }, version: "v1", ws: nil }