# OKX (US) Exchange Specification # # Auto-generated by: mix ccxt.extract okxus # 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: :pro, comment: nil, countries: [ "CN", "US" ], currencies: %{ "AED" => %{ "code" => "AED", "fees" => %{}, "id" => "AED", "limits" => %{ "deposit" => %{}, "withdraw" => %{} }, "networks" => %{}, "precision" => 0.0001 }, "AUD" => %{ "code" => "AUD", "fees" => %{}, "id" => "AUD", "limits" => %{ "deposit" => %{}, "withdraw" => %{} }, "networks" => %{}, "precision" => 0.0001 }, "EUR" => %{ "code" => "EUR", "fees" => %{}, "id" => "EUR", "limits" => %{ "deposit" => %{}, "withdraw" => %{} }, "networks" => %{}, "precision" => 0.0001 }, "GBP" => %{ "code" => "GBP", "fees" => %{}, "id" => "GBP", "limits" => %{ "deposit" => %{}, "withdraw" => %{} }, "networks" => %{}, "precision" => 0.0001 }, "USD" => %{ "code" => "USD", "fees" => %{}, "id" => "USD", "limits" => %{ "deposit" => %{}, "withdraw" => %{} }, "networks" => %{}, "precision" => 0.0001 } }, currency_aliases: %{ "AE" => "AET", "BCHSV" => "BSV", "XBT" => "BTC" }, dex: false, enable_rate_limit: true, endpoint_extraction_stats: %{ "capturedMethods" => 86, "coveragePercent" => 100, "enabledMethods" => 94, "excluded" => [ %{ "method" => "fetchMarketLeverageTiers", "reason" => "okxus fetchMarketLeverageTiers() cannot fetch leverage tiers for BTC/USDT:USDT" }, %{ "method" => "fetchDepositWithdrawFee", "reason" => "emulated (returns cached data, no HTTP call)" }, %{ "method" => "fetchPositionHistory", "reason" => "emulated (returns cached data, no HTTP call)" } ], "excludedMethods" => 3, "extractableMethods" => 91, "failures" => [ %{ "error" => "okxus fetchMarginAdjustmentHistory () requires a type argument", "method" => "fetchMarginAdjustmentHistory" }, %{ "error" => "okxus fetchSettlementHistory() supports futures and options markets only", "method" => "fetchSettlementHistory" }, %{ "error" => "okxus repayCrossMargin() requires an id parameter", "method" => "repayCrossMargin" }, %{ "error" => "okxus setMarginMode() params[\"lever\"] should be between 1 and 125", "method" => "setMarginMode" }, %{ "error" => "okxus fetchAllGreeks() requires either a uly or instFamily parameter", "method" => "fetchAllGreeks" } ] }, endpoints: [ %{ api_section: "private", auth: true, cost: 10, default_params: %{ "timeOut" => 1 }, market_type: :spot, method: :post, name: :cancel_all_orders_after, param_mappings: %{}, params: [ :timeout ], path: "/trade/cancel-all-after", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.3333333333333333, market_type: :spot, method: :post, name: :cancel_order, param_mappings: %{ "id" => "ordId", "symbol" => "instId" }, params: [ :id, :symbol ], path: "/trade/cancel-order", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :cancel_orders, param_mappings: %{}, params: [ :ids, :symbol ], path: "/trade/cancel-batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :cancel_orders_for_symbols, param_mappings: %{}, params: [ :orders ], path: "/trade/cancel-batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "side" => "sell" }, market_type: :spot, method: :post, name: :create_convert_trade, param_mappings: %{ "id" => "quoteId", "toCode" => "quoteCcy" }, params: [ :id, :fromCode, :toCode, :amount ], path: "/asset/convert/trade", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_limit_order, param_mappings: %{}, params: [ :symbol, :side, :amount, :price ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_market_buy_order_with_cost, param_mappings: %{}, params: [ :symbol, :cost ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_market_order, param_mappings: %{}, params: [ :symbol, :side, :amount, :price ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_market_sell_order_with_cost, param_mappings: %{}, params: [ :symbol, :cost ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_order, param_mappings: %{}, params: [ :symbol, :type, :side, :amount, :price ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :swap, method: :post, name: :create_order_with_take_profit_and_stop_loss, param_mappings: %{}, params: [ :symbol, :type, :side, :amount, :price, :takeProfit, :stopLoss ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_orders, param_mappings: %{}, params: [ :orders ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :spot, method: :post, name: :create_post_only_order, param_mappings: %{}, params: [ :symbol, :type, :side, :amount, :price ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.06666666666666667, market_type: :swap, method: :post, name: :create_reduce_only_order, param_mappings: %{}, params: [ :symbol, :type, :side, :amount, :price ], path: "/trade/batch-orders", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "trigger", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "triggerDirection" => "below" }, market_type: :swap, method: :post, name: :create_stop_limit_order, param_mappings: %{ "amount" => "sz", "price" => "orderPx", "triggerPrice" => "triggerPx" }, params: [ :symbol, :side, :amount, :price, :triggerPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "conditional", "slTriggerPxType" => "last", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "triggerDirection" => "below" }, market_type: :swap, method: :post, name: :create_stop_loss_order, param_mappings: %{ "amount" => "sz", "price" => "slOrdPx", "stopLossPrice" => "slTriggerPx" }, params: [ :symbol, :type, :side, :amount, :price, :stopLossPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "trigger", "orderPx" => "-1", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "triggerDirection" => "below" }, market_type: :swap, method: :post, name: :create_stop_market_order, param_mappings: %{ "amount" => "sz", "triggerPrice" => "triggerPx" }, params: [ :symbol, :side, :amount, :triggerPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "trigger", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "triggerDirection" => "below" }, market_type: :swap, method: :post, name: :create_stop_order, param_mappings: %{ "amount" => "sz", "price" => "orderPx", "triggerPrice" => "triggerPx" }, params: [ :symbol, :type, :side, :amount, :price, :triggerPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "conditional", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "tpTriggerPxType" => "last", "triggerDirection" => "above" }, market_type: :swap, method: :post, name: :create_take_profit_order, param_mappings: %{ "amount" => "sz", "price" => "tpOrdPx", "takeProfitPrice" => "tpTriggerPx" }, params: [ :symbol, :type, :side, :amount, :price, :takeProfitPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "callbackRatio" => "0.01", "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "move_order_stop", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross" }, market_type: :swap, method: :post, name: :create_trailing_percent_order, param_mappings: %{ "amount" => "sz", "price" => "px" }, params: [ :symbol, :type, :side, :amount, :price, :trailingPercent, :trailingTriggerPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "clOrdId" => "", "instId" => "BTCUSDT", "ordType" => "trigger", "tag" => "6b9ad766b55dBCDE", "tdMode" => "cross", "triggerDirection" => "below" }, market_type: :swap, method: :post, name: :create_trigger_order, param_mappings: %{ "amount" => "sz", "price" => "orderPx", "triggerPrice" => "triggerPx" }, params: [ :symbol, :type, :side, :amount, :price, :triggerPrice ], path: "/trade/order-algo", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.3333333333333333, market_type: :spot, method: :post, name: :edit_order, param_mappings: %{ "amount" => "newSz", "id" => "ordId", "price" => "newPx", "symbol" => "instId" }, params: [ :id, :symbol, :type, :side, :amount, :price ], path: "/trade/amend-order", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, market_type: :spot, method: :get, name: :fetch_accounts, param_mappings: %{}, params: [], path: "/account/config", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, market_type: :spot, method: :get, name: :fetch_balance, param_mappings: %{}, params: [], path: "/account/balance", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, default_params: %{ "mgnMode" => "cross" }, market_type: :spot, method: :get, name: :fetch_borrow_interest, param_mappings: %{ "code" => "ccy" }, params: [ :code, :symbol, :since, :limit ], path: "/account/interest-accrued", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_borrow_rate_histories, param_mappings: %{}, params: [], path: "/finance/savings/lending-rate-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_borrow_rate_history, param_mappings: %{ "arg0" => "ccy" }, params: [], path: "/finance/savings/lending-rate-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.5, default_params: %{ "instType" => "SPOT", "state" => "canceled" }, market_type: :spot, method: :get, name: :fetch_canceled_orders, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :since, :limit ], path: "/trade/orders-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.5, default_params: %{ "instType" => "SPOT", "state" => "filled" }, market_type: :spot, method: :get, name: :fetch_closed_orders, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :since, :limit ], path: "/trade/orders-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_convert_currencies, param_mappings: %{}, params: [], path: "/asset/convert/currencies", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 50, default_params: %{ "side" => "sell" }, market_type: :spot, method: :post, name: :fetch_convert_quote, param_mappings: %{ "amount" => "rfqSz", "toCode" => "quoteCcy" }, params: [ :fromCode, :toCode, :amount ], path: "/asset/convert/estimate-quote", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_convert_trade, param_mappings: %{ "id" => "clTReqId" }, params: [ :id, :code ], path: "/asset/convert/history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_convert_trade_history, param_mappings: %{}, params: [ :code, :since, :limit ], path: "/asset/convert/history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, market_type: :spot, method: :get, name: :fetch_cross_borrow_rate, param_mappings: %{ "code" => "ccy" }, params: [ :code ], path: "/account/interest-rate", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, market_type: :spot, method: :get, name: :fetch_cross_borrow_rates, param_mappings: %{}, params: [], path: "/account/interest-rate", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_currencies, param_mappings: %{}, params: [], path: "/asset/currencies", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_deposit, param_mappings: %{ "arg0" => "depId" }, params: [], path: "/asset/deposit-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_deposit_address, param_mappings: %{ "code" => "ccy" }, params: [ :code ], path: "/asset/deposit-address", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_deposit_addresses_by_network, param_mappings: %{ "code" => "ccy" }, params: [ :code ], path: "/asset/deposit-address", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, default_params: %{ "ccy" => "B,T,C" }, market_type: :spot, method: :get, name: :fetch_deposit_withdraw_fees, param_mappings: %{}, params: [ :codes ], path: "/asset/currencies", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_deposits, param_mappings: %{ "code" => "ccy" }, params: [ :code, :since, :limit ], path: "/asset/deposit-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, default_params: %{ "ccy" => "USDT", "ctType" => "linear", "instType" => "SWAP", "type" => "8" }, market_type: :swap, method: :get, name: :fetch_funding_history, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/account/bills-archive", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_funding_interval, param_mappings: %{}, params: [ :symbol ], path: "/public/funding-rate", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_funding_rate, param_mappings: %{}, params: [ :symbol ], path: "/public/funding-rate", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_funding_rate_history, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/public/funding-rate-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instId" => "ANY" }, market_type: :swap, method: :get, name: :fetch_funding_rates, param_mappings: %{}, params: [ :symbols ], path: "/public/funding-rate", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "expTime" => "100000" }, market_type: :option, method: :get, name: :fetch_greeks, param_mappings: %{}, params: [ :symbol ], path: "/public/opt-summary", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "bar" => "1m", "limit" => 100 }, market_type: :swap, method: :get, name: :fetch_index_ohlcv, param_mappings: %{ "timeframe" => "bar" }, params: [ :symbol, :timeframe, :since, :limit ], path: "/market/index-candles", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 0.5, default_params: %{ "sz" => 100 }, market_type: :spot, method: :get, name: :fetch_l2_order_book, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :limit ], path: "/market/books", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_ledger, param_mappings: %{ "code" => "ccy" }, params: [ :code, :since, :limit ], path: "/account/bills", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "instId" => "BTCUSDT", "mgnMode" => "cross" }, market_type: :swap, method: :get, name: :fetch_leverage, param_mappings: %{}, params: [ :symbol ], path: "/account/leverage-info", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 4, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_long_short_ratio_history, param_mappings: %{}, params: [ :symbol, :timeframe, :since, :limit ], path: "/rubik/stat/contracts/long-short-account-ratio-contract", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "bar" => "1m", "instId" => "BTCUSDT", "limit" => 100 }, market_type: :swap, method: :get, name: :fetch_mark_ohlcv, param_mappings: %{ "timeframe" => "bar" }, params: [ :symbol, :timeframe, :since, :limit ], path: "/market/mark-price-candles", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_mark_price, param_mappings: %{}, params: [ :symbol ], path: "/public/mark-price", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_mark_prices, param_mappings: %{}, params: [ :symbols ], path: "/public/mark-price", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_markets, param_mappings: %{}, params: [], path: "/public/instruments", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_my_trades, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :since, :limit ], path: "/trade/fills-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "after" => "", "before" => "" }, market_type: :spot, method: :get, name: :fetch_ohlcv, param_mappings: %{ "symbol" => "instId", "timeframe" => "bar" }, params: [ :symbol, :timeframe, :since, :limit ], path: "/market/history-candles", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instId" => "BTCUSDT", "instType" => "SWAP" }, market_type: :swap, method: :get, name: :fetch_open_interest, param_mappings: %{}, params: [ :symbol ], path: "/public/open-interest", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 4, default_params: %{ "ccy" => "BTC", "period" => "1D" }, market_type: :swap, method: :get, name: :fetch_open_interest_history, param_mappings: %{ "timeframe" => "period" }, params: [ :symbol, :timeframe, :since, :limit ], path: "/rubik/stat/contracts/open-interest-volume", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instType" => "SWAP" }, market_type: :spot, method: :get, name: :fetch_open_interests, param_mappings: %{}, params: [ :symbols ], path: "/public/open-interest", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.3333333333333333, market_type: :spot, method: :get, name: :fetch_open_orders, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :since, :limit ], path: "/trade/orders-pending", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instId" => "BTC-250103-100000-C" }, market_type: :option, method: :get, name: :fetch_option, param_mappings: %{}, params: [ :symbol ], path: "/market/ticker", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instType" => "OPTION", "uly" => "BTC-USD" }, market_type: :option, method: :get, name: :fetch_option_chain, param_mappings: %{}, params: [ :code ], path: "/market/tickers", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 0.3333333333333333, market_type: :spot, method: :get, name: :fetch_order, param_mappings: %{ "id" => "ordId", "symbol" => "instId" }, params: [ :id, :symbol ], path: "/trade/order", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 0.5, market_type: :spot, method: :get, name: :fetch_order_book, param_mappings: %{ "limit" => "sz", "symbol" => "instId" }, params: [ :symbol, :limit ], path: "/market/books", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_order_trades, param_mappings: %{ "id" => "ordId", "symbol" => "instId" }, params: [ :id, :symbol, :since, :limit ], path: "/trade/fills-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instId" => "BTCUSDT", "instType" => "SWAP" }, market_type: :swap, method: :get, name: :fetch_position, param_mappings: %{}, params: [ :symbol ], path: "/account/positions", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_positions, param_mappings: %{}, params: [ :symbols ], path: "/account/positions", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instId" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_positions_for_symbol, param_mappings: %{}, params: [ :symbol ], path: "/account/positions", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 2, default_params: %{ "instId" => "BTCUSDT", "limit" => 100 }, market_type: :swap, method: :get, name: :fetch_positions_history, param_mappings: %{}, params: [ :symbols, :since, :limit ], path: "/account/positions-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 50, market_type: :spot, method: :get, name: :fetch_status, param_mappings: %{}, params: [], path: "/system/status", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_ticker, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol ], path: "/market/ticker", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_tickers, param_mappings: %{}, params: [ :symbols ], path: "/market/tickers", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 2, market_type: :spot, method: :get, name: :fetch_time, param_mappings: %{}, params: [], path: "/public/time", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 0.2, market_type: :spot, method: :get, name: :fetch_trades, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol, :since, :limit ], path: "/market/trades", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, default_params: %{ "instType" => "SPOT" }, market_type: :spot, method: :get, name: :fetch_trading_fee, param_mappings: %{ "symbol" => "instId" }, params: [ :symbol ], path: "/account/trade-fee", response_transformer: {:extract_path_unwrap, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, market_type: :spot, method: :get, name: :fetch_transfer, param_mappings: %{ "id" => "transId" }, params: [ :id, :code ], path: "/asset/transfer-state", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, default_params: %{ "type" => "1" }, market_type: :spot, method: :get, name: :fetch_transfers, param_mappings: %{ "code" => "ccy" }, params: [ :code, :since, :limit ], path: "/account/bills-archive", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "public", auth: false, cost: 1, default_params: %{ "0" => "BTC/USDT", "instType" => "OPTION" }, market_type: :spot, method: :get, name: :fetch_underlying_assets, param_mappings: %{}, params: [], path: "/public/underlying", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_withdrawal, param_mappings: %{ "arg0" => "wdId" }, params: [], path: "/asset/withdrawal-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :fetch_withdrawals, param_mappings: %{ "code" => "ccy" }, params: [ :code, :since, :limit ], path: "/asset/withdrawal-history", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1, default_params: %{ "instId" => "BTCUSDT", "mgnMode" => "cross" }, market_type: :swap, method: :post, name: :set_leverage, param_mappings: %{ "leverage" => "lever" }, params: [ :leverage, :symbol ], path: "/account/set-leverage", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 4, default_params: %{ "posMode" => "long_short_mode" }, market_type: :swap, method: :post, name: :set_position_mode, param_mappings: %{}, params: [ :hedged, :symbol ], path: "/account/set-position-mode", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 5, default_params: %{ "from" => "", "to" => "", "type" => "0" }, market_type: :spot, method: :post, name: :transfer, param_mappings: %{ "amount" => "amt", "code" => "ccy" }, params: [ :code, :amount, :fromAccount, :toAccount ], path: "/asset/transfer", response_transformer: {:extract_path, ["data"]}, source: :intercepted }, %{ api_section: "private", auth: true, cost: 1.6666666666666667, market_type: :spot, method: :get, name: :withdraw, param_mappings: %{}, params: [ :code, :amount, :address, :tag ], path: "/asset/currencies", response_transformer: {:extract_path, ["data"]}, source: :intercepted } ], error_code_details: %{ 1 => %{ description: nil, type: :exchange_error }, 1009 => %{ description: nil, type: :invalid_parameters }, 2 => %{ description: nil, type: :exchange_error }, 4001 => %{ description: nil, type: :invalid_credentials }, 4002 => %{ description: nil, type: :invalid_parameters }, 4003 => %{ description: nil, type: :rate_limited }, 4004 => %{ description: nil, type: :network_error }, 4005 => %{ description: nil, type: :network_error }, 4006 => %{ description: nil, type: :invalid_parameters }, 4007 => %{ description: nil, type: :invalid_credentials }, 4008 => %{ description: nil, type: :rate_limited }, 4088 => %{ description: nil, type: :exchange_error }, 50000 => %{ description: nil, type: :invalid_parameters }, 50001 => %{ description: nil, type: :network_error }, 50002 => %{ description: nil, type: :invalid_parameters }, 50004 => %{ description: nil, type: :network_error }, 50005 => %{ description: nil, type: :network_error }, 50006 => %{ description: nil, type: :invalid_parameters }, 50007 => %{ description: nil, type: :access_restricted }, 50008 => %{ description: nil, type: :invalid_credentials }, 50009 => %{ description: nil, type: :access_restricted }, 50010 => %{ description: nil, type: :exchange_error }, 50011 => %{ description: nil, type: :rate_limited }, 50012 => %{ description: nil, type: :exchange_error }, 50013 => %{ description: nil, type: :network_error }, 50014 => %{ description: nil, type: :invalid_parameters }, 50015 => %{ description: nil, type: :exchange_error }, 50016 => %{ description: nil, type: :exchange_error }, 50017 => %{ description: nil, type: :exchange_error }, 50018 => %{ description: nil, type: :exchange_error }, 50019 => %{ description: nil, type: :exchange_error }, 50020 => %{ description: nil, type: :exchange_error }, 50021 => %{ description: nil, type: :exchange_error }, 50022 => %{ description: nil, type: :exchange_error }, 50023 => %{ description: nil, type: :exchange_error }, 50024 => %{ description: nil, type: :invalid_parameters }, 50025 => %{ description: nil, type: :exchange_error }, 50026 => %{ description: nil, type: :network_error }, 50027 => %{ description: nil, type: :access_restricted }, 50028 => %{ description: nil, type: :exchange_error }, 50044 => %{ description: nil, type: :invalid_parameters }, 50061 => %{ description: nil, type: :exchange_error }, 50062 => %{ description: nil, type: :exchange_error }, 50100 => %{ description: nil, type: :exchange_error }, 50101 => %{ description: nil, type: :invalid_credentials }, 50102 => %{ description: nil, type: :invalid_credentials }, 50103 => %{ description: nil, type: :invalid_credentials }, 50104 => %{ description: nil, type: :invalid_credentials }, 50105 => %{ description: nil, type: :invalid_credentials }, 50106 => %{ description: nil, type: :invalid_credentials }, 50107 => %{ description: nil, type: :invalid_credentials }, 50108 => %{ description: nil, type: :exchange_error }, 50109 => %{ description: nil, type: :exchange_error }, 50110 => %{ description: nil, type: :access_restricted }, 50111 => %{ description: nil, type: :invalid_credentials }, 50112 => %{ description: nil, type: :invalid_credentials }, 50113 => %{ description: nil, type: :invalid_credentials }, 50114 => %{ description: nil, type: :invalid_credentials }, 50115 => %{ description: nil, type: :invalid_parameters }, 51000 => %{ description: nil, type: :invalid_parameters }, 51001 => %{ description: nil, type: :invalid_order }, 51002 => %{ description: nil, type: :invalid_order }, 51003 => %{ description: nil, type: :invalid_parameters }, 51004 => %{ description: nil, type: :invalid_order }, 51005 => %{ description: nil, type: :invalid_order }, 51006 => %{ description: nil, type: :invalid_order }, 51007 => %{ description: nil, type: :invalid_order }, 51008 => %{ description: nil, type: :insufficient_balance }, 51009 => %{ description: nil, type: :access_restricted }, 51010 => %{ description: nil, type: :access_restricted }, 51011 => %{ description: nil, type: :invalid_order }, 51012 => %{ description: nil, type: :invalid_order }, 51014 => %{ description: nil, type: :invalid_order }, 51015 => %{ description: nil, type: :invalid_order }, 51016 => %{ description: nil, type: :invalid_order }, 51017 => %{ description: nil, type: :exchange_error }, 51018 => %{ description: nil, type: :exchange_error }, 51019 => %{ description: nil, type: :exchange_error }, 51020 => %{ description: nil, type: :invalid_order }, 51021 => %{ description: nil, type: :market_closed }, 51022 => %{ description: nil, type: :market_closed }, 51023 => %{ description: nil, type: :exchange_error }, 51024 => %{ description: nil, type: :access_restricted }, 51025 => %{ description: nil, type: :exchange_error }, 51026 => %{ description: nil, type: :invalid_order }, 51027 => %{ description: nil, type: :market_closed }, 51028 => %{ description: nil, type: :market_closed }, 51029 => %{ description: nil, type: :market_closed }, 51030 => %{ description: nil, type: :market_closed }, 51031 => %{ description: nil, type: :invalid_order }, 51046 => %{ description: nil, type: :invalid_order }, 51047 => %{ description: nil, type: :invalid_order }, 51051 => %{ description: nil, type: :invalid_order }, 51072 => %{ description: nil, type: :invalid_order }, 51073 => %{ description: nil, type: :invalid_order }, 51074 => %{ description: nil, type: :invalid_order }, 51090 => %{ description: nil, type: :invalid_order }, 51091 => %{ description: nil, type: :invalid_order }, 51092 => %{ description: nil, type: :invalid_order }, 51093 => %{ description: nil, type: :invalid_order }, 51094 => %{ description: nil, type: :invalid_order }, 51095 => %{ description: nil, type: :invalid_order }, 51096 => %{ description: nil, type: :invalid_order }, 51098 => %{ description: nil, type: :invalid_order }, 51099 => %{ description: nil, type: :invalid_order }, 51100 => %{ description: nil, type: :invalid_order }, 51101 => %{ description: nil, type: :invalid_order }, 51102 => %{ description: nil, type: :invalid_order }, 51103 => %{ description: nil, type: :invalid_order }, 51104 => %{ description: nil, type: :invalid_order }, 51105 => %{ description: nil, type: :invalid_order }, 51106 => %{ description: nil, type: :invalid_order }, 51107 => %{ description: nil, type: :invalid_order }, 51108 => %{ description: nil, type: :invalid_order }, 51109 => %{ description: nil, type: :invalid_order }, 51110 => %{ description: nil, type: :invalid_order }, 51111 => %{ description: nil, type: :invalid_parameters }, 51112 => %{ description: nil, type: :invalid_order }, 51113 => %{ description: nil, type: :rate_limited }, 51115 => %{ description: nil, type: :invalid_order }, 51116 => %{ description: nil, type: :invalid_order }, 51117 => %{ description: nil, type: :invalid_order }, 51118 => %{ description: nil, type: :invalid_order }, 51119 => %{ description: nil, type: :insufficient_balance }, 51120 => %{ description: nil, type: :invalid_order }, 51121 => %{ description: nil, type: :invalid_order }, 51122 => %{ description: nil, type: :invalid_order }, 51124 => %{ description: nil, type: :invalid_order }, 51125 => %{ description: nil, type: :invalid_order }, 51126 => %{ description: nil, type: :invalid_order }, 51127 => %{ description: nil, type: :insufficient_balance }, 51128 => %{ description: nil, type: :invalid_order }, 51129 => %{ description: nil, type: :invalid_order }, 51130 => %{ description: nil, type: :invalid_order }, 51131 => %{ description: nil, type: :insufficient_balance }, 51132 => %{ description: nil, type: :invalid_order }, 51133 => %{ description: nil, type: :invalid_order }, 51134 => %{ description: nil, type: :invalid_order }, 51135 => %{ description: nil, type: :invalid_order }, 51136 => %{ description: nil, type: :invalid_order }, 51137 => %{ description: nil, type: :invalid_order }, 51138 => %{ description: nil, type: :invalid_order }, 51139 => %{ description: nil, type: :invalid_order }, 51155 => %{ description: nil, type: :access_restricted }, 51156 => %{ description: nil, type: :invalid_parameters }, 51159 => %{ description: nil, type: :invalid_parameters }, 51162 => %{ description: nil, type: :invalid_order }, 51163 => %{ description: nil, type: :invalid_order }, 51166 => %{ description: nil, type: :invalid_order }, 51174 => %{ description: nil, type: :invalid_order }, 51185 => %{ description: nil, type: :invalid_order }, 51201 => %{ description: nil, type: :invalid_order }, 51202 => %{ description: nil, type: :invalid_order }, 51203 => %{ description: nil, type: :invalid_order }, 51204 => %{ description: nil, type: :invalid_order }, 51205 => %{ description: nil, type: :invalid_order }, 51250 => %{ description: nil, type: :invalid_order }, 51251 => %{ description: nil, type: :invalid_order }, 51252 => %{ description: nil, type: :invalid_order }, 51253 => %{ description: nil, type: :invalid_order }, 51254 => %{ description: nil, type: :invalid_order }, 51255 => %{ description: nil, type: :invalid_order }, 51256 => %{ description: nil, type: :invalid_order }, 51257 => %{ description: nil, type: :invalid_order }, 51258 => %{ description: nil, type: :invalid_order }, 51259 => %{ description: nil, type: :invalid_order }, 51260 => %{ description: nil, type: :invalid_order }, 51261 => %{ description: nil, type: :invalid_order }, 51262 => %{ description: nil, type: :invalid_order }, 51263 => %{ description: nil, type: :invalid_order }, 51264 => %{ description: nil, type: :invalid_order }, 51265 => %{ description: nil, type: :invalid_order }, 51267 => %{ description: nil, type: :invalid_order }, 51268 => %{ description: nil, type: :invalid_order }, 51269 => %{ description: nil, type: :invalid_order }, 51270 => %{ description: nil, type: :invalid_order }, 51271 => %{ description: nil, type: :invalid_order }, 51272 => %{ description: nil, type: :invalid_order }, 51273 => %{ description: nil, type: :invalid_order }, 51274 => %{ description: nil, type: :invalid_order }, 51275 => %{ description: nil, type: :invalid_order }, 51276 => %{ description: nil, type: :invalid_order }, 51277 => %{ description: nil, type: :invalid_order }, 51278 => %{ description: nil, type: :invalid_order }, 51279 => %{ description: nil, type: :invalid_order }, 51280 => %{ description: nil, type: :invalid_order }, 51321 => %{ description: nil, type: :invalid_order }, 51322 => %{ description: nil, type: :invalid_order }, 51323 => %{ description: nil, type: :invalid_parameters }, 51324 => %{ description: nil, type: :invalid_parameters }, 51325 => %{ description: nil, type: :invalid_order }, 51327 => %{ description: nil, type: :invalid_order }, 51328 => %{ description: nil, type: :invalid_order }, 51329 => %{ description: nil, type: :invalid_order }, 51330 => %{ description: nil, type: :invalid_order }, 51400 => %{ description: nil, type: :order_not_found }, 51401 => %{ description: nil, type: :order_not_found }, 51402 => %{ description: nil, type: :order_not_found }, 51403 => %{ description: nil, type: :invalid_order }, 51404 => %{ description: nil, type: :invalid_order }, 51405 => %{ description: nil, type: :exchange_error }, 51406 => %{ description: nil, type: :exchange_error }, 51407 => %{ description: nil, type: :invalid_parameters }, 51408 => %{ description: nil, type: :exchange_error }, 51409 => %{ description: nil, type: :exchange_error }, 51410 => %{ description: nil, type: :exchange_error }, 51500 => %{ description: nil, type: :exchange_error }, 51501 => %{ description: nil, type: :exchange_error }, 51502 => %{ description: nil, type: :insufficient_balance }, 51503 => %{ description: nil, type: :exchange_error }, 51506 => %{ description: nil, type: :exchange_error }, 51508 => %{ description: nil, type: :exchange_error }, 51509 => %{ description: nil, type: :exchange_error }, 51510 => %{ description: nil, type: :exchange_error }, 51511 => %{ description: nil, type: :exchange_error }, 51600 => %{ description: nil, type: :exchange_error }, 51601 => %{ description: nil, type: :exchange_error }, 51602 => %{ description: nil, type: :exchange_error }, 51603 => %{ description: nil, type: :order_not_found }, 51732 => %{ description: nil, type: :invalid_credentials }, 51733 => %{ description: nil, type: :invalid_credentials }, 51734 => %{ description: nil, type: :invalid_credentials }, 51735 => %{ description: nil, type: :exchange_error }, 51736 => %{ description: nil, type: :insufficient_balance }, 52000 => %{ description: nil, type: :exchange_error }, 54000 => %{ description: nil, type: :exchange_error }, 54001 => %{ description: nil, type: :exchange_error }, 54008 => %{ description: nil, type: :invalid_order }, 54009 => %{ description: nil, type: :invalid_order }, 54011 => %{ description: nil, type: :invalid_order }, 54072 => %{ description: nil, type: :exchange_error }, 54073 => %{ description: nil, type: :invalid_parameters }, 54074 => %{ description: nil, type: :exchange_error }, 55100 => %{ description: nil, type: :invalid_order }, 55101 => %{ description: nil, type: :invalid_order }, 55102 => %{ description: nil, type: :invalid_order }, 55103 => %{ description: nil, type: :invalid_order }, 55104 => %{ description: nil, type: :invalid_order }, 55111 => %{ description: nil, type: :invalid_order }, 55112 => %{ description: nil, type: :invalid_order }, 55113 => %{ description: nil, type: :invalid_order }, 58000 => %{ description: nil, type: :exchange_error }, 58001 => %{ description: nil, type: :invalid_credentials }, 58002 => %{ description: nil, type: :access_restricted }, 58003 => %{ description: nil, type: :exchange_error }, 58004 => %{ description: nil, type: :access_restricted }, 58005 => %{ description: nil, type: :exchange_error }, 58006 => %{ description: nil, type: :exchange_error }, 58007 => %{ description: nil, type: :exchange_error }, 58100 => %{ description: nil, type: :exchange_error }, 58101 => %{ description: nil, type: :access_restricted }, 58102 => %{ description: nil, type: :rate_limited }, 58103 => %{ description: nil, type: :exchange_error }, 58104 => %{ description: nil, type: :exchange_error }, 58105 => %{ description: nil, type: :exchange_error }, 58106 => %{ description: nil, type: :exchange_error }, 58107 => %{ description: nil, type: :exchange_error }, 58108 => %{ description: nil, type: :exchange_error }, 58109 => %{ description: nil, type: :exchange_error }, 58110 => %{ description: nil, type: :exchange_error }, 58111 => %{ description: nil, type: :exchange_error }, 58112 => %{ description: nil, type: :exchange_error }, 58114 => %{ description: nil, type: :exchange_error }, 58115 => %{ description: nil, type: :exchange_error }, 58116 => %{ description: nil, type: :exchange_error }, 58117 => %{ description: nil, type: :exchange_error }, 58125 => %{ description: nil, type: :invalid_parameters }, 58126 => %{ description: nil, type: :invalid_parameters }, 58127 => %{ description: nil, type: :invalid_parameters }, 58128 => %{ description: nil, type: :invalid_parameters }, 58200 => %{ description: nil, type: :exchange_error }, 58201 => %{ description: nil, type: :exchange_error }, 58202 => %{ description: nil, type: :exchange_error }, 58203 => %{ description: nil, type: :invalid_parameters }, 58204 => %{ description: nil, type: :access_restricted }, 58205 => %{ description: nil, type: :exchange_error }, 58206 => %{ description: nil, type: :exchange_error }, 58207 => %{ description: nil, type: :invalid_parameters }, 58208 => %{ description: nil, type: :exchange_error }, 58209 => %{ description: nil, type: :exchange_error }, 58210 => %{ description: nil, type: :exchange_error }, 58211 => %{ description: nil, type: :exchange_error }, 58212 => %{ description: nil, type: :exchange_error }, 58213 => %{ description: nil, type: :invalid_credentials }, 58221 => %{ description: nil, type: :invalid_parameters }, 58222 => %{ description: nil, type: :invalid_parameters }, 58224 => %{ description: nil, type: :invalid_parameters }, 58227 => %{ description: nil, type: :invalid_parameters }, 58228 => %{ description: nil, type: :invalid_parameters }, 58229 => %{ description: nil, type: :insufficient_balance }, 58300 => %{ description: nil, type: :exchange_error }, 58350 => %{ description: nil, type: :insufficient_balance }, 59000 => %{ description: nil, type: :exchange_error }, 59001 => %{ description: nil, type: :exchange_error }, 59100 => %{ description: nil, type: :exchange_error }, 59101 => %{ description: nil, type: :exchange_error }, 59102 => %{ description: nil, type: :exchange_error }, 59103 => %{ description: nil, type: :insufficient_balance }, 59104 => %{ description: nil, type: :exchange_error }, 59105 => %{ description: nil, type: :exchange_error }, 59106 => %{ description: nil, type: :exchange_error }, 59107 => %{ description: nil, type: :exchange_error }, 59108 => %{ description: nil, type: :insufficient_balance }, 59109 => %{ description: nil, type: :exchange_error }, 59128 => %{ description: nil, type: :invalid_order }, 59200 => %{ description: nil, type: :insufficient_balance }, 59201 => %{ description: nil, type: :insufficient_balance }, 59216 => %{ description: nil, type: :invalid_parameters }, 59260 => %{ description: nil, type: :access_restricted }, 59262 => %{ description: nil, type: :access_restricted }, 59300 => %{ description: nil, type: :exchange_error }, 59301 => %{ description: nil, type: :exchange_error }, 59313 => %{ description: nil, type: :exchange_error }, 59401 => %{ description: nil, type: :exchange_error }, 59410 => %{ description: nil, type: :exchange_error }, 59411 => %{ description: nil, type: :insufficient_balance }, 59412 => %{ description: nil, type: :exchange_error }, 59413 => %{ description: nil, type: :exchange_error }, 59414 => %{ description: nil, type: :invalid_parameters }, 59500 => %{ description: nil, type: :exchange_error }, 59501 => %{ description: nil, type: :exchange_error }, 59502 => %{ description: nil, type: :exchange_error }, 59503 => %{ description: nil, type: :exchange_error }, 59504 => %{ description: nil, type: :exchange_error }, 59505 => %{ description: nil, type: :exchange_error }, 59506 => %{ description: nil, type: :exchange_error }, 59507 => %{ description: nil, type: :exchange_error }, 59508 => %{ description: nil, type: :access_restricted }, 59515 => %{ description: nil, type: :exchange_error }, 59516 => %{ description: nil, type: :exchange_error }, 59517 => %{ description: nil, type: :exchange_error }, 59518 => %{ description: nil, type: :exchange_error }, 59519 => %{ description: nil, type: :exchange_error }, 59642 => %{ description: nil, type: :invalid_parameters }, 59643 => %{ description: nil, type: :exchange_error }, 59683 => %{ description: nil, type: :exchange_error }, 59684 => %{ description: nil, type: :invalid_parameters }, 59686 => %{ description: nil, type: :invalid_parameters }, 60001 => %{ description: nil, type: :invalid_credentials }, 60002 => %{ description: nil, type: :invalid_credentials }, 60003 => %{ description: nil, type: :invalid_credentials }, 60004 => %{ description: nil, type: :invalid_credentials }, 60005 => %{ description: nil, type: :invalid_credentials }, 60006 => %{ description: nil, type: :invalid_credentials }, 60007 => %{ description: nil, type: :invalid_credentials }, 60008 => %{ description: nil, type: :invalid_credentials }, 60009 => %{ description: nil, type: :invalid_credentials }, 60010 => %{ description: nil, type: :invalid_credentials }, 60011 => %{ description: nil, type: :invalid_credentials }, 60012 => %{ description: nil, type: :invalid_parameters }, 60013 => %{ description: nil, type: :invalid_parameters }, 60014 => %{ description: nil, type: :rate_limited }, 60015 => %{ description: nil, type: :network_error }, 60016 => %{ description: nil, type: :network_error }, 60017 => %{ description: nil, type: :invalid_parameters }, 60018 => %{ description: nil, type: :invalid_parameters }, 60019 => %{ description: nil, type: :invalid_parameters }, 60020 => %{ description: nil, type: :exchange_error }, 60021 => %{ description: nil, type: :access_restricted }, 60022 => %{ description: nil, type: :invalid_credentials }, 60023 => %{ description: nil, type: :rate_limited }, 60024 => %{ description: nil, type: :invalid_credentials }, 60025 => %{ description: nil, type: :exchange_error }, 60026 => %{ description: nil, type: :invalid_credentials }, 60027 => %{ description: nil, type: :invalid_parameters }, 60028 => %{ description: nil, type: :exchange_error }, 60029 => %{ description: nil, type: :access_restricted }, 60030 => %{ description: nil, type: :access_restricted }, 60031 => %{ description: nil, type: :invalid_credentials }, 60032 => %{ description: nil, type: :invalid_credentials }, 63999 => %{ description: nil, type: :exchange_error }, 64000 => %{ description: nil, type: :invalid_parameters }, 64001 => %{ description: nil, type: :invalid_parameters }, 64002 => %{ description: nil, type: :invalid_parameters }, 64003 => %{ description: nil, type: :access_restricted }, 70010 => %{ description: nil, type: :invalid_parameters }, 70013 => %{ description: nil, type: :invalid_parameters }, 70016 => %{ description: nil, type: :invalid_parameters }, 70060 => %{ description: nil, type: :invalid_parameters }, 70061 => %{ description: nil, type: :invalid_parameters }, 70062 => %{ description: nil, type: :invalid_parameters }, 70064 => %{ description: nil, type: :invalid_parameters }, 70065 => %{ description: nil, type: :invalid_parameters }, 70066 => %{ description: nil, type: :invalid_parameters }, 70067 => %{ description: nil, type: :invalid_parameters } }, error_codes: %{ 1 => :exchange_error, 1009 => :invalid_parameters, 2 => :exchange_error, 4001 => :invalid_credentials, 4002 => :invalid_parameters, 4003 => :rate_limited, 4004 => :network_error, 4005 => :network_error, 4006 => :invalid_parameters, 4007 => :invalid_credentials, 4008 => :rate_limited, 4088 => :exchange_error, 50000 => :invalid_parameters, 50001 => :network_error, 50002 => :invalid_parameters, 50004 => :network_error, 50005 => :network_error, 50006 => :invalid_parameters, 50007 => :access_restricted, 50008 => :invalid_credentials, 50009 => :access_restricted, 50010 => :exchange_error, 50011 => :rate_limited, 50012 => :exchange_error, 50013 => :network_error, 50014 => :invalid_parameters, 50015 => :exchange_error, 50016 => :exchange_error, 50017 => :exchange_error, 50018 => :exchange_error, 50019 => :exchange_error, 50020 => :exchange_error, 50021 => :exchange_error, 50022 => :exchange_error, 50023 => :exchange_error, 50024 => :invalid_parameters, 50025 => :exchange_error, 50026 => :network_error, 50027 => :access_restricted, 50028 => :exchange_error, 50044 => :invalid_parameters, 50061 => :exchange_error, 50062 => :exchange_error, 50100 => :exchange_error, 50101 => :invalid_credentials, 50102 => :invalid_credentials, 50103 => :invalid_credentials, 50104 => :invalid_credentials, 50105 => :invalid_credentials, 50106 => :invalid_credentials, 50107 => :invalid_credentials, 50108 => :exchange_error, 50109 => :exchange_error, 50110 => :access_restricted, 50111 => :invalid_credentials, 50112 => :invalid_credentials, 50113 => :invalid_credentials, 50114 => :invalid_credentials, 50115 => :invalid_parameters, 51000 => :invalid_parameters, 51001 => :invalid_order, 51002 => :invalid_order, 51003 => :invalid_parameters, 51004 => :invalid_order, 51005 => :invalid_order, 51006 => :invalid_order, 51007 => :invalid_order, 51008 => :insufficient_balance, 51009 => :access_restricted, 51010 => :access_restricted, 51011 => :invalid_order, 51012 => :invalid_order, 51014 => :invalid_order, 51015 => :invalid_order, 51016 => :invalid_order, 51017 => :exchange_error, 51018 => :exchange_error, 51019 => :exchange_error, 51020 => :invalid_order, 51021 => :market_closed, 51022 => :market_closed, 51023 => :exchange_error, 51024 => :access_restricted, 51025 => :exchange_error, 51026 => :invalid_order, 51027 => :market_closed, 51028 => :market_closed, 51029 => :market_closed, 51030 => :market_closed, 51031 => :invalid_order, 51046 => :invalid_order, 51047 => :invalid_order, 51051 => :invalid_order, 51072 => :invalid_order, 51073 => :invalid_order, 51074 => :invalid_order, 51090 => :invalid_order, 51091 => :invalid_order, 51092 => :invalid_order, 51093 => :invalid_order, 51094 => :invalid_order, 51095 => :invalid_order, 51096 => :invalid_order, 51098 => :invalid_order, 51099 => :invalid_order, 51100 => :invalid_order, 51101 => :invalid_order, 51102 => :invalid_order, 51103 => :invalid_order, 51104 => :invalid_order, 51105 => :invalid_order, 51106 => :invalid_order, 51107 => :invalid_order, 51108 => :invalid_order, 51109 => :invalid_order, 51110 => :invalid_order, 51111 => :invalid_parameters, 51112 => :invalid_order, 51113 => :rate_limited, 51115 => :invalid_order, 51116 => :invalid_order, 51117 => :invalid_order, 51118 => :invalid_order, 51119 => :insufficient_balance, 51120 => :invalid_order, 51121 => :invalid_order, 51122 => :invalid_order, 51124 => :invalid_order, 51125 => :invalid_order, 51126 => :invalid_order, 51127 => :insufficient_balance, 51128 => :invalid_order, 51129 => :invalid_order, 51130 => :invalid_order, 51131 => :insufficient_balance, 51132 => :invalid_order, 51133 => :invalid_order, 51134 => :invalid_order, 51135 => :invalid_order, 51136 => :invalid_order, 51137 => :invalid_order, 51138 => :invalid_order, 51139 => :invalid_order, 51155 => :access_restricted, 51156 => :invalid_parameters, 51159 => :invalid_parameters, 51162 => :invalid_order, 51163 => :invalid_order, 51166 => :invalid_order, 51174 => :invalid_order, 51185 => :invalid_order, 51201 => :invalid_order, 51202 => :invalid_order, 51203 => :invalid_order, 51204 => :invalid_order, 51205 => :invalid_order, 51250 => :invalid_order, 51251 => :invalid_order, 51252 => :invalid_order, 51253 => :invalid_order, 51254 => :invalid_order, 51255 => :invalid_order, 51256 => :invalid_order, 51257 => :invalid_order, 51258 => :invalid_order, 51259 => :invalid_order, 51260 => :invalid_order, 51261 => :invalid_order, 51262 => :invalid_order, 51263 => :invalid_order, 51264 => :invalid_order, 51265 => :invalid_order, 51267 => :invalid_order, 51268 => :invalid_order, 51269 => :invalid_order, 51270 => :invalid_order, 51271 => :invalid_order, 51272 => :invalid_order, 51273 => :invalid_order, 51274 => :invalid_order, 51275 => :invalid_order, 51276 => :invalid_order, 51277 => :invalid_order, 51278 => :invalid_order, 51279 => :invalid_order, 51280 => :invalid_order, 51321 => :invalid_order, 51322 => :invalid_order, 51323 => :invalid_parameters, 51324 => :invalid_parameters, 51325 => :invalid_order, 51327 => :invalid_order, 51328 => :invalid_order, 51329 => :invalid_order, 51330 => :invalid_order, 51400 => :order_not_found, 51401 => :order_not_found, 51402 => :order_not_found, 51403 => :invalid_order, 51404 => :invalid_order, 51405 => :exchange_error, 51406 => :exchange_error, 51407 => :invalid_parameters, 51408 => :exchange_error, 51409 => :exchange_error, 51410 => :exchange_error, 51500 => :exchange_error, 51501 => :exchange_error, 51502 => :insufficient_balance, 51503 => :exchange_error, 51506 => :exchange_error, 51508 => :exchange_error, 51509 => :exchange_error, 51510 => :exchange_error, 51511 => :exchange_error, 51600 => :exchange_error, 51601 => :exchange_error, 51602 => :exchange_error, 51603 => :order_not_found, 51732 => :invalid_credentials, 51733 => :invalid_credentials, 51734 => :invalid_credentials, 51735 => :exchange_error, 51736 => :insufficient_balance, 52000 => :exchange_error, 54000 => :exchange_error, 54001 => :exchange_error, 54008 => :invalid_order, 54009 => :invalid_order, 54011 => :invalid_order, 54072 => :exchange_error, 54073 => :invalid_parameters, 54074 => :exchange_error, 55100 => :invalid_order, 55101 => :invalid_order, 55102 => :invalid_order, 55103 => :invalid_order, 55104 => :invalid_order, 55111 => :invalid_order, 55112 => :invalid_order, 55113 => :invalid_order, 58000 => :exchange_error, 58001 => :invalid_credentials, 58002 => :access_restricted, 58003 => :exchange_error, 58004 => :access_restricted, 58005 => :exchange_error, 58006 => :exchange_error, 58007 => :exchange_error, 58100 => :exchange_error, 58101 => :access_restricted, 58102 => :rate_limited, 58103 => :exchange_error, 58104 => :exchange_error, 58105 => :exchange_error, 58106 => :exchange_error, 58107 => :exchange_error, 58108 => :exchange_error, 58109 => :exchange_error, 58110 => :exchange_error, 58111 => :exchange_error, 58112 => :exchange_error, 58114 => :exchange_error, 58115 => :exchange_error, 58116 => :exchange_error, 58117 => :exchange_error, 58125 => :invalid_parameters, 58126 => :invalid_parameters, 58127 => :invalid_parameters, 58128 => :invalid_parameters, 58200 => :exchange_error, 58201 => :exchange_error, 58202 => :exchange_error, 58203 => :invalid_parameters, 58204 => :access_restricted, 58205 => :exchange_error, 58206 => :exchange_error, 58207 => :invalid_parameters, 58208 => :exchange_error, 58209 => :exchange_error, 58210 => :exchange_error, 58211 => :exchange_error, 58212 => :exchange_error, 58213 => :invalid_credentials, 58221 => :invalid_parameters, 58222 => :invalid_parameters, 58224 => :invalid_parameters, 58227 => :invalid_parameters, 58228 => :invalid_parameters, 58229 => :insufficient_balance, 58300 => :exchange_error, 58350 => :insufficient_balance, 59000 => :exchange_error, 59001 => :exchange_error, 59100 => :exchange_error, 59101 => :exchange_error, 59102 => :exchange_error, 59103 => :insufficient_balance, 59104 => :exchange_error, 59105 => :exchange_error, 59106 => :exchange_error, 59107 => :exchange_error, 59108 => :insufficient_balance, 59109 => :exchange_error, 59128 => :invalid_order, 59200 => :insufficient_balance, 59201 => :insufficient_balance, 59216 => :invalid_parameters, 59260 => :access_restricted, 59262 => :access_restricted, 59300 => :exchange_error, 59301 => :exchange_error, 59313 => :exchange_error, 59401 => :exchange_error, 59410 => :exchange_error, 59411 => :insufficient_balance, 59412 => :exchange_error, 59413 => :exchange_error, 59414 => :invalid_parameters, 59500 => :exchange_error, 59501 => :exchange_error, 59502 => :exchange_error, 59503 => :exchange_error, 59504 => :exchange_error, 59505 => :exchange_error, 59506 => :exchange_error, 59507 => :exchange_error, 59508 => :access_restricted, 59515 => :exchange_error, 59516 => :exchange_error, 59517 => :exchange_error, 59518 => :exchange_error, 59519 => :exchange_error, 59642 => :invalid_parameters, 59643 => :exchange_error, 59683 => :exchange_error, 59684 => :invalid_parameters, 59686 => :invalid_parameters, 60001 => :invalid_credentials, 60002 => :invalid_credentials, 60003 => :invalid_credentials, 60004 => :invalid_credentials, 60005 => :invalid_credentials, 60006 => :invalid_credentials, 60007 => :invalid_credentials, 60008 => :invalid_credentials, 60009 => :invalid_credentials, 60010 => :invalid_credentials, 60011 => :invalid_credentials, 60012 => :invalid_parameters, 60013 => :invalid_parameters, 60014 => :rate_limited, 60015 => :network_error, 60016 => :network_error, 60017 => :invalid_parameters, 60018 => :invalid_parameters, 60019 => :invalid_parameters, 60020 => :exchange_error, 60021 => :access_restricted, 60022 => :invalid_credentials, 60023 => :rate_limited, 60024 => :invalid_credentials, 60025 => :exchange_error, 60026 => :invalid_credentials, 60027 => :invalid_parameters, 60028 => :exchange_error, 60029 => :access_restricted, 60030 => :access_restricted, 60031 => :invalid_credentials, 60032 => :invalid_credentials, 63999 => :exchange_error, 64000 => :invalid_parameters, 64001 => :invalid_parameters, 64002 => :invalid_parameters, 64003 => :access_restricted, 70010 => :invalid_parameters, 70013 => :invalid_parameters, 70016 => :invalid_parameters, 70060 => :invalid_parameters, 70061 => :invalid_parameters, 70062 => :invalid_parameters, 70064 => :invalid_parameters, 70065 => :invalid_parameters, 70066 => :invalid_parameters, 70067 => :invalid_parameters }, exceptions: %{ broad: %{ "Internal Server Error" => :exchange_not_available, "server error" => :exchange_not_available }, exact: %{ "1" => :exchange_error, "1009" => :bad_request, "2" => :exchange_error, "4001" => :authentication_error, "4002" => :bad_request, "4003" => :rate_limit_exceeded, "4004" => :network_error, "4005" => :exchange_not_available, "4006" => :bad_request, "4007" => :authentication_error, "4008" => :rate_limit_exceeded, "4088" => :manual_interaction_needed, "50000" => :bad_request, "50001" => :on_maintenance, "50002" => :bad_request, "50004" => :request_timeout, "50005" => :exchange_not_available, "50006" => :bad_request, "50007" => :account_suspended, "50008" => :authentication_error, "50009" => :account_suspended, "50010" => :exchange_error, "50011" => :rate_limit_exceeded, "50012" => :exchange_error, "50013" => :exchange_not_available, "50014" => :bad_request, "50015" => :exchange_error, "50016" => :exchange_error, "50017" => :exchange_error, "50018" => :exchange_error, "50019" => :exchange_error, "50020" => :exchange_error, "50021" => :exchange_error, "50022" => :exchange_error, "50023" => :exchange_error, "50024" => :bad_request, "50025" => :exchange_error, "50026" => :exchange_not_available, "50027" => :permission_denied, "50028" => :exchange_error, "50044" => :bad_request, "50061" => :exchange_error, "50062" => :exchange_error, "50100" => :exchange_error, "50101" => :authentication_error, "50102" => :invalid_nonce, "50103" => :authentication_error, "50104" => :authentication_error, "50105" => :authentication_error, "50106" => :authentication_error, "50107" => :authentication_error, "50108" => :exchange_error, "50109" => :exchange_error, "50110" => :permission_denied, "50111" => :authentication_error, "50112" => :authentication_error, "50113" => :authentication_error, "50114" => :authentication_error, "50115" => :bad_request, "51000" => :bad_request, "51001" => :bad_symbol, "51002" => :bad_symbol, "51003" => :bad_request, "51004" => :invalid_order, "51005" => :invalid_order, "51006" => :invalid_order, "51007" => :invalid_order, "51008" => :insufficient_funds, "51009" => :account_suspended, "51010" => :account_not_enabled, "51011" => :invalid_order, "51012" => :bad_symbol, "51014" => :bad_symbol, "51015" => :bad_symbol, "51016" => :invalid_order, "51017" => :exchange_error, "51018" => :exchange_error, "51019" => :exchange_error, "51020" => :invalid_order, "51021" => :contract_unavailable, "51022" => :contract_unavailable, "51023" => :exchange_error, "51024" => :account_suspended, "51025" => :exchange_error, "51026" => :bad_symbol, "51027" => :contract_unavailable, "51028" => :contract_unavailable, "51029" => :contract_unavailable, "51030" => :contract_unavailable, "51031" => :invalid_order, "51046" => :invalid_order, "51047" => :invalid_order, "51051" => :invalid_order, "51072" => :invalid_order, "51073" => :invalid_order, "51074" => :invalid_order, "51090" => :invalid_order, "51091" => :invalid_order, "51092" => :invalid_order, "51093" => :invalid_order, "51094" => :invalid_order, "51095" => :invalid_order, "51096" => :invalid_order, "51098" => :invalid_order, "51099" => :invalid_order, "51100" => :invalid_order, "51101" => :invalid_order, "51102" => :invalid_order, "51103" => :invalid_order, "51104" => :invalid_order, "51105" => :invalid_order, "51106" => :invalid_order, "51107" => :invalid_order, "51108" => :invalid_order, "51109" => :invalid_order, "51110" => :invalid_order, "51111" => :bad_request, "51112" => :invalid_order, "51113" => :rate_limit_exceeded, "51115" => :invalid_order, "51116" => :invalid_order, "51117" => :invalid_order, "51118" => :invalid_order, "51119" => :insufficient_funds, "51120" => :invalid_order, "51121" => :invalid_order, "51122" => :invalid_order, "51124" => :invalid_order, "51125" => :invalid_order, "51126" => :invalid_order, "51127" => :insufficient_funds, "51128" => :invalid_order, "51129" => :invalid_order, "51130" => :bad_symbol, "51131" => :insufficient_funds, "51132" => :invalid_order, "51133" => :invalid_order, "51134" => :invalid_order, "51135" => :invalid_order, "51136" => :invalid_order, "51137" => :invalid_order, "51138" => :invalid_order, "51139" => :invalid_order, "51155" => :restricted_location, "51156" => :bad_request, "51159" => :bad_request, "51162" => :invalid_order, "51163" => :invalid_order, "51166" => :invalid_order, "51174" => :invalid_order, "51185" => :invalid_order, "51201" => :invalid_order, "51202" => :invalid_order, "51203" => :invalid_order, "51204" => :invalid_order, "51205" => :invalid_order, "51250" => :invalid_order, "51251" => :invalid_order, "51252" => :invalid_order, "51253" => :invalid_order, "51254" => :invalid_order, "51255" => :invalid_order, "51256" => :invalid_order, "51257" => :invalid_order, "51258" => :invalid_order, "51259" => :invalid_order, "51260" => :invalid_order, "51261" => :invalid_order, "51262" => :invalid_order, "51263" => :invalid_order, "51264" => :invalid_order, "51265" => :invalid_order, "51267" => :invalid_order, "51268" => :invalid_order, "51269" => :invalid_order, "51270" => :invalid_order, "51271" => :invalid_order, "51272" => :invalid_order, "51273" => :invalid_order, "51274" => :invalid_order, "51275" => :invalid_order, "51276" => :invalid_order, "51277" => :invalid_order, "51278" => :invalid_order, "51279" => :invalid_order, "51280" => :invalid_order, "51321" => :invalid_order, "51322" => :invalid_order, "51323" => :bad_request, "51324" => :bad_request, "51325" => :invalid_order, "51327" => :invalid_order, "51328" => :invalid_order, "51329" => :invalid_order, "51330" => :invalid_order, "51400" => :order_not_found, "51401" => :order_not_found, "51402" => :order_not_found, "51403" => :invalid_order, "51404" => :invalid_order, "51405" => :exchange_error, "51406" => :exchange_error, "51407" => :bad_request, "51408" => :exchange_error, "51409" => :exchange_error, "51410" => :cancel_pending, "51500" => :exchange_error, "51501" => :exchange_error, "51502" => :insufficient_funds, "51503" => :exchange_error, "51506" => :exchange_error, "51508" => :exchange_error, "51509" => :exchange_error, "51510" => :exchange_error, "51511" => :exchange_error, "51600" => :exchange_error, "51601" => :exchange_error, "51602" => :exchange_error, "51603" => :order_not_found, "51732" => :authentication_error, "51733" => :authentication_error, "51734" => :authentication_error, "51735" => :exchange_error, "51736" => :insufficient_funds, "52000" => :exchange_error, "54000" => :exchange_error, "54001" => :exchange_error, "54008" => :invalid_order, "54009" => :invalid_order, "54011" => :invalid_order, "54072" => :exchange_error, "54073" => :bad_request, "54074" => :exchange_error, "55100" => :invalid_order, "55101" => :invalid_order, "55102" => :invalid_order, "55103" => :invalid_order, "55104" => :invalid_order, "55111" => :invalid_order, "55112" => :invalid_order, "55113" => :invalid_order, "58000" => :exchange_error, "58001" => :authentication_error, "58002" => :permission_denied, "58003" => :exchange_error, "58004" => :account_suspended, "58005" => :exchange_error, "58006" => :exchange_error, "58007" => :exchange_error, "58100" => :exchange_error, "58101" => :account_suspended, "58102" => :rate_limit_exceeded, "58103" => :exchange_error, "58104" => :exchange_error, "58105" => :exchange_error, "58106" => :exchange_error, "58107" => :exchange_error, "58108" => :exchange_error, "58109" => :exchange_error, "58110" => :exchange_error, "58111" => :exchange_error, "58112" => :exchange_error, "58114" => :exchange_error, "58115" => :exchange_error, "58116" => :exchange_error, "58117" => :exchange_error, "58125" => :bad_request, "58126" => :bad_request, "58127" => :bad_request, "58128" => :bad_request, "58200" => :exchange_error, "58201" => :exchange_error, "58202" => :exchange_error, "58203" => :invalid_address, "58204" => :account_suspended, "58205" => :exchange_error, "58206" => :exchange_error, "58207" => :invalid_address, "58208" => :exchange_error, "58209" => :exchange_error, "58210" => :exchange_error, "58211" => :exchange_error, "58212" => :exchange_error, "58213" => :authentication_error, "58221" => :bad_request, "58222" => :bad_request, "58224" => :bad_request, "58227" => :bad_request, "58228" => :bad_request, "58229" => :insufficient_funds, "58300" => :exchange_error, "58350" => :insufficient_funds, "59000" => :exchange_error, "59001" => :exchange_error, "59100" => :exchange_error, "59101" => :exchange_error, "59102" => :exchange_error, "59103" => :insufficient_funds, "59104" => :exchange_error, "59105" => :exchange_error, "59106" => :exchange_error, "59107" => :exchange_error, "59108" => :insufficient_funds, "59109" => :exchange_error, "59128" => :invalid_order, "59200" => :insufficient_funds, "59201" => :insufficient_funds, "59216" => :bad_request, "59260" => :permission_denied, "59262" => :permission_denied, "59300" => :exchange_error, "59301" => :exchange_error, "59313" => :exchange_error, "59401" => :exchange_error, "59410" => :operation_rejected, "59411" => :insufficient_funds, "59412" => :operation_rejected, "59413" => :operation_rejected, "59414" => :bad_request, "59500" => :exchange_error, "59501" => :exchange_error, "59502" => :exchange_error, "59503" => :exchange_error, "59504" => :exchange_error, "59505" => :exchange_error, "59506" => :exchange_error, "59507" => :exchange_error, "59508" => :account_suspended, "59515" => :exchange_error, "59516" => :exchange_error, "59517" => :exchange_error, "59518" => :exchange_error, "59519" => :exchange_error, "59642" => :bad_request, "59643" => :exchange_error, "59683" => :exchange_error, "59684" => :bad_request, "59686" => :bad_request, "60001" => :authentication_error, "60002" => :authentication_error, "60003" => :authentication_error, "60004" => :authentication_error, "60005" => :authentication_error, "60006" => :invalid_nonce, "60007" => :authentication_error, "60008" => :authentication_error, "60009" => :authentication_error, "60010" => :authentication_error, "60011" => :authentication_error, "60012" => :bad_request, "60013" => :bad_request, "60014" => :rate_limit_exceeded, "60015" => :network_error, "60016" => :exchange_not_available, "60017" => :bad_request, "60018" => :bad_request, "60019" => :bad_request, "60020" => :exchange_error, "60021" => :account_not_enabled, "60022" => :authentication_error, "60023" => :ddos_protection, "60024" => :authentication_error, "60025" => :exchange_error, "60026" => :authentication_error, "60027" => :arguments_required, "60028" => :not_supported, "60029" => :account_not_enabled, "60030" => :account_not_enabled, "60031" => :authentication_error, "60032" => :authentication_error, "63999" => :exchange_error, "64000" => :bad_request, "64001" => :bad_request, "64002" => :bad_request, "64003" => :account_not_enabled, "70010" => :bad_request, "70013" => :bad_request, "70016" => :bad_request, "70060" => :bad_request, "70061" => :bad_request, "70062" => :bad_request, "70064" => :bad_request, "70065" => :bad_request, "70066" => :bad_request, "70067" => :bad_request } }, exchange_options: %{ "accountsById" => %{ "18" => "trading", "6" => "funding" }, "accountsByType" => %{ "funding" => "6", "future" => "18", "futures" => "18", "margin" => "18", "option" => "18", "spot" => "18", "swap" => "18", "trading" => "18" }, "adjustForTimeDifference" => false, "algoOrderTypes" => %{ "conditional" => true, "iceberg" => true, "move_order_stop" => true, "oco" => true, "trigger" => true, "twap" => true }, "brokerId" => "6b9ad766b55dBCDE", "cancelOrders" => %{ "method" => "privatePostTradeCancelBatchOrders" }, "createMarketBuyOrderRequiresPrice" => false, "createOrder" => "privatePostTradeBatchOrders", "defaultNetwork" => "ERC20", "defaultNetworkCodeReplacements" => %{ "BRC20" => %{ "BRC20" => "BTC" }, "CRO" => %{ "CRC20" => "CRONOS" }, "ETH" => %{ "ERC20" => "ETH" }, "TRX" => %{ "TRC20" => "TRX" } }, "defaultNetworks" => %{ "BTC" => "BTC", "ETH" => "ERC20", "USDT" => "TRC20" }, "defaultType" => "spot", "exchangeType" => %{ "FUTURES" => "FUTURES", "MARGIN" => "MARGIN", "OPTION" => "OPTION", "SPOT" => "SPOT", "SWAP" => "SWAP", "future" => "FUTURES", "futures" => "FUTURES", "margin" => "MARGIN", "option" => "OPTION", "spot" => "SPOT", "swap" => "SWAP" }, "fetchCanceledOrders" => %{ "method" => "privateGetTradeOrdersHistory" }, "fetchClosedOrders" => %{ "method" => "privateGetTradeOrdersHistory" }, "fetchLedger" => %{ "method" => "privateGetAccountBills" }, "fetchMarkets" => %{ "types" => [ "spot", "future", "swap", "option" ] }, "fetchOHLCV" => %{ "timezone" => "UTC" }, "fetchOpenInterestHistory" => %{ "timeframes" => %{ "1D" => "1D", "1H" => "1H", "1d" => "1D", "1h" => "1H", "5M" => "5m", "5m" => "5m", "8H" => "8H", "8h" => "8H" } }, "fetchOpenOrders" => %{ "method" => "privateGetTradeOrdersPending" }, "fetchOrder" => %{ "method" => "privateGetTradeOrder" }, "fetchPositions" => %{ "method" => "privateGetAccountPositions" }, "networks" => %{ "ACA" => "Acala", "ADA" => "Cardano", "ALGO" => "Algorand", "APT" => "Aptos", "AR" => "Arweave", "ARBONE" => "Arbitrum One", "ASTR" => "Astar", "ATOM" => "Cosmos", "AVAXC" => "Avalanche C-Chain", "AVAXX" => "Avalanche X-Chain", "BASE" => "Base", "BCH" => "BitcoinCash", "BEP20" => "BSC", "BRC20" => "BRC20", "BSV" => "Bitcoin SV", "BTC" => "Bitcoin", "BTCLIGHTNING" => "Lightning", "BTCLN" => "Lightning", "CELO" => "CELO", "CFX" => "Conflux", "CORE" => "CORE", "CRC20" => "Crypto", "CSPR" => "Casper", "DGB" => "Digibyte", "DOGE" => "Dogecoin", "DOT" => "Polkadot", "EGLD" => "Elrond", "EOS" => "EOS", "ERC20" => "ERC20", "ETC" => "Ethereum Classic", "ETHW" => "EthereumPow", "FIL" => "Filecoin", "GLRM" => "Moonbeam", "HBAR" => "Hedera", "ICP" => "Dfinity", "ICX" => "ICON", "IOST" => "IOST", "IOTA" => "MIOTA", "KLAY" => "Klaytn", "KSM" => "Kusama", "LAT" => "PlatON", "LINEA" => "Linea", "LSK" => "Lisk", "LTC" => "Litecoin", "MATIC" => "Polygon", "METIS" => "Metis", "MINA" => "Mina", "MOVR" => "Moonriver", "NANO" => "Nano", "NEAR" => "NEAR", "NULS" => "NULS", "OASYS" => "OASYS", "ONE" => "Harmony", "ONT" => "Ontology", "OPTIMISM" => "Optimism", "RVN" => "Ravencoin", "SC" => "Siacoin", "SCROLL" => "Scroll", "SOL" => "Solana", "STX" => "l-Stacks", "SUI" => "SUI", "THETA" => "Theta", "TON" => "TON", "TRC20" => "TRC20", "WAX" => "Wax", "XCH" => "Chia", "XLM" => "Stellar Lumens", "XRP" => "Ripple", "XTZ" => "Tezos", "ZIL" => "Zilliqa", "ZKSYNCERA" => "zkSync Era" }, "networksById" => %{ "Acala" => "ACA", "Algorand" => "ALGO", "Aptos" => "APT", "Arbitrum One" => "ARBONE", "Arweave" => "AR", "Astar" => "ASTR", "Avalanche C-Chain" => "AVAXC", "Avalanche X-Chain" => "AVAXX", "BRC20" => "BRC20", "BSC" => "BEP20", "Base" => "BASE", "Bitcoin" => "BTC", "Bitcoin SV" => "BSV", "BitcoinCash" => "BCH", "CELO" => "CELO", "CORE" => "CORE", "Cardano" => "ADA", "Casper" => "CSPR", "Chia" => "XCH", "Conflux" => "CFX", "Cosmos" => "ATOM", "Crypto" => "CRC20", "Dfinity" => "ICP", "Digibyte" => "DGB", "Dogecoin" => "DOGE", "EOS" => "EOS", "ERC20" => "ERC20", "Elrond" => "EGLD", "Ethereum Classic" => "ETC", "EthereumPow" => "ETHW", "Filecoin" => "FIL", "Harmony" => "ONE", "Hedera" => "HBAR", "ICON" => "ICX", "IOST" => "IOST", "Klaytn" => "KLAY", "Kusama" => "KSM", "Lightning" => "BTCLIGHTNING", "Linea" => "LINEA", "Lisk" => "LSK", "Litecoin" => "LTC", "MIOTA" => "IOTA", "Metis" => "METIS", "Mina" => "MINA", "Moonbeam" => "GLRM", "Moonriver" => "MOVR", "NEAR" => "NEAR", "NULS" => "NULS", "Nano" => "NANO", "OASYS" => "OASYS", "Ontology" => "ONT", "Optimism" => "OPTIMISM", "PlatON" => "LAT", "Polkadot" => "DOT", "Polygon" => "MATIC", "Ravencoin" => "RVN", "Ripple" => "XRP", "SUI" => "SUI", "Scroll" => "SCROLL", "Siacoin" => "SC", "Solana" => "SOL", "Stellar Lumens" => "XLM", "TON" => "TON", "TRC20" => "TRC20", "Tezos" => "XTZ", "Theta" => "THETA", "Wax" => "WAX", "Zilliqa" => "ZIL", "l-Stacks" => "STX", "zkSync Era" => "ZKSYNCERA" }, "sandboxMode" => false, "timeDifference" => 0, "withdraw" => %{} }, extended_metadata: %{ fees_url: "https://app.okx.com/pages/products/fees.html", limits: %{ "amount" => %{}, "cost" => %{}, "leverage" => %{}, "price" => %{} }, logo_url: "https://user-images.githubusercontent.com/1294454/152485636-38b19e4a-bece-4dec-979a-5982859ffc04.jpg", referral_discount: 0.2, referral_url: "https://www.app.okx.com/join/CCXT2023" }, extracted_metadata: %{ ccxt_version: "4.5.34" }, features: %{ default: %{ create_order: %{ attached_stop_loss_take_profit: %{ price: true, trigger_price_type: %{ index: true, last: true, mark: true } }, hedged: true, iceberg: true, leverage: false, margin_mode: true, market_buy_by_cost: true, market_buy_requires_price: false, self_trade_prevention: true, stop_loss_price: true, take_profit_price: true, time_in_force: %{ fok: true, gtd: false, ioc: true, po: true }, trailing: true, trigger_direction: false, trigger_price: true, trigger_price_type: %{ index: true, last: true, mark: true } }, create_orders: %{ max: 20 }, fetch_closed_orders: %{ days_back: 90, days_back_canceled: 0.08333333333333333, limit: 100, margin_mode: false, symbol_required: false, trailing: true, trigger: true }, fetch_my_trades: %{ days_back: 90, limit: 100, margin_mode: false, symbol_required: false, until_days: 10000 }, fetch_ohlcv: %{ index: 100, limit: 300, mark: 100 }, fetch_open_orders: %{ limit: 100, margin_mode: false, symbol_required: false, trailing: true, trigger: true }, fetch_order: %{ margin_mode: false, symbol_required: true, trailing: true, trigger: true }, sandbox: true }, future: %{}, spot: %{ extends: "default", fetch_currencies: %{ private: true } }, swap: %{} }, fees: %{ future: %{ maker: 0.0002, taker: 0.0005 }, spot: %{ maker: 0.001, taker: 0.0015 }, swap: %{ maker: 0.0002, taker: 0.0005 }, trading: %{ maker: 0.001, taker: 0.0015 } }, handle_content_type_application_zip: nil, handle_errors_source: "handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n if (!response) {\n return undefined; // fallback to default error handler\n }\n //\n // {\n // \"code\": \"1\",\n // \"data\": [\n // {\n // \"clOrdId\": \"\",\n // \"ordId\": \"\",\n // \"sCode\": \"51119\",\n // \"sMsg\": \"Order placement failed due to insufficient balance. \",\n // \"tag\": \"\"\n // }\n // ],\n // \"msg\": \"\"\n // },\n // {\n // \"code\": \"58001\",\n // \"data\": [],\n // \"msg\": \"Incorrect trade password\"\n // }\n //\n const code = this.safeString(response, 'code');\n if ((code !== '0') && (code !== '2')) { // 2 means that bulk operation partially succeeded\n const feedback = this.id + ' ' + body;\n const data = this.safeList(response, 'data', []);\n for (let i = 0; i < data.length; i++) {\n const error = data[i];\n const errorCode = this.safeString(error, 'sCode');\n const message = this.safeString(error, 'sMsg');\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);\n }\n this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);\n throw new errors.ExchangeError(feedback); // unknown message\n }\n return undefined;\n }", has: %{ add_margin: true, borrow_cross_margin: false, borrow_isolated_margin: false, borrow_margin: false, c_o_r_s: false, cancel_all_orders: false, cancel_all_orders_after: true, cancel_all_orders_ws: false, cancel_order: true, cancel_order_with_client_order_id: false, cancel_order_ws: false, cancel_orders: true, cancel_orders_for_symbols: true, cancel_orders_with_client_order_id: false, cancel_orders_ws: false, close_all_positions: false, close_position: true, create_convert_trade: true, 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: true, 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: true, 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: true, create_order_with_take_profit_and_stop_loss_ws: false, create_order_ws: false, create_orders: true, create_post_only_order: true, create_post_only_order_ws: false, create_reduce_only_order: true, create_reduce_only_order_ws: false, create_stop_limit_order: true, create_stop_limit_order_ws: false, create_stop_loss_order: true, create_stop_loss_order_ws: false, create_stop_market_order: true, create_stop_market_order_ws: false, create_stop_order: true, create_stop_order_ws: false, create_take_profit_order: true, create_take_profit_order_ws: false, create_trailing_amount_order: false, create_trailing_amount_order_ws: false, create_trailing_percent_order: true, create_trailing_percent_order_ws: false, create_trigger_order: true, 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: true, fetch_all_greeks: true, fetch_balance: true, fetch_balance_ws: false, fetch_bids_asks: false, fetch_borrow_interest: true, fetch_borrow_rate: false, fetch_borrow_rate_histories: true, fetch_borrow_rate_history: true, fetch_borrow_rates: false, fetch_borrow_rates_per_symbol: false, fetch_canceled_and_closed_orders: false, fetch_canceled_orders: true, fetch_closed_order: false, fetch_closed_orders: true, fetch_closed_orders_ws: false, fetch_convert_currencies: true, fetch_convert_quote: true, fetch_convert_trade: true, fetch_convert_trade_history: true, fetch_cross_borrow_rate: true, fetch_cross_borrow_rates: true, fetch_currencies: true, fetch_currencies_ws: true, fetch_deposit: true, fetch_deposit_address: true, fetch_deposit_addresses: false, fetch_deposit_addresses_by_network: true, fetch_deposit_withdraw_fee: true, fetch_deposit_withdraw_fees: true, fetch_deposits: true, fetch_deposits_withdrawals: false, fetch_deposits_ws: false, fetch_funding_history: true, fetch_funding_interval: true, fetch_funding_intervals: false, fetch_funding_rate: true, fetch_funding_rate_history: true, fetch_funding_rates: true, fetch_greeks: true, fetch_index_ohlcv: true, 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: true, fetch_ledger_entry: false, fetch_leverage: true, fetch_leverage_tiers: false, fetch_leverages: false, fetch_liquidations: false, fetch_long_short_ratio: false, fetch_long_short_ratio_history: true, fetch_margin_adjustment_history: true, fetch_margin_mode: false, fetch_margin_modes: false, fetch_mark_ohlcv: true, fetch_mark_price: true, fetch_mark_prices: true, fetch_market_leverage_tiers: true, fetch_markets: true, fetch_markets_ws: false, fetch_my_liquidations: false, fetch_my_settlement_history: false, fetch_my_trades: true, fetch_my_trades_ws: false, fetch_ohlcv: true, fetch_ohlcv_ws: false, fetch_open_interest: true, fetch_open_interest_history: true, fetch_open_interests: true, fetch_open_order: false, fetch_open_orders: true, fetch_open_orders_ws: false, fetch_option: true, fetch_option_chain: true, fetch_order: true, fetch_order_book: true, fetch_order_book_ws: false, fetch_order_books: false, fetch_order_trades: true, fetch_order_with_client_order_id: false, fetch_order_ws: false, fetch_orders: false, fetch_orders_by_status: false, fetch_orders_ws: false, fetch_position: true, fetch_position_history: true, fetch_position_mode: false, fetch_position_ws: false, fetch_positions: true, fetch_positions_for_symbol: true, fetch_positions_for_symbol_ws: false, fetch_positions_history: true, fetch_positions_risk: false, fetch_positions_ws: false, fetch_premium_index_ohlcv: false, fetch_settlement_history: true, fetch_status: true, fetch_ticker: true, fetch_ticker_ws: false, fetch_tickers: true, fetch_tickers_ws: false, fetch_time: true, fetch_trades: true, fetch_trades_ws: false, fetch_trading_fee: true, 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: true, fetch_transfers: true, fetch_underlying_assets: true, fetch_volatility_history: false, fetch_withdraw_addresses: false, fetch_withdrawal: true, fetch_withdrawal_whitelist: false, fetch_withdrawals: true, fetch_withdrawals_ws: false, future: false, margin: false, option: false, private_api: true, public_api: true, reduce_margin: true, repay_cross_margin: true, repay_isolated_margin: false, sandbox: true, set_leverage: true, set_margin: false, set_margin_mode: true, set_position_mode: true, sign_in: false, spot: true, swap: false, transfer: true, 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: true, watch_bids_asks: true, watch_funding_rate: true, watch_funding_rates: true, watch_liquidations: true, watch_liquidations_for_symbols: true, watch_mark_price: true, watch_mark_prices: true, watch_my_liquidations: true, watch_my_liquidations_for_symbols: true, watch_my_trades: true, watch_ohlcv: true, watch_ohlcv_for_symbols: true, watch_order_book: true, watch_order_book_for_symbols: true, watch_orders: true, watch_orders_for_symbols: false, watch_position: false, watch_positions: true, watch_status: false, watch_ticker: true, watch_tickers: true, watch_trades: true, watch_trades_for_symbols: true, withdraw: true, ws: false }, http_config: nil, id: "okxus", markets: nil, name: "OKX (US)", ohlcv_timestamp_resolution: :unknown, options: %{ accounts_by_id: %{ "18" => "trading", "6" => "funding" }, accounts_by_type: %{ "funding" => "6", "future" => "18", "futures" => "18", "margin" => "18", "option" => "18", "spot" => "18", "swap" => "18", "trading" => "18" }, adjust_for_time_difference: false, algo_order_types: %{ "conditional" => true, "iceberg" => true, "move_order_stop" => true, "oco" => true, "trigger" => true, "twap" => true }, broker_id: "6b9ad766b55dBCDE", cancel_orders: %{ "method" => "privatePostTradeCancelBatchOrders" }, create_market_buy_order_requires_price: false, create_order: "privatePostTradeBatchOrders", default_account_type: "spot", default_network: "ERC20", default_networks: %{ "BTC" => "BTC", "ETH" => "ERC20", "USDT" => "TRC20" }, default_type: "spot", exchange_type: %{ "FUTURES" => "FUTURES", "MARGIN" => "MARGIN", "OPTION" => "OPTION", "SPOT" => "SPOT", "SWAP" => "SWAP", "future" => "FUTURES", "futures" => "FUTURES", "margin" => "MARGIN", "option" => "OPTION", "spot" => "SPOT", "swap" => "SWAP" }, fetch_canceled_orders: %{ "method" => "privateGetTradeOrdersHistory" }, fetch_closed_orders: %{ "method" => "privateGetTradeOrdersHistory" }, fetch_ledger: %{ "method" => "privateGetAccountBills" }, fetch_markets: %{ "types" => [ "spot", "future", "swap", "option" ] }, fetch_o_h_l_c_v: %{ "timezone" => "UTC" }, fetch_open_interest_history: %{ "timeframes" => %{ "1D" => "1D", "1H" => "1H", "1d" => "1D", "1h" => "1H", "5M" => "5m", "5m" => "5m", "8H" => "8H", "8h" => "8H" } }, fetch_open_orders: %{ "method" => "privateGetTradeOrdersPending" }, fetch_order: %{ "method" => "privateGetTradeOrder" }, fetch_positions: %{ "method" => "privateGetAccountPositions" }, networks: %{ "ACA" => "Acala", "ADA" => "Cardano", "ALGO" => "Algorand", "APT" => "Aptos", "AR" => "Arweave", "ARBONE" => "Arbitrum One", "ASTR" => "Astar", "ATOM" => "Cosmos", "AVAXC" => "Avalanche C-Chain", "AVAXX" => "Avalanche X-Chain", "BASE" => "Base", "BCH" => "BitcoinCash", "BEP20" => "BSC", "BRC20" => "BRC20", "BSV" => "Bitcoin SV", "BTC" => "Bitcoin", "BTCLIGHTNING" => "Lightning", "BTCLN" => "Lightning", "CELO" => "CELO", "CFX" => "Conflux", "CORE" => "CORE", "CRC20" => "Crypto", "CSPR" => "Casper", "DGB" => "Digibyte", "DOGE" => "Dogecoin", "DOT" => "Polkadot", "EGLD" => "Elrond", "EOS" => "EOS", "ERC20" => "ERC20", "ETC" => "Ethereum Classic", "ETHW" => "EthereumPow", "FIL" => "Filecoin", "GLRM" => "Moonbeam", "HBAR" => "Hedera", "ICP" => "Dfinity", "ICX" => "ICON", "IOST" => "IOST", "IOTA" => "MIOTA", "KLAY" => "Klaytn", "KSM" => "Kusama", "LAT" => "PlatON", "LINEA" => "Linea", "LSK" => "Lisk", "LTC" => "Litecoin", "MATIC" => "Polygon", "METIS" => "Metis", "MINA" => "Mina", "MOVR" => "Moonriver", "NANO" => "Nano", "NEAR" => "NEAR", "NULS" => "NULS", "OASYS" => "OASYS", "ONE" => "Harmony", "ONT" => "Ontology", "OPTIMISM" => "Optimism", "RVN" => "Ravencoin", "SC" => "Siacoin", "SCROLL" => "Scroll", "SOL" => "Solana", "STX" => "l-Stacks", "SUI" => "SUI", "THETA" => "Theta", "TON" => "TON", "TRC20" => "TRC20", "WAX" => "Wax", "XCH" => "Chia", "XLM" => "Stellar Lumens", "XRP" => "Ripple", "XTZ" => "Tezos", "ZIL" => "Zilliqa", "ZKSYNCERA" => "zkSync Era" }, sandbox_mode: false, time_difference: 0, withdraw: %{} }, order_mappings: %{ side_format: :lowercase, side_key: "side", type_format: :lowercase, type_key: "ordType" }, param_mappings: %{ "amount" => "amt", "arg0" => "wdId", "code" => "ccy", "id" => "transId", "leverage" => "lever", "limit" => "sz", "price" => "newPx", "stopLossPrice" => "slTriggerPx", "symbol" => "instId", "takeProfitPrice" => "tpTriggerPx", "timeframe" => "period", "toCode" => "quoteCcy", "triggerPrice" => "triggerPx" }, parse_methods: [], path_prefix: "/api/v5/", pro: true, quote_json_numbers: nil, rate_limits: %{ interval_ms: 110, period: 1000, requests: 9, rolling_window_size: 60000 }, raw_endpoints: %{ private: [ %{ auth: false, cost: 4, method: :get, path: "/account/adjust-leverage-info" }, %{ auth: false, cost: 4, method: :get, path: "/rfq/mmp-config" }, %{ auth: false, cost: 20, method: :get, path: "/trade/one-click-repay-currency-list" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/staking-defi/sol/product-info" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/ai-param" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/max-collateral-redeem-amount" }, %{ auth: false, cost: 2, method: :get, path: "/finance/sfp/dcd/orders" }, %{ auth: false, cost: 1, method: :get, path: "/account/max-avail-size" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/positions" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/loan-history" }, %{ auth: false, cost: 4, method: :get, path: "/account/vip-interest-accrued" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/borrow-currencies" }, %{ auth: false, cost: 10, method: :get, path: "/users/subaccount/list" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/savings/balance" }, %{ auth: false, cost: 4, method: :get, path: "/account/vip-loan-order-list" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/deposit-history" }, %{ auth: false, cost: 2, method: :get, path: "/asset/monthly-statement" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/total-profit-sharing" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/subaccount/bills" }, %{ auth: false, cost: 2, method: :get, path: "/account/risk-state" }, %{ auth: false, cost: 1, method: :get, path: "/trade/orders-history-archive" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/interest-accrued" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/orders-history-archive" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/orders-algo-pending" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/bills" }, %{ auth: false, cost: 10, method: :get, path: "/account/move-positions-history" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/staking-defi/offers" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/positions" }, %{ auth: false, cost: 1, method: :get, path: "/account/subaccount/max-withdrawal" }, %{ auth: false, cost: 4, method: :get, path: "/account/borrow-repay-history" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/orders-algo-pending" }, %{ auth: false, cost: 2, method: :get, path: "/account/account-position-risk" }, %{ auth: false, cost: 0.3333333333333333, method: :get, path: "/trade/fills" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/orders-algo-history" }, %{ auth: false, cost: 20, method: :get, path: "/account/precheck-set-delta-neutral" }, %{ auth: false, cost: 1, method: :get, path: "/affiliate/invitee/detail" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/eth/balance" }, %{ auth: false, cost: 0.3333333333333333, method: :get, path: "/trade/orders-pending" }, %{ auth: false, cost: 10, method: :get, path: "/rfq/quotes" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/sol/purchase-redeem-history" }, %{ auth: false, cost: 4, method: :get, path: "/account/vip-interest-deducted" }, %{ auth: false, cost: 20, method: :get, path: "/trade/one-click-repay-history-v2" }, %{ auth: false, cost: 2, method: :get, path: "/trade/fills-history" }, %{ auth: false, cost: 4, method: :get, path: "/account/interest-accrued" }, %{ auth: false, cost: 10, method: :get, path: "/broker/nd/subaccount-info" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/recurring/sub-orders" }, %{ auth: false, cost: 10, method: :get, path: "/rfq/rfqs" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/instruments" }, %{ auth: false, cost: 20, method: :get, path: "/trade/easy-convert-history" }, %{ auth: false, cost: 4, method: :get, path: "/account/subaccount/interest-limits" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/convert/currencies" }, %{ auth: false, cost: 10, method: :get, path: "/broker/dma/subaccount-trade-fee" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/sol/balance" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/unrealized-profit-sharing-details" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/signals" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/account/subaccount/balances" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/sub-orders" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/recurring/orders-algo-details" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/savings/lending-history" }, %{ auth: false, cost: 10, method: :get, path: "/broker/dma/subaccount/apikey" }, %{ auth: false, cost: 1, method: :get, path: "/asset/transfer-state" }, %{ auth: false, cost: 2, method: :get, path: "/account/bills-history-archive" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/currencies" }, %{ auth: false, cost: 4, method: :get, path: "/account/set-account-switch-precheck" }, %{ auth: false, cost: 20, method: :get, path: "/trade/easy-convert-currency-list" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/convert/currency-pair" }, %{ auth: false, cost: 1, method: :get, path: "/trade/order-algo" }, %{ auth: false, cost: 4, method: :get, path: "/account/trade-fee" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/sub-orders" }, %{ auth: false, cost: 0.5, method: :get, path: "/trade/orders-history" }, %{ auth: false, cost: 10, method: :get, path: "/asset/asset-valuation" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/eth/purchase-redeem-history" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/deposit-address" }, %{ auth: false, cost: 4, method: :get, path: "/account/bills-archive" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/staking-defi/orders-active" }, %{ auth: false, cost: 4, method: :get, path: "/rfq/public-trades" }, %{ auth: false, cost: 20, method: :get, path: "/asset/deposit-withdraw-status" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/balances" }, %{ auth: false, cost: 10, method: :get, path: "/broker/nd/info" }, %{ auth: false, cost: 4, method: :get, path: "/asset/broker/nd/subaccount-deposit-history" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/orders-algo-details" }, %{ auth: false, cost: 2, method: :get, path: "/finance/sfp/dcd/order" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/broker/nd/subaccount-deposit-address" }, %{ auth: false, cost: 4, method: :get, path: "/account/config" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/trades" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/recurring/orders-algo-pending" }, %{ auth: false, cost: 4, method: :get, path: "/rfq/counterparties" }, %{ auth: false, cost: 2, method: :get, path: "/sprd/orders-pending" }, %{ auth: false, cost: 4, method: :get, path: "/account/collateral-assets" }, %{ auth: false, cost: 30, method: :get, path: "/account/spot-manual-borrow-repay" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/collateral-assets" }, %{ auth: false, cost: 2, method: :get, path: "/broker/dma/subaccount-info" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/current-lead-traders" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/lead-traders-history" }, %{ auth: false, cost: 1, method: :get, path: "/account/instruments" }, %{ auth: false, cost: 2, method: :get, path: "/account/positions-history" }, %{ auth: false, cost: 0.3333333333333333, method: :get, path: "/trade/order" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/withdrawal-history" }, %{ auth: false, cost: 20, method: :get, path: "/trade/one-click-repay-currency-list-v2" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/orders-algo-history" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/orders-algo-details" }, %{ auth: false, cost: 100, method: :get, path: "/broker/nd/rebate-daily" }, %{ auth: false, cost: 2, method: :get, path: "/trade/fills-archive" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/total-unrealized-profit-sharing" }, %{ auth: false, cost: 2, method: :get, path: "/account/position-tiers" }, %{ auth: false, cost: 1, method: :get, path: "/account/max-withdrawal" }, %{ auth: false, cost: 4, method: :get, path: "/rfq/trades" }, %{ auth: false, cost: 1, method: :get, path: "/account/max-size" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/subaccount/managed-subaccount-bills" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/staking-defi/orders-history" }, %{ auth: false, cost: 4, method: :get, path: "/rfq/maker-instrument-settings" }, %{ auth: false, cost: 10, method: :get, path: "/asset/bills-history" }, %{ auth: false, cost: 1, method: :get, path: "/copytrading/current-subpositions" }, %{ auth: false, cost: 10, method: :get, path: "/users/subaccount/apikey" }, %{ auth: false, cost: 300, method: :get, path: "/broker/dma/rebate-per-orders" }, %{ auth: false, cost: 4, method: :get, path: "/asset/broker/nd/subaccount-withdrawal-history" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/copy-settings" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/recurring/orders-algo-history" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/staking-defi/eth/product-info" }, %{ auth: false, cost: 2, method: :get, path: "/account/bills" }, %{ auth: false, cost: 1, method: :get, path: "/trade/orders-algo-pending" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/profit-sharing-details" }, %{ auth: false, cost: 4, method: :get, path: "/account/spot-borrow-repay-history" }, %{ auth: false, cost: 1, method: :get, path: "/trade/account-rate-limit" }, %{ auth: false, cost: 4, method: :get, path: "/account/quick-margin-borrow-repay-history" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/orders-history" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/convert/history" }, %{ auth: false, cost: 1, method: :get, path: "/users/partner/if-rebate" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/config" }, %{ auth: false, cost: 5, method: :get, path: "/asset/deposit-lightning" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/non-tradable-assets" }, %{ auth: false, cost: 300, method: :get, path: "/broker/fd/rebate-per-orders" }, %{ auth: false, cost: 4, method: :get, path: "/account/vip-loan-order-detail" }, %{ auth: false, cost: 4, method: :get, path: "/account/interest-limits" }, %{ auth: false, cost: 10, method: :get, path: "/broker/nd/subaccount/apikey" }, %{ auth: false, cost: 1, method: :get, path: "/trade/orders-algo-history" }, %{ auth: false, cost: 2, method: :get, path: "/tradingBot/signal/positions-history" }, %{ auth: false, cost: 4, method: :get, path: "/account/set-auto-repay" }, %{ auth: false, cost: 4, method: :get, path: "/finance/flexible-loan/loan-info" }, %{ auth: false, cost: 1, method: :get, path: "/account/leverage-info" }, %{ auth: false, cost: 2, method: :get, path: "/account/positions" }, %{ auth: false, cost: 20, method: :get, path: "/trade/one-click-repay-history" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/order" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/asset/subaccount/balances" }, %{ auth: false, cost: 2, method: :get, path: "/account/balance" }, %{ auth: false, cost: 1, method: :get, path: "/account/max-loan" }, %{ auth: false, cost: 2, method: :get, path: "/account/greeks" }, %{ auth: false, cost: 10, method: :get, path: "/users/entrust-subaccount-list" }, %{ auth: false, cost: 4, method: :get, path: "/account/fixed-loan/borrowing-limit" }, %{ auth: false, cost: 4, method: :get, path: "/account/mmp-config" }, %{ auth: false, cost: 4, method: :get, path: "/account/interest-rate" }, %{ auth: false, cost: 300, method: :get, path: "/broker/nd/rebate-per-orders" }, %{ auth: false, cost: 4, method: :get, path: "/support/announcements" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/signal/event-history" }, %{ auth: false, cost: 5, method: :get, path: "/account/fixed-loan/borrowing-orders-list" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/batch-leverage-info" }, %{ auth: false, cost: 5, method: :get, path: "/account/fixed-loan/borrowing-quote" }, %{ auth: false, cost: 1, method: :get, path: "/copytrading/subpositions-history" }, %{ auth: false, cost: 5, method: :get, path: "/broker/fd/if-rebate" }, %{ auth: false, cost: 100, method: :post, path: "/rfq/mmp-config" }, %{ auth: false, cost: 20, method: :post, path: "/trade/one-click-repay" }, %{ auth: false, cost: 20, method: :post, path: "/trade/easy-convert" }, %{ auth: false, cost: 0.25, method: :post, path: "/broker/nd/set-subaccount-assets" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/account/borrow-repay" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-greeks" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/asset/broker/nd/modify-subaccount-deposit-address" }, %{ auth: false, cost: 4, method: :post, path: "/rfq/cancel-rfq" }, %{ auth: false, cost: 4, method: :post, path: "/account/activate-option" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/recurring/stop-order-algo" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/recurring/amend-order-algo" }, %{ auth: false, cost: 1, method: :post, path: "/broker/nd/subaccount/delete-apikey" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/recurring/order-algo" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/modify-apikey" }, %{ auth: false, cost: 10, method: :post, path: "/asset/convert-dust-assets" }, %{ auth: false, cost: 1296000, method: :post, path: "/asset/monthly-statement" }, %{ auth: false, cost: 5, method: :post, path: "/account/fixed-loan/repay-borrowing-order" }, %{ auth: false, cost: 10, method: :post, path: "/account/position-builder" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/amend-order-algo" }, %{ auth: false, cost: 4, method: :post, path: "/rfq/create-rfq" }, %{ auth: false, cost: 1, method: :post, path: "/sprd/mass-cancel" }, %{ auth: false, cost: 50, method: :post, path: "/account/position-builder-graph" }, %{ auth: false, cost: 10, method: :post, path: "/finance/sfp/dcd/quote" }, %{ auth: false, cost: 15, method: :post, path: "/rfq/execute-quote" }, %{ auth: false, cost: 1, method: :post, path: "/copytrading/close-subposition" }, %{ auth: false, cost: 10, method: :post, path: "/rfq/cancel-batch-quotes" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/margin-balance" }, %{ auth: false, cost: 4, method: :post, path: "/account/account-level-switch-preset" }, %{ auth: false, cost: 1, method: :post, path: "/sprd/cancel-order" }, %{ auth: false, cost: 1, method: :post, path: "/trade/amend-algos" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-auto-loan" }, %{ auth: false, cost: 2, method: :post, path: "/account/set-riskOffset-type" }, %{ auth: false, cost: 1, method: :post, path: "/account/position/margin-balance" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/sol/purchase" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/amend-algo-basic-param" }, %{ auth: false, cost: 10, method: :post, path: "/account/move-positions" }, %{ auth: false, cost: 4, method: :post, path: "/finance/flexible-loan/max-loan" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/amendTPSL" }, %{ auth: false, cost: 0.3333333333333333, method: :post, path: "/trade/amend-order" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/set-instruments" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/order-algo" }, %{ auth: false, cost: 10, method: :post, path: "/rfq/cancel-all-after" }, %{ auth: false, cost: 10, method: :post, path: "/asset/subaccount/transfer" }, %{ auth: false, cost: 50, method: :post, path: "/asset/convert/estimate-quote" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/margin-balance" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-collateral-assets" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/close-position" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/order-instant-trigger" }, %{ auth: false, cost: 1, method: :post, path: "/broker/nd/delete-subaccount" }, %{ auth: false, cost: 0.25, method: :post, path: "/broker/dma/subaccount/apikey" }, %{ auth: false, cost: 72000, method: :post, path: "/account/bills-history-archive" }, %{ auth: false, cost: 10, method: :post, path: "/rfq/cancel-all-quotes" }, %{ auth: false, cost: 4, method: :post, path: "/account/subaccount/set-loan-allocation" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/sol/cancel-redeem" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/stop-copy-trading" }, %{ auth: false, cost: 1, method: :post, path: "/account/set-settle-currency" }, %{ auth: false, cost: 1, method: :post, path: "/account/set-leverage" }, %{ auth: false, cost: 1, method: :post, path: "/broker/nd/subaccount/modify-apikey" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/min-investment" }, %{ auth: false, cost: 1, method: :post, path: "/trade/order-algo" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/adjust-investment" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/finance/savings/purchase-redempt" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/withdraw-income" }, %{ auth: false, cost: 10, method: :post, path: "/sprd/cancel-all-after" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/asset/withdrawal" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/cancel-close-order" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/cancel" }, %{ auth: false, cost: 10, method: :post, path: "/trade/cancel-all-after" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/amend-copy-settings" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/delete-apikey" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/sol/redeem" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/first-copy-settings" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/sub-order" }, %{ auth: false, cost: 5, method: :post, path: "/account/fixed-loan/borrowing-order" }, %{ auth: false, cost: 20, method: :post, path: "/account/set-trading-config" }, %{ auth: false, cost: 1, method: :post, path: "/trade/cancel-algos" }, %{ auth: false, cost: 10, method: :post, path: "/finance/sfp/dcd/order" }, %{ auth: false, cost: 1, method: :post, path: "/asset/broker/nd/subaccount-deposit-address" }, %{ auth: false, cost: 4, method: :post, path: "/rfq/mmp-reset" }, %{ auth: false, cost: 4, method: :post, path: "/account/mmp-reset" }, %{ auth: false, cost: 5, method: :post, path: "/asset/withdrawal-lightning" }, %{ auth: false, cost: 10, method: :post, path: "/rfq/cancel-all-rfqs" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/create-signal" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/eth/redeem" }, %{ auth: false, cost: 30, method: :post, path: "/account/spot-manual-borrow-repay" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/set-transfer-out" }, %{ auth: false, cost: 5, method: :post, path: "/asset/transfer" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/eth/cancel-redeem" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-account-level" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-isolated-mode" }, %{ auth: false, cost: 10, method: :post, path: "/account/set-auto-earn" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/compute-margin-balance" }, %{ auth: false, cost: 0.3333333333333333, method: :post, path: "/trade/order" }, %{ auth: false, cost: 20, method: :post, path: "/trade/one-click-repay-v2" }, %{ auth: false, cost: 172800, method: :post, path: "/trade/fills-archive" }, %{ auth: false, cost: 1, method: :post, path: "/copytrading/algo-order" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/stop-order-algo" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/purchase" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/batch-set-leverage" }, %{ auth: false, cost: 0.25, method: :post, path: "/broker/nd/report-subaccount-ip" }, %{ auth: false, cost: 4, method: :post, path: "/rfq/maker-instrument-settings" }, %{ auth: false, cost: 1, method: :post, path: "/trade/cancel-advance-algos" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/apikey" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/close-position" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/cancel-sub-order" }, %{ auth: false, cost: 5, method: :post, path: "/account/fixed-loan/manual-reborrow" }, %{ auth: false, cost: 4, method: :post, path: "/trade/order-precheck" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-position-mode" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/create-subaccount" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-fee-type" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/eth/purchase" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/set-instruments" }, %{ auth: false, cost: 0.4, method: :post, path: "/rfq/create-quote" }, %{ auth: false, cost: 36000, method: :post, path: "/broker/fd/rebate-per-orders" }, %{ auth: false, cost: 0.25, method: :post, path: "/broker/nd/subaccount/apikey" }, %{ auth: false, cost: 4, method: :post, path: "/account/set-auto-repay" }, %{ auth: false, cost: 1, method: :post, path: "/sprd/amend-order" }, %{ auth: false, cost: 1, method: :post, path: "/asset/convert/trade" }, %{ auth: false, cost: 36000, method: :post, path: "/broker/dma/trades" }, %{ auth: false, cost: 10, method: :post, path: "/users/subaccount/subaccount-apikey" }, %{ auth: false, cost: 10, method: :post, path: "/account/simulated_margin" }, %{ auth: false, cost: 5, method: :post, path: "/account/fixed-loan/amend-borrowing-order" }, %{ auth: false, cost: 0.06666666666666667, method: :post, path: "/trade/batch-orders" }, %{ auth: false, cost: 0.006666666666666667, method: :post, path: "/trade/amend-batch-orders" }, %{ auth: false, cost: 1, method: :post, path: "/sprd/order" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/order-algo" }, %{ auth: false, cost: 4, method: :post, path: "/broker/nd/set-subaccount-level" }, %{ auth: false, cost: 0.3333333333333333, method: :post, path: "/trade/cancel-order" }, %{ auth: false, cost: 1, method: :post, path: "/trade/close-position" }, %{ auth: false, cost: 4, method: :post, path: "/copytrading/amend-profit-sharing-ratio" }, %{ auth: false, cost: 50, method: :post, path: "/account/mmp-config" }, %{ auth: false, cost: 4, method: :post, path: "/finance/flexible-loan/adjust-collateral" }, %{ auth: false, cost: 36000, method: :post, path: "/broker/nd/rebate-per-orders" }, %{ auth: false, cost: 5, method: :post, path: "/finance/staking-defi/redeem" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/signal/stop-order-algo" }, %{ auth: false, cost: 10, method: :post, path: "/rfq/cancel-batch-rfqs" }, %{ auth: false, cost: 0.4, method: :post, path: "/rfq/cancel-quote" }, %{ auth: false, cost: 0.06666666666666667, method: :post, path: "/trade/cancel-batch-orders" }, %{ auth: false, cost: 0.25, method: :post, path: "/broker/nd/create-subaccount" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/finance/savings/set-lending-rate" }, %{ auth: false, cost: 1.6666666666666667, method: :post, path: "/asset/cancel-withdrawal" }, %{ auth: false, cost: 4, method: :post, path: "/trade/mass-cancel" }, %{ auth: false, cost: 4, method: :post, path: "/account/quick-margin-borrow-repay" }, %{ auth: false, cost: 4, method: :post, path: "/broker/nd/set-subaccount-fee-rate" } ], public: [ %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/ai-param" }, %{ auth: false, cost: 1, method: :get, path: "/market/option/instrument-family-trades" }, %{ auth: false, cost: 2, method: :get, path: "/public/insurance-fund" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/savings/lending-rate-summary" }, %{ auth: false, cost: 1, method: :get, path: "/public/premium-history" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/contracts/long-short-account-ratio-contract-top-trader" }, %{ auth: false, cost: 1, method: :get, path: "/public/price-limit" }, %{ auth: false, cost: 2, method: :get, path: "/public/estimated-settlement-info" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/sol/apy-history" }, %{ auth: false, cost: 10, method: :get, path: "/market/platform-24-volume" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-copy-traders" }, %{ auth: false, cost: 0.5, method: :get, path: "/public/settlement-history" }, %{ auth: false, cost: 2, method: :get, path: "/public/position-tiers" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-weekly-pnl" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/trading-data/support-coin" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/books" }, %{ auth: false, cost: 1, method: :get, path: "/public/opt-summary" }, %{ auth: false, cost: 1, method: :get, path: "/public/open-interest" }, %{ auth: false, cost: 4, method: :get, path: "/tradingBot/grid/grid-quantity" }, %{ auth: false, cost: 1, method: :get, path: "/public/block-trades" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/taker-volume-contract" }, %{ auth: false, cost: 50, method: :get, path: "/public/economic-calendar" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/public-trades" }, %{ auth: false, cost: 0.6666666666666666, method: :get, path: "/finance/sfp/dcd/products" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-subpositions-history" }, %{ auth: false, cost: 1, method: :get, path: "/market/index-candles" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-lead-traders" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/fixed-loan/pending-lending-volume" }, %{ auth: false, cost: 10, method: :get, path: "/market/books-sbe" }, %{ auth: false, cost: 0.5, method: :get, path: "/market/books" }, %{ auth: false, cost: 1, method: :get, path: "/market/block-tickers" }, %{ auth: false, cost: 2, method: :get, path: "/public/estimated-price" }, %{ auth: false, cost: 2, method: :get, path: "/market/history-trades" }, %{ auth: false, cost: 0.2, method: :get, path: "/market/trades" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-preference-currency" }, %{ auth: false, cost: 20, method: :get, path: "/market/exchange-rate" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/option/open-interest-volume-ratio" }, %{ auth: false, cost: 1, method: :get, path: "/public/underlying" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/contracts/open-interest-volume" }, %{ auth: false, cost: 2, method: :get, path: "/public/funding-rate-history" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/option/taker-block-volume" }, %{ auth: false, cost: 0.5, method: :get, path: "/public/delivery-exercise-history" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/grid/min-investment" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/contracts/long-short-account-ratio-contract" }, %{ auth: false, cost: 1, method: :get, path: "/tradingBot/public/rsi-back-testing" }, %{ auth: false, cost: 1, method: :get, path: "/market/index-components" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/taker-volume" }, %{ auth: false, cost: 2, method: :get, path: "/public/time" }, %{ auth: false, cost: 1, method: :get, path: "/market/block-ticker" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-config" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/fixed-loan/lending-offers" }, %{ auth: false, cost: 1, method: :get, path: "/market/history-candles" }, %{ auth: false, cost: 0.5, method: :get, path: "/market/candles" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-pnl" }, %{ auth: false, cost: 2, method: :get, path: "/public/funding-rate" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/margin/loan-ratio" }, %{ auth: false, cost: 20, method: :get, path: "/support/announcements-types" }, %{ auth: false, cost: 0.5, method: :get, path: "/market/sprd-candles" }, %{ auth: false, cost: 1, method: :get, path: "/market/mark-price-candles" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-stats" }, %{ auth: false, cost: 10, method: :get, path: "/public/vip-interest-rate-loan-quota" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/ticker" }, %{ auth: false, cost: 3.3333333333333335, method: :get, path: "/finance/fixed-loan/lending-apy-history" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/staking-defi/eth/apy-history" }, %{ auth: false, cost: 10, method: :get, path: "/public/discount-rate-interest-free-quota" }, %{ auth: false, cost: 2, method: :get, path: "/public/convert-contract-coin" }, %{ auth: false, cost: 2, method: :get, path: "/rubik/stat/contracts/open-interest-history" }, %{ auth: false, cost: 50, method: :get, path: "/market/open-oracle" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/option/open-interest-volume-expiry" }, %{ auth: false, cost: 1, method: :get, path: "/public/option-trades" }, %{ auth: false, cost: 1, method: :get, path: "/market/history-mark-price-candles" }, %{ auth: false, cost: 50, method: :get, path: "/system/status" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/contracts/long-short-account-ratio" }, %{ auth: false, cost: 2, method: :get, path: "/market/history-index-candles" }, %{ auth: false, cost: 2, method: :get, path: "/public/mark-price" }, %{ auth: false, cost: 4, method: :get, path: "/public/instrument-tick-bands" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/option/open-interest-volume" }, %{ auth: false, cost: 1, method: :get, path: "/market/sprd-ticker" }, %{ auth: false, cost: 1, method: :get, path: "/market/sprd-history-candles" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/market/books-lite" }, %{ auth: false, cost: 1, method: :get, path: "/market/tickers" }, %{ auth: false, cost: 1, method: :get, path: "/market/index-tickers" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/asset/exchange-list" }, %{ auth: false, cost: 1, method: :get, path: "/sprd/spreads" }, %{ auth: false, cost: 1, method: :get, path: "/market/call-auction-detail" }, %{ auth: false, cost: 4, method: :get, path: "/rubik/stat/option/open-interest-volume-strike" }, %{ auth: false, cost: 1.6666666666666667, method: :get, path: "/finance/savings/lending-rate-history" }, %{ auth: false, cost: 10, method: :get, path: "/public/interest-rate-loan-quota" }, %{ auth: false, cost: 4, method: :get, path: "/copytrading/public-current-subpositions" }, %{ auth: false, cost: 1, method: :get, path: "/market/ticker" }, %{ auth: false, cost: 4, method: :get, path: "/support/announcements" }, %{ auth: false, cost: 4, method: :get, path: "/public/market-data-history" }, %{ auth: false, cost: 2, method: :get, path: "/market/books-full" }, %{ auth: false, cost: 1, method: :get, path: "/public/instruments" }, %{ auth: false, cost: 1, method: :post, path: "/tradingBot/grid/min-investment" } ] }, required_credentials: %{ api_key: true, password: true, secret: true, uid: false }, requires_eddsa: false, response_error: %{ code_field: "code", field: "code", message_field: "msg", success_values: [ "0" ], type: :success_code }, signing: %{ api_key_header: "OK-ACCESS-KEY", confidence: :high, has_passphrase: true, passphrase_header: "OK-ACCESS-PASSPHRASE", pattern: :hmac_sha256_iso_passphrase, signature_encoding: :base64, signature_header: "OK-ACCESS-SIGN", timestamp_format: :iso8601, timestamp_header: "OK-ACCESS-TIMESTAMP" }, spec_format_version: 1, status: %{ "eta" => nil, "status" => "ok", "updated" => nil, "url" => nil }, symbol_format: nil, symbol_formats: %{ future: %{ base: "BTC", base_id: "BTC", case: :upper, contract: true, contract_size: 100, expiry: 1772179200000, expiry_datetime: "2026-02-27T08:00:00.000Z", id: "BTC-USD-260227", inverse: true, limits: %{ "amount" => %{ "min" => 0.1 }, "cost" => %{}, "leverage" => %{ "max" => 20, "min" => 1 }, "price" => %{} }, linear: false, maker: 0.0002, precision: %{ "amount" => 0.1, "price" => 0.1 }, quote: "USD", quote_id: "USD", separator: "-", settle: "BTC", settle_id: "BTC", symbol: "BTC/USD:BTC-260227", taker: 0.0005 }, option: %{ base: "BTC", base_id: "BTC", case: :upper, contract: true, contract_size: 1, expiry: 1771660800000, expiry_datetime: "2026-02-21T08:00:00.000Z", id: "BTC-USD-260221-58000-C", inverse: true, limits: %{ "amount" => %{ "min" => 1 }, "cost" => %{}, "leverage" => %{ "max" => 1, "min" => 1 }, "price" => %{} }, linear: false, maker: 0.001, precision: %{ "amount" => 1, "price" => 0.0001 }, quote: "USD", quote_id: "USD", separator: "-", settle: "BTC", settle_id: "BTC", symbol: "BTC/USD:BTC-260221-58000-C", taker: 0.0015 }, precision_mode: 4, sample_limits: %{ "amount" => %{ "min" => 1 }, "cost" => %{ "max" => 1000000 }, "price" => %{} }, sample_precision: %{ "amount" => 0.001, "price" => 0.0001 }, spot: %{ base: "USDT", base_id: "USDT", case: :upper, contract: false, id: "USDT-SGD", limits: %{ "amount" => %{ "min" => 1 }, "cost" => %{ "max" => 1000000 }, "leverage" => %{ "max" => 1, "min" => 1 }, "price" => %{} }, maker: 0.001, precision: %{ "amount" => 0.001, "price" => 0.0001 }, quote: "SGD", quote_id: "SGD", separator: "-", symbol: "USDT/SGD", taker: 0.0015 }, swap: %{ base: "BTC", base_id: "BTC", case: :upper, contract: true, contract_size: 100, id: "BTC-USD-SWAP", inverse: true, limits: %{ "amount" => %{ "min" => 0.1 }, "cost" => %{}, "leverage" => %{ "max" => 100, "min" => 1 }, "price" => %{} }, linear: false, maker: 0.0002, precision: %{ "amount" => 0.1, "price" => 0.1 }, quote: "USD", quote_id: "USD", separator: "-", settle: "BTC", settle_id: "BTC", symbol: "BTC/USD:BTC", taker: 0.0005 } }, symbol_patterns: %{ future: %{ case: :upper, component_order: [ :base, :quote, :date ], date_format: :yymmdd, pattern: :future_yymmdd, separator: "-", suffix: nil }, option: %{ case: :upper, component_order: [ :base, :date, :strike, :type ], date_format: :yymmdd, pattern: :option_yymmdd, separator: "-", suffix: nil }, spot: %{ case: :upper, component_order: nil, date_format: nil, pattern: :dash_upper, separator: "-", suffix: nil }, swap: %{ case: :upper, component_order: nil, date_format: nil, pattern: :suffix_swap, separator: "-", suffix: "-SWAP" } }, timeframes: %{ "12h" => "12H", "15m" => "15m", "1M" => "1M", "1d" => "1D", "1h" => "1H", "1m" => "1m", "1w" => "1W", "2h" => "2H", "30m" => "30m", "3M" => "3M", "3m" => "3m", "4h" => "4H", "5m" => "5m", "6h" => "6H" }, url_strategy: %{ detected_from: "sign_method", pattern: :api_version_slash, prefix: "/api/v5/" }, urls: %{ api: "https://us.okx.com", api_sections: %{ "rest" => "https://us.okx.com" }, doc: "https://app.okx.com/docs-v5/en/#overview", other: nil, sandbox: %{ "rest" => "https://us.okx.com" }, www: "https://app.okx.com" }, version: "v5", ws: %{ has: %{ watch_balance: true, watch_bids_asks: true, watch_funding_rate: true, watch_funding_rates: true, watch_liquidations: "emulated", watch_liquidations_for_symbols: true, watch_mark_price: true, watch_mark_prices: true, watch_my_liquidations: "emulated", watch_my_liquidations_for_symbols: true, watch_my_trades: true, watch_ohlcv: true, watch_ohlcv_for_symbols: true, watch_order_book: true, watch_order_book_for_symbols: true, watch_orders: true, watch_orders_for_symbols: nil, watch_position: nil, watch_positions: true, watch_status: nil, watch_ticker: true, watch_tickers: true, watch_trades: true, watch_trades_for_symbols: true }, hostname: "us.okx.com", message_patterns: [ %{ args_field: "args", format: :op, keys: [ "args", "op" ], kind_field: "op", kind_value: "login", sources: [ :send, :watch ] }, %{ args_field: "args", format: :op, keys: [ "args", "op" ], kind_field: "op", kind_value: "subscribe", sources: [ :send, :watch, :watch_multiple ] }, %{ format: :string, sources: [ :ping ] } ], options: %{ "createOrderWs" => %{ "op" => "batch-orders" }, "editOrderWs" => %{ "op" => "amend-order" }, "watchBalance" => "spot", "watchMyTrades" => %{ "type" => "ANY" }, "watchOrderBook" => %{ "checksum" => true, "depth" => "books" }, "watchOrders" => %{ "type" => "ANY" }, "watchTicker" => %{ "channel" => "tickers" }, "watchTickers" => %{ "channel" => "tickers" }, "ws" => %{} }, streaming: %{ keep_alive: 18000 }, subscription_pattern: :custom, test_urls: %{ "business" => "wss://wsuspap.okx.com:8443/ws/v5/business", "private" => "wss://wsuspap.okx.com:8443/ws/v5/private", "public" => "wss://wsuspap.okx.com:8443/ws/v5/public" }, urls: %{ "business" => "wss://wsus.okx.com:8443/ws/v5/business", "private" => "wss://wsus.okx.com:8443/ws/v5/private", "public" => "wss://wsus.okx.com:8443/ws/v5/public" } } }