# ARKHAM Exchange Specification # # Auto-generated by: mix ccxt.extract arkham # 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: [ "US" ], currencies: %{}, currency_aliases: %{ "BCHSV" => "BSV", "XBT" => "BTC" }, dex: false, enable_rate_limit: true, endpoint_extraction_stats: %{ "capturedMethods" => 27, "coveragePercent" => 100, "enabledMethods" => 32, "excluded" => [ %{ "method" => "fetchWithdrawals", "reason" => "arkham fetchWithdrawals() is not supported yet" }, %{ "method" => "editOrder", "reason" => "emulated (returns cached data, no HTTP call)" } ], "excludedMethods" => 2, "extractableMethods" => 30, "failures" => [ %{ "error" => "arkham cancelAllOrders() does not support a symbol argument, use cancelOrder() or fetchOpenOrders() instead", "method" => "cancelAllOrders" }, %{ "error" => "arkham createDepositAddress() requires a \"network\" param", "method" => "createDepositAddress" }, %{ "error" => "arkham fetchDepositAddressesByNetwork() requires a \"network\" param", "method" => "fetchDepositAddressesByNetwork" } ] }, endpoints: [ %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :post, name: :cancel_order, param_mappings: %{ "id" => "orderId" }, params: [ :id, :symbol ], path: "/orders/cancel", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "type" => "limitGtc" }, market_type: :spot, method: :post, name: :create_limit_order, param_mappings: %{ "amount" => "size" }, params: [ :symbol, :side, :amount, :price ], path: "/orders/new", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "type" => "market" }, market_type: :spot, method: :post, name: :create_market_order, param_mappings: %{ "amount" => "size" }, params: [ :symbol, :side, :amount, :price ], path: "/orders/new", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "type" => "limitGtc" }, market_type: :spot, method: :post, name: :create_order, param_mappings: %{ "amount" => "size" }, params: [ :symbol, :type, :side, :amount, :price ], path: "/orders/new", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_accounts, param_mappings: %{}, params: [], path: "/user", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_balance, param_mappings: %{}, params: [], path: "/account/balances", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_closed_orders, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/orders/history", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_currencies, param_mappings: %{}, params: [], path: "/assets", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_deposits, param_mappings: %{}, params: [ :code, :since, :limit ], path: "/account/deposits", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :swap, method: :get, name: :fetch_funding_history, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/account/funding-rate-payments", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_l2_order_book, param_mappings: %{}, params: [ :symbol, :limit ], path: "/book", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "symbol" => "BTCUSDT" }, market_type: :swap, method: :get, name: :fetch_leverage, param_mappings: %{}, params: [ :symbol ], path: "/account/leverage", response_transformer: {:extract_path_unwrap, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :swap, method: :get, name: :fetch_leverage_tiers, param_mappings: %{}, params: [ :symbols ], path: "/margin-schedules", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_markets, param_mappings: %{}, params: [], path: "/pairs", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "to" => "" }, market_type: :spot, method: :get, name: :fetch_my_trades, param_mappings: %{ "since" => "from" }, params: [ :symbol, :since, :limit ], path: "/trades/time", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, default_params: %{ "end" => "" }, market_type: :spot, method: :get, name: :fetch_ohlcv, param_mappings: %{ "since" => "start", "timeframe" => "duration" }, params: [ :symbol, :timeframe, :since, :limit ], path: "/candles", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_open_orders, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/orders", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_order, param_mappings: %{}, params: [ :id, :symbol ], path: "/orders/{id}", response_transformer: {:extract_path_unwrap, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_order_book, param_mappings: %{}, params: [ :symbol, :limit ], path: "/book", response_transformer: {:extract_path_unwrap, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :swap, method: :get, name: :fetch_positions, param_mappings: %{}, params: [ :symbols ], path: "/account/positions", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_ticker, param_mappings: %{}, params: [ :symbol ], path: "/ticker", response_transformer: {:extract_path_unwrap, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_tickers, param_mappings: %{}, params: [ :symbols ], path: "/tickers", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_time, param_mappings: %{}, params: [], path: "/server-time", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/public", auth: false, cost: 1, market_type: :spot, method: :get, name: :fetch_trades, param_mappings: %{}, params: [ :symbol, :since, :limit ], path: "/trades", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :fetch_trading_fees, param_mappings: %{}, params: [], path: "/account/fees", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, default_params: %{ "symbol" => "BTCUSDT" }, market_type: :swap, method: :post, name: :set_leverage, param_mappings: %{}, params: [ :leverage, :symbol ], path: "/account/leverage", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted }, %{ api_section: "v1/private", auth: true, cost: 7.5, market_type: :spot, method: :get, name: :withdraw, param_mappings: %{}, params: [ :code, :amount, :address, :tag ], path: "/account/withdrawal/addresses", response_transformer: {:extract_path, ["subaccounts"]}, source: :intercepted } ], error_code_details: %{ 10000 => %{ description: nil, type: :exchange_error }, 10001 => %{ description: nil, type: :invalid_parameters }, 10002 => %{ description: nil, type: :invalid_credentials }, 10003 => %{ description: nil, type: :invalid_order }, 10004 => %{ description: nil, type: :invalid_parameters }, 10005 => %{ description: nil, type: :rate_limited }, 10006 => %{ description: nil, type: :access_restricted }, 10007 => %{ description: nil, type: :access_restricted }, 10008 => %{ description: nil, type: :rate_limited }, 10009 => %{ description: nil, type: :access_restricted }, 10010 => %{ description: nil, type: :access_restricted }, 10011 => %{ description: nil, type: :invalid_credentials }, 10012 => %{ description: nil, type: :access_restricted }, 10013 => %{ description: nil, type: :access_restricted }, 10014 => %{ description: nil, type: :invalid_credentials }, 10015 => %{ description: nil, type: :access_restricted }, 10016 => %{ description: nil, type: :access_restricted }, 10017 => %{ description: nil, type: :access_restricted }, 10018 => %{ description: nil, type: :invalid_credentials }, 10019 => %{ description: nil, type: :invalid_credentials }, 10020 => %{ description: nil, type: :access_restricted }, 10021 => %{ description: nil, type: :access_restricted }, 10022 => %{ description: nil, type: :exchange_error }, 10023 => %{ description: nil, type: :invalid_parameters }, 10024 => %{ description: nil, type: :exchange_error }, 10025 => %{ description: "#2XXXX General Websocket Errors", type: :invalid_parameters }, 20001 => %{ description: nil, type: :invalid_parameters }, 20002 => %{ description: nil, type: :invalid_parameters }, 20003 => %{ description: nil, type: :invalid_parameters }, 20004 => %{ description: nil, type: :invalid_parameters }, 20005 => %{ description: "#3XXXX Trading Errors", type: :invalid_parameters }, 30001 => %{ description: nil, type: :invalid_order }, 30002 => %{ description: nil, type: :invalid_order }, 30003 => %{ description: nil, type: :invalid_order }, 30004 => %{ description: nil, type: :invalid_order }, 30005 => %{ description: nil, type: :invalid_order }, 30006 => %{ description: nil, type: :invalid_order }, 30007 => %{ description: nil, type: :invalid_order }, 30008 => %{ description: nil, type: :exchange_error }, 30009 => %{ description: nil, type: :exchange_error }, 30010 => %{ description: nil, type: :insufficient_balance }, 30011 => %{ description: nil, type: :invalid_order }, 30012 => %{ description: nil, type: :exchange_error }, 30013 => %{ description: nil, type: :exchange_error }, 30014 => %{ description: nil, type: :invalid_order }, 30015 => %{ description: nil, type: :order_not_found }, 30016 => %{ description: nil, type: :invalid_order }, 30017 => %{ description: nil, type: :invalid_order }, 30018 => %{ description: nil, type: :invalid_order }, 30019 => %{ description: nil, type: :exchange_error }, 30020 => %{ description: nil, type: :invalid_order }, 30021 => %{ description: nil, type: :invalid_order }, 30022 => %{ description: nil, type: :invalid_order }, 30023 => %{ description: nil, type: :invalid_order }, 30024 => %{ description: nil, type: :invalid_order }, 30025 => %{ description: nil, type: :invalid_parameters }, 30026 => %{ description: nil, type: :access_restricted }, 30027 => %{ description: nil, type: :access_restricted }, 30028 => %{ description: "#4XXXX Funding Errors", type: :order_not_found }, 40001 => %{ description: nil, type: :exchange_error }, 40002 => %{ description: nil, type: :invalid_parameters }, 40003 => %{ description: nil, type: :invalid_parameters }, 40004 => %{ description: nil, type: :exchange_error }, 40005 => %{ description: nil, type: :invalid_parameters }, 40006 => %{ description: nil, type: :access_restricted }, 40007 => %{ description: nil, type: :exchange_error }, 40008 => %{ description: nil, type: :exchange_error }, 40009 => %{ description: nil, type: :exchange_error }, 40010 => %{ description: nil, type: :invalid_parameters }, 40011 => %{ description: nil, type: :exchange_error }, 40012 => %{ description: nil, type: :invalid_parameters }, 40013 => %{ description: "#9XXXX Other Errors", type: :invalid_parameters }, 90001 => %{ description: nil, type: :invalid_parameters }, 90002 => %{ description: nil, type: :invalid_parameters }, 90003 => %{ description: nil, type: :exchange_error }, 90004 => %{ description: nil, type: :invalid_parameters }, 90005 => %{ description: nil, type: :invalid_parameters }, 90006 => %{ description: nil, type: :rate_limited }, 90007 => %{ description: nil, type: :invalid_credentials }, 90008 => %{ description: nil, type: :rate_limited }, 90009 => %{ description: nil, type: :access_restricted }, 90010 => %{ description: nil, type: :invalid_parameters }, 90011 => %{ description: nil, type: :rate_limited }, "less than min withdrawal " => %{ description: "amount 1 less than min withdrawal 5", type: :exchange_error } }, error_codes: %{ 10000 => :exchange_error, 10001 => :invalid_parameters, 10002 => :invalid_credentials, 10003 => :invalid_order, 10004 => :invalid_parameters, 10005 => :rate_limited, 10006 => :access_restricted, 10007 => :access_restricted, 10008 => :rate_limited, 10009 => :access_restricted, 10010 => :access_restricted, 10011 => :invalid_credentials, 10012 => :access_restricted, 10013 => :access_restricted, 10014 => :invalid_credentials, 10015 => :access_restricted, 10016 => :access_restricted, 10017 => :access_restricted, 10018 => :invalid_credentials, 10019 => :invalid_credentials, 10020 => :access_restricted, 10021 => :access_restricted, 10022 => :exchange_error, 10023 => :invalid_parameters, 10024 => :exchange_error, 10025 => :invalid_parameters, 20001 => :invalid_parameters, 20002 => :invalid_parameters, 20003 => :invalid_parameters, 20004 => :invalid_parameters, 20005 => :invalid_parameters, 30001 => :invalid_order, 30002 => :invalid_order, 30003 => :invalid_order, 30004 => :invalid_order, 30005 => :invalid_order, 30006 => :invalid_order, 30007 => :invalid_order, 30008 => :exchange_error, 30009 => :exchange_error, 30010 => :insufficient_balance, 30011 => :invalid_order, 30012 => :exchange_error, 30013 => :exchange_error, 30014 => :invalid_order, 30015 => :order_not_found, 30016 => :invalid_order, 30017 => :invalid_order, 30018 => :invalid_order, 30019 => :exchange_error, 30020 => :invalid_order, 30021 => :invalid_order, 30022 => :invalid_order, 30023 => :invalid_order, 30024 => :invalid_order, 30025 => :invalid_parameters, 30026 => :access_restricted, 30027 => :access_restricted, 30028 => :order_not_found, 40001 => :exchange_error, 40002 => :invalid_parameters, 40003 => :invalid_parameters, 40004 => :exchange_error, 40005 => :invalid_parameters, 40006 => :access_restricted, 40007 => :exchange_error, 40008 => :exchange_error, 40009 => :exchange_error, 40010 => :invalid_parameters, 40011 => :exchange_error, 40012 => :invalid_parameters, 40013 => :invalid_parameters, 90001 => :invalid_parameters, 90002 => :invalid_parameters, 90003 => :exchange_error, 90004 => :invalid_parameters, 90005 => :invalid_parameters, 90006 => :rate_limited, 90007 => :invalid_credentials, 90008 => :rate_limited, 90009 => :access_restricted, 90010 => :invalid_parameters, 90011 => :rate_limited, "less than min withdrawal " => :exchange_error }, exceptions: %{ broad: %{ "less than min withdrawal " => :operation_rejected }, exact: %{ "10000" => :operation_failed, "10001" => :bad_request, "10002" => :authentication_error, "10003" => :bad_symbol, "10004" => :arguments_required, "10005" => :rate_limit_exceeded, "10006" => :permission_denied, "10007" => :permission_denied, "10008" => :rate_limit_exceeded, "10009" => :permission_denied, "10010" => :permission_denied, "10011" => :authentication_error, "10012" => :permission_denied, "10013" => :permission_denied, "10014" => :authentication_error, "10015" => :permission_denied, "10016" => :permission_denied, "10017" => :permission_denied, "10018" => :authentication_error, "10019" => :authentication_error, "10020" => :permission_denied, "10021" => :permission_denied, "10022" => :exchange_error, "10023" => :bad_request, "10024" => :exchange_error, "10025" => :bad_request, "20001" => :bad_request, "20002" => :arguments_required, "20003" => :bad_request, "20004" => :arguments_required, "20005" => :bad_request, "30001" => :invalid_order, "30002" => :invalid_order, "30003" => :invalid_order, "30004" => :invalid_order, "30005" => :invalid_order, "30006" => :invalid_order, "30007" => :bad_symbol, "30008" => :operation_rejected, "30009" => :operation_rejected, "30010" => :insufficient_funds, "30011" => :bad_symbol, "30012" => :operation_rejected, "30013" => :operation_rejected, "30014" => :invalid_order, "30015" => :order_not_found, "30016" => :invalid_order, "30017" => :invalid_order, "30018" => :invalid_order, "30019" => :operation_rejected, "30020" => :invalid_order, "30021" => :invalid_order, "30022" => :invalid_order, "30023" => :invalid_order, "30024" => :invalid_order, "30025" => :bad_request, "30026" => :permission_denied, "30027" => :permission_denied, "30028" => :order_not_found, "40001" => :operation_rejected, "40002" => :bad_request, "40003" => :invalid_address, "40004" => :operation_rejected, "40005" => :bad_request, "40006" => :permission_denied, "40007" => :operation_rejected, "40008" => :operation_rejected, "40009" => :operation_rejected, "40010" => :bad_request, "40011" => :operation_rejected, "40012" => :bad_request, "40013" => :bad_request, "90001" => :bad_request, "90002" => :bad_request, "90003" => :operation_rejected, "90004" => :bad_request, "90005" => :bad_request, "90006" => :rate_limit_exceeded, "90007" => :authentication_error, "90008" => :rate_limit_exceeded, "90009" => :permission_denied, "90010" => :bad_request, "90011" => :rate_limit_exceeded } }, exchange_options: %{ "defaultNetworkCodeReplacements" => %{ "BRC20" => %{ "BRC20" => "BTC" }, "CRO" => %{ "CRC20" => "CRONOS" }, "ETH" => %{ "ERC20" => "ETH" }, "TRX" => %{ "TRC20" => "TRX" } }, "networks" => %{ "ARBONE" => "ARB", "AVAXC" => "AVAX", "BTC" => "BTC", "DOGE" => "DOGE", "ERC20" => "ETH", "ETH" => "ETH", "OP" => "OP", "SOL" => "SOL", "SUI" => "SUI", "TON" => "TON", "XRP" => "XRP" }, "networksById" => %{ "ARB" => "ARBONE", "AVAX" => "AVAXC", "BTC" => "BTC", "DOGE" => "DOGE", "ERC20" => "ERC20", "ETH" => "ERC20", "OP" => "OP", "SOL" => "SOL", "SUI" => "SUI", "TON" => "TON", "XRP" => "XRP" }, "requestExpiration" => 5000, "timeframeDurations" => %{ "15m" => 900000000, "1d" => 86400000000, "1h" => 3600000000, "1m" => 60000000, "30m" => 1800000000, "5m" => 300000000, "6h" => 21600000000 } }, extended_metadata: %{ fees_url: "https://arkm.com/fees", limits: %{ "amount" => %{}, "cost" => %{}, "leverage" => %{}, "price" => %{} }, logo_url: "https://github.com/user-attachments/assets/5cefdcfb-2c10-445b-835c-fa21317bf5ac", referral_discount: 0, referral_url: "https://arkm.com/register?ref=ccxt" }, extracted_metadata: %{ ccxt_version: "4.5.34" }, features: %{ default: %{ create_order: %{ hedged: false, iceberg: false, leverage: false, margin_mode: false, market_buy_by_cost: false, market_buy_requires_price: false, self_trade_prevention: false, stop_loss_price: true, take_profit_price: true, time_in_force: %{ fok: true, gtd: false, ioc: true, po: true }, trailing: false, trigger_direction: true, trigger_price: true, trigger_price_type: %{ index: true, last: true, mark: true } }, fetch_closed_orders: %{ limit: 100, margin_mode: false, symbol_required: false, trailing: false, trigger: false }, fetch_my_trades: %{ limit: 100, margin_mode: false, symbol_required: false, until_days: 1 }, fetch_ohlcv: %{ limit: 365 }, fetch_open_orders: %{ margin_mode: true, symbol_required: false, trailing: false, trigger: false }, fetch_order: %{ margin_mode: false, symbol_required: false, trailing: false, trigger: false }, sandbox: false }, future: %{ linear: %{ extends: "default" } }, spot: %{ extends: "default" }, swap: %{ linear: %{ extends: "default" } } }, fees: nil, handle_content_type_application_zip: nil, handle_errors_source: "handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {\n //\n // error example:\n //\n // {\n // \"id\": \"30005\",\n // \"name\": \"InvalidNotional\",\n // \"message\": \"order validation failed: invalid notional: notional 0.25 is less than min notional 1\"\n // }\n //\n const message = this.safeString(response, 'message');\n if (message !== undefined) {\n const errorCode = this.safeString(response, 'id');\n const feedback = this.id + ' ' + body;\n this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);\n this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);\n this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);\n throw new errors.ExchangeError(this.id + ' ' + body);\n }\n return undefined;\n }", has: %{ add_margin: false, borrow_cross_margin: false, borrow_isolated_margin: false, borrow_margin: false, c_o_r_s: false, cancel_all_orders: true, cancel_all_orders_ws: false, cancel_order: true, cancel_order_with_client_order_id: false, cancel_order_ws: false, cancel_orders: false, cancel_orders_with_client_order_id: false, cancel_orders_ws: false, close_all_positions: false, close_position: false, create_deposit_address: true, create_limit_buy_order: false, create_limit_buy_order_ws: false, create_limit_order: true, create_limit_order_ws: false, create_limit_sell_order: false, create_limit_sell_order_ws: false, create_market_buy_order: false, create_market_buy_order_with_cost: false, create_market_buy_order_with_cost_ws: false, create_market_buy_order_ws: false, create_market_order: true, create_market_order_with_cost: false, create_market_order_with_cost_ws: false, create_market_order_ws: true, create_market_sell_order: false, create_market_sell_order_with_cost: false, create_market_sell_order_with_cost_ws: false, create_market_sell_order_ws: false, create_order: true, create_order_with_take_profit_and_stop_loss: false, create_order_with_take_profit_and_stop_loss_ws: false, create_order_ws: false, create_orders: false, create_post_only_order: false, create_post_only_order_ws: false, create_reduce_only_order: false, create_reduce_only_order_ws: false, create_stop_limit_order: false, create_stop_limit_order_ws: false, create_stop_loss_order: false, create_stop_loss_order_ws: false, create_stop_market_order: false, create_stop_market_order_ws: false, create_stop_order: false, create_stop_order_ws: false, create_take_profit_order: false, create_take_profit_order_ws: false, create_trailing_amount_order: false, create_trailing_amount_order_ws: false, create_trailing_percent_order: false, create_trailing_percent_order_ws: false, create_trigger_order: false, create_trigger_order_ws: false, deposit: false, edit_order: true, edit_order_with_client_order_id: false, edit_order_ws: false, edit_orders: false, fetch_accounts: true, fetch_all_greeks: false, fetch_balance: true, fetch_balance_ws: false, fetch_bids_asks: false, fetch_borrow_interest: false, fetch_borrow_rate: false, fetch_borrow_rate_histories: false, fetch_borrow_rate_history: false, fetch_borrow_rates: false, fetch_borrow_rates_per_symbol: false, fetch_canceled_and_closed_orders: false, fetch_canceled_orders: false, fetch_closed_order: false, fetch_closed_orders: true, fetch_closed_orders_ws: false, fetch_convert_currencies: false, fetch_convert_quote: false, fetch_convert_trade: false, fetch_convert_trade_history: false, fetch_cross_borrow_rate: false, fetch_cross_borrow_rates: false, fetch_currencies: true, fetch_currencies_ws: true, fetch_deposit: false, fetch_deposit_address: false, fetch_deposit_addresses: false, fetch_deposit_addresses_by_network: true, fetch_deposit_withdraw_fee: false, fetch_deposit_withdraw_fees: false, fetch_deposits: true, fetch_deposits_withdrawals: false, fetch_deposits_ws: false, fetch_funding_history: true, fetch_funding_interval: false, fetch_funding_intervals: false, fetch_funding_rate: false, fetch_funding_rate_history: false, fetch_funding_rates: false, fetch_greeks: false, fetch_index_ohlcv: false, fetch_isolated_borrow_rate: false, fetch_isolated_borrow_rates: false, fetch_isolated_positions: false, fetch_l2_order_book: true, fetch_l3_order_book: false, fetch_last_prices: false, fetch_ledger: false, fetch_ledger_entry: false, fetch_leverage: true, fetch_leverage_tiers: true, fetch_leverages: false, fetch_liquidations: false, fetch_long_short_ratio: false, fetch_long_short_ratio_history: false, fetch_margin_adjustment_history: false, fetch_margin_mode: false, fetch_margin_modes: false, fetch_mark_ohlcv: false, fetch_mark_prices: false, fetch_market_leverage_tiers: false, fetch_markets: true, fetch_markets_ws: false, fetch_my_liquidations: false, fetch_my_settlement_history: false, fetch_my_trades: true, fetch_my_trades_ws: false, fetch_ohlcv: true, fetch_ohlcv_ws: false, fetch_open_interest: false, fetch_open_interest_history: false, fetch_open_interests: false, fetch_open_order: false, fetch_open_orders: true, fetch_open_orders_ws: false, fetch_option: false, fetch_option_chain: false, fetch_order: true, fetch_order_book: true, fetch_order_book_ws: false, fetch_order_books: false, fetch_order_trades: false, fetch_order_with_client_order_id: false, fetch_order_ws: false, fetch_orders: false, fetch_orders_by_status: false, fetch_orders_ws: false, fetch_position: false, fetch_position_history: false, fetch_position_mode: false, fetch_position_ws: false, fetch_positions: true, fetch_positions_for_symbol: false, fetch_positions_for_symbol_ws: false, fetch_positions_history: false, fetch_positions_risk: false, fetch_positions_ws: false, fetch_premium_index_ohlcv: false, fetch_settlement_history: false, fetch_status: false, fetch_ticker: true, fetch_ticker_ws: false, fetch_tickers: true, fetch_tickers_ws: false, fetch_time: true, fetch_trades: true, fetch_trades_ws: false, fetch_trading_fee: false, fetch_trading_fees: true, fetch_trading_fees_ws: false, fetch_trading_limits: false, fetch_transaction_fee: false, fetch_transaction_fees: false, fetch_transactions: false, fetch_transfer: false, fetch_transfers: false, fetch_underlying_assets: false, fetch_volatility_history: false, fetch_withdraw_addresses: false, fetch_withdrawal: false, fetch_withdrawal_whitelist: false, fetch_withdrawals: true, fetch_withdrawals_ws: false, future: false, margin: false, option: false, private_api: true, public_api: true, reduce_margin: false, repay_cross_margin: false, repay_isolated_margin: false, sandbox: false, set_leverage: true, set_margin: false, set_margin_mode: false, set_position_mode: false, sign_in: false, spot: true, swap: true, transfer: false, un_watch_my_trades: false, un_watch_ohlcv: false, un_watch_ohlcv_for_symbols: false, un_watch_order_book: false, un_watch_order_book_for_symbols: false, un_watch_orders: false, un_watch_positions: false, un_watch_ticker: false, un_watch_tickers: false, un_watch_trades: false, un_watch_trades_for_symbols: false, watch_balance: true, watch_bids_asks: false, watch_liquidations: false, watch_liquidations_for_symbols: false, watch_my_liquidations: false, watch_my_liquidations_for_symbols: false, watch_my_trades: false, watch_ohlcv: true, watch_ohlcv_for_symbols: false, watch_order_book: true, watch_order_book_for_symbols: false, watch_orders: true, watch_orders_for_symbols: false, watch_position: false, watch_positions: false, watch_status: false, watch_ticker: true, watch_tickers: false, watch_trades: true, watch_trades_for_symbols: false, withdraw: true, ws: false }, http_config: nil, id: "arkham", markets: nil, name: "ARKHAM", ohlcv_timestamp_resolution: :unknown, options: %{ networks: %{ "ARBONE" => "ARB", "AVAXC" => "AVAX", "BTC" => "BTC", "DOGE" => "DOGE", "ERC20" => "ETH", "ETH" => "ETH", "OP" => "OP", "SOL" => "SOL", "SUI" => "SUI", "TON" => "TON", "XRP" => "XRP" }, networks_by_id: %{ "ERC20" => "ERC20", "ETH" => "ERC20" }, request_expiration: 5000, timeframe_durations: %{ "15m" => 900000000, "1d" => 86400000000, "1h" => 3600000000, "1m" => 60000000, "30m" => 1800000000, "5m" => 300000000, "6h" => 21600000000 } }, order_mappings: %{ side_format: :lowercase, side_key: "side", type_format: nil, type_key: "type" }, param_mappings: %{ "amount" => "size", "id" => "orderId", "since" => "start", "timeframe" => "duration" }, parse_methods: [ %{ "comment" => nil, "examples" => [ "{\n \"id\": \"0\",\n \"name\": \"Primary\",\n \"pinned\": true,\n \"isLsp\": false,\n \"futuresEnabled\": true,\n \"payFeesInArkm\": false,\n \"lspSettings\": []\n }" ], "line_end" => 1725, "line_start" => 1707, "mappings" => [ %{ "comment" => nil, "key" => "id", "value" => "this.safeString (account, 'id')" }, %{ "comment" => nil, "key" => "type", "value" => "undefined" }, %{ "comment" => nil, "key" => "code", "value" => "undefined" }, %{ "comment" => nil, "key" => "info", "value" => "account" } ], "name" => "parseAccount", "signature" => "parseAccount (account)", "source" => "parseAccount (account) {\n //\n // {\n // \"id\": \"0\",\n // \"name\": \"Primary\",\n // \"pinned\": true,\n // \"isLsp\": false,\n // \"futuresEnabled\": true,\n // \"payFeesInArkm\": false,\n // \"lspSettings\": []\n // }\n //\n return {\n 'id': this.safeString (account, 'id'),\n 'type': undefined,\n 'code': undefined,\n 'info': account,\n };\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 1788, "line_start" => 1771, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "response" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" } ], "name" => "parseBalance", "signature" => "parseBalance (response): Balances", "source" => "parseBalance (response): Balances {\n const timestamp = this.safeIntegerProduct (response, 'lastUpdateTime', 0.001);\n const result: Dict = {\n 'info': response,\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n };\n for (let i = 0; i < response.length; i++) {\n const balance = response[i];\n const symbol = this.safeString (balance, 'symbol');\n const code = this.safeCurrencyCode (symbol);\n const account = this.account ();\n account['total'] = this.safeString (balance, 'balance');\n account['free'] = this.safeString (balance, 'free');\n result[code] = account;\n }\n return this.safeBalance (result);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 1862, "line_start" => 1851, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "entry" }, %{ "comment" => nil, "key" => "currency", "value" => "this.safeString (currency, 'code')" }, %{ "comment" => nil, "key" => "network", "value" => "undefined" }, %{ "comment" => nil, "key" => "address", "value" => "entry" }, %{ "comment" => nil, "key" => "tag", "value" => "undefined" } ], "name" => "parseDepositAddress", "signature" => "parseDepositAddress (entry, currency: Currency = undefined): DepositAddress", "source" => "parseDepositAddress (entry, currency: Currency = undefined): DepositAddress {\n //\n // \"12NauJ26TUT9aYkpId7YdePJJDRMGbAsEMVoTVUvBErV\"\n //\n return {\n 'info': entry,\n 'currency': this.safeString (currency, 'code'),\n 'network': undefined,\n 'address': entry,\n 'tag': undefined,\n } as DepositAddress;\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"amount\": \"20.1\",\n \"assetSymbol\": \"BTC\",\n \"indexPrice\": \"1.23\",\n \"pairSymbol\": \"BTC_USDT\",\n \"time\": 1704067200000000,\n \"id\": 1,\n \"subaccountId\": 1,\n \"userId\": 1\n }" ], "line_end" => 2084, "line_start" => 2059, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "income" }, %{ "comment" => nil, "key" => "symbol", "value" => "this.safeSymbol (marketId, market)" }, %{ "comment" => nil, "key" => "code", "value" => "this.safeCurrencyCode (currencyId)" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "id", "value" => "this.safeString (income, 'id')" }, %{ "comment" => nil, "key" => "amount", "value" => "this.safeNumber (income, 'amount')" } ], "name" => "parseIncome", "signature" => "parseIncome (income, market: Market = undefined)", "source" => "parseIncome (income, market: Market = undefined) {\n //\n // {\n // \"amount\": \"20.1\",\n // \"assetSymbol\": \"BTC\",\n // \"indexPrice\": \"1.23\",\n // \"pairSymbol\": \"BTC_USDT\",\n // \"time\": 1704067200000000,\n // \"id\": 1,\n // \"subaccountId\": 1,\n // \"userId\": 1\n // }\n //\n const marketId = this.safeString (income, 'pairSymbol');\n const currencyId = this.safeString (income, 'assetSymbol');\n const timestamp = this.safeIntegerProduct (income, 'time', 0.001);\n return {\n 'info': income,\n 'symbol': this.safeSymbol (marketId, market),\n 'code': this.safeCurrencyCode (currencyId),\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'id': this.safeString (income, 'id'),\n 'amount': this.safeNumber (income, 'amount'),\n };\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"symbol\": \"ETH_USDT_PERP\",\n \"leverage\": \"5\"\n }" ], "line_end" => 2138, "line_start" => 2122, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "leverage" }, %{ "comment" => nil, "key" => "symbol", "value" => "this.safeSymbol (marketId, market)" }, %{ "comment" => nil, "key" => "marginMode", "value" => "undefined" }, %{ "comment" => nil, "key" => "longLeverage", "value" => "leverageNum" }, %{ "comment" => nil, "key" => "shortLeverage", "value" => "leverageNum" } ], "name" => "parseLeverage", "signature" => "parseLeverage (leverage: Dict, market: Market = undefined): Leverage", "source" => "parseLeverage (leverage: Dict, market: Market = undefined): Leverage {\n //\n // {\n // \"symbol\": \"ETH_USDT_PERP\",\n // \"leverage\": \"5\"\n // }\n //\n const marketId = this.safeString (leverage, 'symbol');\n const leverageNum = this.safeNumber (leverage, 'leverage'); // default leverage is 1 typically\n return {\n 'info': leverage,\n 'symbol': this.safeSymbol (marketId, market),\n 'marginMode': undefined,\n 'longLeverage': leverageNum,\n 'shortLeverage': leverageNum,\n } as Leverage;\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 2409, "line_start" => 2392, "mappings" => [], "name" => "parseLeverageTiers", "signature" => "parseLeverageTiers (response: any, symbols: string[] = undefined, marketIdKey = undefined): LeverageTiers", "source" => "parseLeverageTiers (response: any, symbols: string[] = undefined, marketIdKey = undefined): LeverageTiers {\n // overloaded method\n const indexed = this.indexBy (response, 'name');\n symbols = this.marketSymbols (symbols);\n const tiers = {};\n for (let i = 0; i < symbols.length; i++) {\n const symbol = symbols[i];\n const market = this.market (symbol);\n const marginSchedule = this.safeString (market['info'], 'marginSchedule');\n if (marginSchedule === undefined) {\n throw new BadSymbol (this.id + ' fetchLeverageTiers() could not find marginSchedule for ' + symbol);\n }\n const selectedDict = this.safeDict (indexed, marginSchedule, {});\n const bands = this.safeList (selectedDict, 'bands', []);\n tiers[symbol] = this.parseMarketLeverageTiers (bands, market);\n }\n return tiers;\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 2433, "line_start" => 2411, "mappings" => [ %{ "comment" => nil, "key" => "tier", "value" => "this.sum (i, 1)" }, %{ "comment" => nil, "key" => "symbol", "value" => "this.safeSymbol (marketId, market, undefined, 'swap')" }, %{ "comment" => nil, "key" => "currency", "value" => "market['linear'] ? market['base'] : market['quote']" }, %{ "comment" => nil, "key" => "minNotional", "value" => "minNotional" }, %{ "comment" => nil, "key" => "maxNotional", "value" => "maxNotional" }, %{ "comment" => nil, "key" => "maintenanceMarginRate", "value" => "this.safeNumber (tier, 'marginRate')" }, %{ "comment" => nil, "key" => "maxLeverage", "value" => "this.safeInteger (tier, 'leverageRate')" }, %{ "comment" => nil, "key" => "info", "value" => "tier" } ], "name" => "parseMarketLeverageTiers", "signature" => "parseMarketLeverageTiers (info, market: Market = undefined): LeverageTier[]", "source" => "parseMarketLeverageTiers (info, market: Market = undefined): LeverageTier[] {\n const tiers = [];\n const brackets = info;\n let minNotional = 0;\n for (let i = 0; i < brackets.length; i++) {\n const tier = brackets[i];\n const marketId = this.safeString (info, 'market');\n market = this.safeMarket (marketId, market, undefined, 'swap');\n const maxNotional = this.safeNumber (tier, 'positionLimit');\n tiers.push ({\n 'tier': this.sum (i, 1),\n 'symbol': this.safeSymbol (marketId, market, undefined, 'swap'),\n 'currency': market['linear'] ? market['base'] : market['quote'],\n 'minNotional': minNotional,\n 'maxNotional': maxNotional,\n 'maintenanceMarginRate': this.safeNumber (tier, 'marginRate'),\n 'maxLeverage': this.safeInteger (tier, 'leverageRate'),\n 'info': tier,\n });\n minNotional = maxNotional;\n }\n return tiers as LeverageTier[];\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"symbol\": \"BTC_USDT_PERP\",\n \"time\": \"1753464720000000\",\n \"duration\": \"60000000\",\n \"open\": \"116051.35\",\n \"high\": \"116060.27\",\n \"low\": \"116051.35\",\n \"close\": \"116060.27\",\n \"volume\": \"0.0257\",\n \"quoteVolume\": \"2982.6724054\"\n }" ], "line_end" => 841, "line_start" => 819, "mappings" => [], "name" => "parseOHLCV", "signature" => "parseOHLCV (ohlcv, market: Market = undefined): OHLCV", "source" => "parseOHLCV (ohlcv, market: Market = undefined): OHLCV {\n //\n // {\n // \"symbol\": \"BTC_USDT_PERP\",\n // \"time\": \"1753464720000000\",\n // \"duration\": \"60000000\",\n // \"open\": \"116051.35\",\n // \"high\": \"116060.27\",\n // \"low\": \"116051.35\",\n // \"close\": \"116060.27\",\n // \"volume\": \"0.0257\",\n // \"quoteVolume\": \"2982.6724054\"\n // }\n //\n return [\n this.safeIntegerProduct (ohlcv, 'time', 0.001),\n this.safeNumber (ohlcv, 'open'),\n this.safeNumber (ohlcv, 'high'),\n this.safeNumber (ohlcv, 'low'),\n this.safeNumber (ohlcv, 'close'),\n this.safeNumber (ohlcv, 'volume'),\n ];\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"orderId\": \"3694872060678\",\n \"clientOrderId\": \"test123\",\n \"symbol\": \"SOL_USDT\",\n \"subaccountId\": \"0\",\n \"side\": \"buy\",\n \"type\": \"limitGtc\",\n \"size\": \"0.05\",\n \"price\": \"170\",\n \"time\": \"1753710501474043\"\n }", "{\n \"orderId\": \"3690478767430\",\n \"userId\": \"2959123\",\n \"subaccountId\": \"0\",\n \"symbol\": \"SOL_USDT\",\n \"time\": \"1753696843913970\",\n \"side\": \"sell\",\n \"type\": \"limitGtc\",\n \"size\": \"0.066\",\n \"price\": \"293.2\",\n \"postOnly\": false,\n \"reduceOnly\": false,\n \"executedSize\": \"0\",\n \"status\": \"booked\",\n \"avgPrice\": \"0\",\n \"executedNotional\": \"0\",\n \"creditFeePaid\": \"0\",\n \"marginBonusFeePaid\": \"0\",\n \"quoteFeePaid\": \"0\",\n \"arkmFeePaid\": \"0\",\n \"revisionId\": \"887956326\",\n \"lastTime\": \"1753696843914830\",\n \"clientOrderId\": \"\",\n \"lastSize\": \"0\",\n \"lastPrice\": \"0\",\n \"lastCreditFee\": \"0\",\n \"lastMarginBonusFee\": \"0\",\n \"lastQuoteFee\": \"0\",\n \"lastArkmFee\": \"0\"\n }", "{\n \"triggerOrderId\": \"3716436645573\",\n \"symbol\": \"SOL_USDT_PERP\",\n \"side\": \"buy\",\n \"type\": \"limitGtc\",\n \"size\": \"0.05\",\n \"price\": \"150\"\n }", "{\n \"subaccountId\": \"0\",\n \"symbol\": \"SOL_USDT\",\n \"side\": \"sell\",\n \"type\": \"market\",\n \"size\": \"0.045\",\n \"price\": \"99.9\",\n \"postOnly\": false,\n \"reduceOnly\": false,\n \"time\": \"1753768103780063\",\n \"triggerOrderId\": \"3715847222127\",\n \"triggerType\": \"stopLoss\",\n \"triggerPriceType\": \"last\",\n \"triggerPrice\": \"111\",\n \"clientOrderId\": \"\",\n \"status\": \"staged\"\n }" ], "line_end" => 1554, "line_start" => 1427, "mappings" => [ %{ "comment" => nil, "key" => "id", "value" => "this.safeString2 (order, 'orderId', 'triggerOrderId')" }, %{ "comment" => nil, "key" => "clientOrderId", "value" => "this.safeString (order, 'clientOrderId')" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "lastTradeTimeStamp", "value" => "undefined" }, %{ "comment" => nil, "key" => "lastUpdateTimestamp", "value" => "this.safeIntegerProduct (order, 'lastTime', 0.001)" }, %{ "comment" => nil, "key" => "status", "value" => "this.parseOrderStatus (this.safeString (order, 'status'))" }, %{ "comment" => nil, "key" => "symbol", "value" => "market['symbol']" }, %{ "comment" => nil, "key" => "type", "value" => "orderType" }, %{ "comment" => nil, "key" => "timeInForce", "value" => "timeInForce" }, %{ "comment" => nil, "key" => "postOnly", "value" => "undefined" }, %{ "comment" => nil, "key" => "side", "value" => "this.safeString (order, 'side')" }, %{ "comment" => nil, "key" => "price", "value" => "this.safeNumber (order, 'price')" }, %{ "comment" => nil, "key" => "triggerPrice", "value" => "undefined" }, %{ "comment" => nil, "key" => "cost", "value" => "this.safeNumber (order, 'executedNotional')" }, %{ "comment" => nil, "key" => "average", "value" => "this.safeNumberOmitZero (order, 'avgPrice')" }, %{ "comment" => nil, "key" => "amount", "value" => "this.safeNumber (order, 'size')" }, %{ "comment" => nil, "key" => "filled", "value" => "this.safeNumber (order, '')" }, %{ "comment" => nil, "key" => "remaining", "value" => "undefined" }, %{ "comment" => nil, "key" => "trades", "value" => "undefined" }, %{ "comment" => nil, "key" => "fees", "value" => "fees" }, %{ "comment" => nil, "key" => "reduceOnly", "value" => "this.safeBool (order, 'reduceOnly')" }, %{ "comment" => nil, "key" => "info", "value" => "order" } ], "name" => "parseOrder", "signature" => "parseOrder (order: Dict, market: Market = undefined): Order", "source" => "parseOrder (order: Dict, market: Market = undefined): Order {\n //\n // createOrder\n //\n // {\n // \"orderId\": \"3694872060678\",\n // \"clientOrderId\": \"test123\",\n // \"symbol\": \"SOL_USDT\",\n // \"subaccountId\": \"0\",\n // \"side\": \"buy\",\n // \"type\": \"limitGtc\",\n // \"size\": \"0.05\",\n // \"price\": \"170\",\n // \"time\": \"1753710501474043\"\n // }\n //\n // fetchOrder, fetchOpenOrders, fetchClosedOrders\n //\n // {\n // \"orderId\": \"3690478767430\",\n // \"userId\": \"2959123\",\n // \"subaccountId\": \"0\",\n // \"symbol\": \"SOL_USDT\",\n // \"time\": \"1753696843913970\",\n // \"side\": \"sell\",\n // \"type\": \"limitGtc\",\n // \"size\": \"0.066\",\n // \"price\": \"293.2\",\n // \"postOnly\": false,\n // \"reduceOnly\": false,\n // \"executedSize\": \"0\",\n // \"status\": \"booked\",\n // \"avgPrice\": \"0\",\n // \"executedNotional\": \"0\",\n // \"creditFeePaid\": \"0\",\n // \"marginBonusFeePaid\": \"0\",\n // \"quoteFeePaid\": \"0\",\n // \"arkmFeePaid\": \"0\",\n // \"revisionId\": \"887956326\",\n // \"lastTime\": \"1753696843914830\",\n // \"clientOrderId\": \"\",\n // \"lastSize\": \"0\",\n // \"lastPrice\": \"0\",\n // \"lastCreditFee\": \"0\",\n // \"lastMarginBonusFee\": \"0\",\n // \"lastQuoteFee\": \"0\",\n // \"lastArkmFee\": \"0\"\n // }\n //\n // trigger-orders: createOrder\n //\n // {\n // \"triggerOrderId\": \"3716436645573\",\n // \"symbol\": \"SOL_USDT_PERP\",\n // \"side\": \"buy\",\n // \"type\": \"limitGtc\",\n // \"size\": \"0.05\",\n // \"price\": \"150\"\n // }\n //\n // trigger-orders: fetchOpenOrders\n //\n // {\n // \"subaccountId\": \"0\",\n // \"symbol\": \"SOL_USDT\",\n // \"side\": \"sell\",\n // \"type\": \"market\",\n // \"size\": \"0.045\",\n // \"price\": \"99.9\",\n // \"postOnly\": false,\n // \"reduceOnly\": false,\n // \"time\": \"1753768103780063\",\n // \"triggerOrderId\": \"3715847222127\",\n // \"triggerType\": \"stopLoss\",\n // \"triggerPriceType\": \"last\",\n // \"triggerPrice\": \"111\",\n // \"clientOrderId\": \"\",\n // \"status\": \"staged\"\n // }\n //\n const marketId = this.safeString (order, 'symbol');\n market = this.safeMarket (marketId, market);\n const isPostOnly = this.safeBool (order, 'postOnly');\n const typeRaw = this.safeString (order, 'type');\n const orderType = isPostOnly ? 'limit' : this.parseOrderType (typeRaw);\n const timeInForce = isPostOnly ? 'PO' : this.parseTimeInForce (typeRaw);\n const quoteFeePaid = this.safeString (order, 'quoteFeePaid');\n const arkmFeePaid = this.safeString (order, 'arkmFeePaid');\n const fees = [];\n if (quoteFeePaid !== undefined) {\n fees.push ({\n 'cost': quoteFeePaid,\n 'currency': this.safeString (market, 'quote'),\n });\n }\n if (arkmFeePaid !== undefined) {\n fees.push ({\n 'cost': arkmFeePaid,\n 'currency': 'ARKM',\n });\n }\n const timestamp = this.safeIntegerProduct (order, 'time', 0.001);\n return this.safeOrder ({\n 'id': this.safeString2 (order, 'orderId', 'triggerOrderId'),\n 'clientOrderId': this.safeString (order, 'clientOrderId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'lastTradeTimeStamp': undefined,\n 'lastUpdateTimestamp': this.safeIntegerProduct (order, 'lastTime', 0.001),\n 'status': this.parseOrderStatus (this.safeString (order, 'status')),\n 'symbol': market['symbol'],\n 'type': orderType,\n 'timeInForce': timeInForce,\n 'postOnly': undefined,\n 'side': this.safeString (order, 'side'),\n 'price': this.safeNumber (order, 'price'),\n 'triggerPrice': undefined,\n 'cost': this.safeNumber (order, 'executedNotional'),\n 'average': this.safeNumberOmitZero (order, 'avgPrice'),\n 'amount': this.safeNumber (order, 'size'),\n 'filled': this.safeNumber (order, ''),\n 'remaining': undefined,\n 'trades': undefined,\n 'fees': fees,\n 'reduceOnly': this.safeBool (order, 'reduceOnly'),\n 'info': order,\n }, market);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 1587, "line_start" => 1576, "mappings" => [], "name" => "parseOrderStatus", "signature" => "parseOrderStatus (status: Str)", "source" => "parseOrderStatus (status: Str) {\n const statuses: Dict = {\n 'new': 'pending',\n 'staged': 'open',\n 'booked': 'open',\n 'taker': 'closed',\n 'maker': 'closed',\n 'cancelled': 'canceled',\n 'closed': 'closed',\n };\n return this.safeString (statuses, status, status);\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 1564, "line_start" => 1556, "mappings" => [], "name" => "parseOrderType", "signature" => "parseOrderType (type: Str): Str", "source" => "parseOrderType (type: Str): Str {\n const types: Dict = {\n 'limitGtc': 'limit',\n 'limitIoc': 'limit',\n 'limitFok': 'limit',\n 'market': 'market',\n };\n return this.safeStringUpper (types, type, type);\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"subaccountId\": \"0\",\n \"symbol\": \"SOL_USDT_PERP\",\n \"base\": \"0.037\", // negative for short position\n \"quote\": \"-6.44614\", // negative for long position\n \"openBuySize\": \"0\",\n \"openSellSize\": \"0\",\n \"openBuyNotional\": \"0\",\n \"openSellNotional\": \"0\",\n \"lastUpdateReason\": \"orderFill\",\n \"lastUpdateTime\": \"1753903829389966\",\n \"lastUpdateId\": \"250434684\",\n \"lastUpdateBaseDelta\": \"0.037\",\n \"lastUpdateQuoteDelta\": \"-6.44614\",\n \"breakEvenPrice\": \"174.22\",\n \"markPrice\": \"174.33\",\n \"value\": \"6.45021\",\n \"pnl\": \"0.00407\",\n \"initialMargin\": \"0.645021\",\n \"maintenanceMargin\": \"0.3870126\",\n \"averageEntryPrice\": \"174.22\"\n }" ], "line_end" => 2273, "line_start" => 2212, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "position" }, %{ "comment" => nil, "key" => "id", "value" => "undefined" }, %{ "comment" => nil, "key" => "symbol", "value" => "this.safeSymbol (marketId, market)" }, %{ "comment" => nil, "key" => "notional", "value" => "this.parseNumber (Precise.stringAbs (notional))" }, %{ "comment" => nil, "key" => "marginMode", "value" => "undefined" }, %{ "comment" => nil, "key" => "liquidationPrice", "value" => "undefined" }, %{ "comment" => nil, "key" => "entryPrice", "value" => "this.safeNumber (position, 'averageEntryPrice')" }, %{ "comment" => nil, "key" => "unrealizedPnl", "value" => "this.safeNumber (position, 'pnl')" }, %{ "comment" => nil, "key" => "realizedPnl", "value" => "undefined" }, %{ "comment" => nil, "key" => "percentage", "value" => "undefined" }, %{ "comment" => nil, "key" => "contracts", "value" => "this.parseNumber (baseAbs)" }, %{ "comment" => nil, "key" => "contractSize", "value" => "undefined" }, %{ "comment" => nil, "key" => "markPrice", "value" => "this.safeNumber (position, 'markPrice')" }, %{ "comment" => nil, "key" => "lastPrice", "value" => "undefined" }, %{ "comment" => nil, "key" => "side", "value" => "side" }, %{ "comment" => nil, "key" => "hedged", "value" => "undefined" }, %{ "comment" => nil, "key" => "timestamp", "value" => "undefined" }, %{ "comment" => nil, "key" => "datetime", "value" => "undefined" }, %{ "comment" => nil, "key" => "lastUpdateTimestamp", "value" => "this.safeInteger (position, 'lastUpdateTime')" }, %{ "comment" => nil, "key" => "maintenanceMargin", "value" => "this.safeNumber (position, 'maintenanceMargin')" }, %{ "comment" => nil, "key" => "maintenanceMarginPercentage", "value" => "undefined" }, %{ "comment" => nil, "key" => "collateral", "value" => "undefined" }, %{ "comment" => nil, "key" => "initialMargin", "value" => "this.safeNumber (position, 'initialMargin')" }, %{ "comment" => nil, "key" => "initialMarginPercentage", "value" => "undefined" }, %{ "comment" => nil, "key" => "leverage", "value" => "undefined" }, %{ "comment" => nil, "key" => "marginRatio", "value" => "undefined" }, %{ "comment" => nil, "key" => "stopLossPrice", "value" => "undefined" }, %{ "comment" => nil, "key" => "takeProfitPrice", "value" => "undefined" } ], "name" => "parsePosition", "signature" => "parsePosition (position: Dict, market: Market = undefined)", "source" => "parsePosition (position: Dict, market: Market = undefined) {\n //\n // {\n // \"subaccountId\": \"0\",\n // \"symbol\": \"SOL_USDT_PERP\",\n // \"base\": \"0.037\", // negative for short position\n // \"quote\": \"-6.44614\", // negative for long position\n // \"openBuySize\": \"0\",\n // \"openSellSize\": \"0\",\n // \"openBuyNotional\": \"0\",\n // \"openSellNotional\": \"0\",\n // \"lastUpdateReason\": \"orderFill\",\n // \"lastUpdateTime\": \"1753903829389966\",\n // \"lastUpdateId\": \"250434684\",\n // \"lastUpdateBaseDelta\": \"0.037\",\n // \"lastUpdateQuoteDelta\": \"-6.44614\",\n // \"breakEvenPrice\": \"174.22\",\n // \"markPrice\": \"174.33\",\n // \"value\": \"6.45021\",\n // \"pnl\": \"0.00407\",\n // \"initialMargin\": \"0.645021\",\n // \"maintenanceMargin\": \"0.3870126\",\n // \"averageEntryPrice\": \"174.22\"\n // }\n //\n const base = this.safeString (position, 'base');\n const baseAbs = Precise.stringAbs (base);\n const isLong = Precise.stringGe (base, '0');\n const side = isLong ? 'long' : 'short';\n const marketId = this.safeString (position, 'symbol');\n const notional = this.safeString (position, 'value');\n return this.safePosition ({\n 'info': position,\n 'id': undefined,\n 'symbol': this.safeSymbol (marketId, market),\n 'notional': this.parseNumber (Precise.stringAbs (notional)),\n 'marginMode': undefined,\n 'liquidationPrice': undefined,\n 'entryPrice': this.safeNumber (position, 'averageEntryPrice'),\n 'unrealizedPnl': this.safeNumber (position, 'pnl'),\n 'realizedPnl': undefined,\n 'percentage': undefined,\n 'contracts': this.parseNumber (baseAbs),\n 'contractSize': undefined,\n 'markPrice': this.safeNumber (position, 'markPrice'),\n 'lastPrice': undefined,\n 'side': side,\n 'hedged': undefined,\n 'timestamp': undefined,\n 'datetime': undefined,\n 'lastUpdateTimestamp': this.safeInteger (position, 'lastUpdateTime'),\n 'maintenanceMargin': this.safeNumber (position, 'maintenanceMargin'),\n 'maintenanceMarginPercentage': undefined,\n 'collateral': undefined,\n 'initialMargin': this.safeNumber (position, 'initialMargin'),\n 'initialMarginPercentage': undefined,\n 'leverage': undefined,\n 'marginRatio': undefined,\n 'stopLossPrice': undefined,\n 'takeProfitPrice': undefined,\n });\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 937, "line_start" => 914, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "ticker" }, %{ "comment" => nil, "key" => "symbol", "value" => "this.safeSymbol (marketId, market)" }, %{ "comment" => nil, "key" => "high", "value" => "this.safeNumber (ticker, 'high24h')" }, %{ "comment" => nil, "key" => "low", "value" => "this.safeNumber (ticker, 'low24h')" }, %{ "comment" => nil, "key" => "bid", "value" => "this.safeNumber (ticker, 'bid')" }, %{ "comment" => nil, "key" => "last", "value" => "this.safeNumber (ticker, 'price')" }, %{ "comment" => nil, "key" => "open", "value" => "this.safeNumber (ticker, 'price24hAgo')" }, %{ "comment" => nil, "key" => "change", "value" => "this.safeNumber (ticker, 'priceChange')" }, %{ "comment" => nil, "key" => "percentage", "value" => "this.safeNumber (ticker, 'priceChangePercent')" }, %{ "comment" => nil, "key" => "baseVolume", "value" => "this.safeNumber (ticker, 'volume24h')" }, %{ "comment" => nil, "key" => "quoteVolume", "value" => "this.safeNumber (ticker, 'usdVolume24h')" }, %{ "comment" => nil, "key" => "markPrice", "value" => "this.safeNumber (ticker, 'markPrice')" }, %{ "comment" => nil, "key" => "indexPrice", "value" => "this.safeNumber (ticker, 'indexPrice')" }, %{ "comment" => nil, "key" => "vwap", "value" => "undefined" }, %{ "comment" => nil, "key" => "average", "value" => "undefined" }, %{ "comment" => nil, "key" => "previousClose", "value" => "undefined" }, %{ "comment" => nil, "key" => "askVolume", "value" => "undefined" }, %{ "comment" => nil, "key" => "bidVolume", "value" => "undefined" } ], "name" => "parseTicker", "signature" => "parseTicker (ticker: Dict, market: Market = undefined): Ticker", "source" => "parseTicker (ticker: Dict, market: Market = undefined): Ticker {\n const marketId = this.safeString (ticker, 'symbol');\n market = this.safeMarket (marketId, market);\n return this.safeTicker ({\n 'info': ticker,\n 'symbol': this.safeSymbol (marketId, market),\n 'high': this.safeNumber (ticker, 'high24h'),\n 'low': this.safeNumber (ticker, 'low24h'),\n 'bid': this.safeNumber (ticker, 'bid'),\n 'last': this.safeNumber (ticker, 'price'),\n 'open': this.safeNumber (ticker, 'price24hAgo'),\n 'change': this.safeNumber (ticker, 'priceChange'),\n 'percentage': this.safeNumber (ticker, 'priceChangePercent'),\n 'baseVolume': this.safeNumber (ticker, 'volume24h'),\n 'quoteVolume': this.safeNumber (ticker, 'usdVolume24h'),\n 'markPrice': this.safeNumber (ticker, 'markPrice'),\n 'indexPrice': this.safeNumber (ticker, 'indexPrice'),\n 'vwap': undefined,\n 'average': undefined,\n 'previousClose': undefined,\n 'askVolume': undefined,\n 'bidVolume': undefined,\n });\n }" }, %{ "comment" => nil, "examples" => [], "line_end" => 1574, "line_start" => 1566, "mappings" => [], "name" => "parseTimeInForce", "signature" => "parseTimeInForce (type: Str): Str", "source" => "parseTimeInForce (type: Str): Str {\n const types: Dict = {\n 'limitGtc': 'GTC',\n 'limitIoc': 'IOC',\n 'limitFok': 'FOK',\n 'market': 'IOC',\n };\n return this.safeStringUpper (types, type, type);\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"symbol\": \"BTC_USDT_PERP\",\n \"revisionId\": \"1130514101\",\n \"size\": \"0.01668\",\n \"price\": \"116309.57\",\n \"takerSide\": \"sell\",\n \"time\": \"1753439710374047\"\n }", "{\n \"symbol\": \"SOL_USDT\",\n \"revisionId\": \"891839406\",\n \"size\": \"0.042\",\n \"price\": \"185.06\",\n \"takerSide\": \"sell\",\n \"time\": \"1753773952039342\",\n \"orderId\": \"3717304929194\",\n \"userSide\": \"sell\",\n \"quoteFee\": \"0.00777252\",\n \"arkmFee\": \"0\",\n \"clientOrderId\": \"\"\n }" ], "line_end" => 1040, "line_start" => 979, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "trade" }, %{ "comment" => nil, "key" => "id", "value" => "this.safeString (trade, 'revisionId')" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "symbol", "value" => "market['symbol']" }, %{ "comment" => nil, "key" => "type", "value" => "undefined" }, %{ "comment" => nil, "key" => "side", "value" => "this.safeString2 (trade, 'userSide', 'takerSide')" }, %{ "comment" => nil, "key" => "price", "value" => "this.safeString (trade, 'price')" }, %{ "comment" => nil, "key" => "amount", "value" => "this.safeString (trade, 'size')" }, %{ "comment" => nil, "key" => "cost", "value" => "undefined" }, %{ "comment" => nil, "key" => "fee", "value" => "fee" }, %{ "comment" => nil, "key" => "order", "value" => "this.safeString (trade, 'orderId')" } ], "name" => "parseTrade", "signature" => "parseTrade (trade: Dict, market: Market = undefined): Trade", "source" => "parseTrade (trade: Dict, market: Market = undefined): Trade {\n //\n // fetchTrades\n //\n // {\n // \"symbol\": \"BTC_USDT_PERP\",\n // \"revisionId\": \"1130514101\",\n // \"size\": \"0.01668\",\n // \"price\": \"116309.57\",\n // \"takerSide\": \"sell\",\n // \"time\": \"1753439710374047\"\n // }\n //\n // fetchMyTrades\n //\n // {\n // \"symbol\": \"SOL_USDT\",\n // \"revisionId\": \"891839406\",\n // \"size\": \"0.042\",\n // \"price\": \"185.06\",\n // \"takerSide\": \"sell\",\n // \"time\": \"1753773952039342\",\n // \"orderId\": \"3717304929194\",\n // \"userSide\": \"sell\",\n // \"quoteFee\": \"0.00777252\",\n // \"arkmFee\": \"0\",\n // \"clientOrderId\": \"\"\n // }\n //\n const marketId = this.safeString (trade, 'symbol');\n market = this.safeMarket (marketId, market);\n const timestamp = this.safeIntegerProduct (trade, 'time', 0.001);\n const quoteFee = this.safeNumber (trade, 'quoteFee');\n const arkmFee = this.safeNumber (trade, 'arkmFee');\n let fee = undefined;\n if (quoteFee !== undefined) {\n fee = {\n 'cost': quoteFee,\n 'currency': market['quote'],\n };\n } else if (arkmFee !== undefined) {\n fee = {\n 'cost': arkmFee,\n 'currency': 'ARKM',\n };\n }\n return this.safeTrade ({\n 'info': trade,\n 'id': this.safeString (trade, 'revisionId'),\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'symbol': market['symbol'],\n 'type': undefined,\n 'side': this.safeString2 (trade, 'userSide', 'takerSide'), // priority to userSide\n 'takerOrMaker': undefined,\n 'price': this.safeString (trade, 'price'),\n 'amount': this.safeString (trade, 'size'),\n 'cost': undefined,\n 'fee': fee,\n 'order': this.safeString (trade, 'orderId'),\n }, market);\n }" }, %{ "comment" => nil, "examples" => [ "{\n \"id\": \"238644\",\n \"symbol\": \"SOL\",\n \"amount\": \"0.104\",\n \"time\": \"1753436404000000\",\n \"confirmed\": true,\n \"transactionHash\": \"1DRxbbyePTsMuB82SDf2fG5gLXH5iYnY8TQDstDPLULpLtjMJtF1ug1T4Mf8B6DSb8fp2sb5YtdbyqieZ2tkE1Ve\",\n \"chain\": \"Solana\",\n \"depositAddress\": \"12NauJ26TUT9aYkpId7YdePJJDRMGbAsEMVoTVUvBErV\",\n \"price\": \"180.322010164\"\n }" ], "line_end" => 1972, "line_start" => 1927, "mappings" => [ %{ "comment" => nil, "key" => "info", "value" => "transaction" }, %{ "comment" => nil, "key" => "id", "value" => "this.safeString (transaction, 'id')" }, %{ "comment" => nil, "key" => "txid", "value" => "this.safeString (transaction, 'transactionHash')" }, %{ "comment" => nil, "key" => "type", "value" => "undefined" }, %{ "comment" => nil, "key" => "currency", "value" => "code" }, %{ "comment" => nil, "key" => "network", "value" => "this.networkIdToCode (this.safeString (transaction, 'chain'))" }, %{ "comment" => nil, "key" => "amount", "value" => "this.safeNumber (transaction, 'amount')" }, %{ "comment" => nil, "key" => "status", "value" => "status" }, %{ "comment" => nil, "key" => "timestamp", "value" => "timestamp" }, %{ "comment" => nil, "key" => "datetime", "value" => "this.iso8601 (timestamp)" }, %{ "comment" => nil, "key" => "address", "value" => "address" }, %{ "comment" => nil, "key" => "addressFrom", "value" => "undefined" }, %{ "comment" => nil, "key" => "addressTo", "value" => "address" }, %{ "comment" => nil, "key" => "tag", "value" => "undefined" }, %{ "comment" => nil, "key" => "tagFrom", "value" => "undefined" }, %{ "comment" => nil, "key" => "tagTo", "value" => "undefined" }, %{ "comment" => nil, "key" => "updated", "value" => "undefined" }, %{ "comment" => nil, "key" => "comment", "value" => "undefined" }, %{ "comment" => nil, "key" => "fee", "value" => "undefined" }, %{ "comment" => nil, "key" => "internal", "value" => "false" } ], "name" => "parseTransaction", "signature" => "parseTransaction (transaction: Dict, currency: Currency = undefined): Transaction", "source" => "parseTransaction (transaction: Dict, currency: Currency = undefined): Transaction {\n //\n // {\n // \"id\": \"238644\",\n // \"symbol\": \"SOL\",\n // \"amount\": \"0.104\",\n // \"time\": \"1753436404000000\",\n // \"confirmed\": true,\n // \"transactionHash\": \"1DRxbbyePTsMuB82SDf2fG5gLXH5iYnY8TQDstDPLULpLtjMJtF1ug1T4Mf8B6DSb8fp2sb5YtdbyqieZ2tkE1Ve\",\n // \"chain\": \"Solana\",\n // \"depositAddress\": \"12NauJ26TUT9aYkpId7YdePJJDRMGbAsEMVoTVUvBErV\",\n // \"price\": \"180.322010164\"\n // }\n //\n const address = this.safeString (transaction, 'depositAddress');\n const timestamp = this.safeIntegerProduct (transaction, 'time', 0.001);\n const confirmd = this.safeBool (transaction, 'confirmed');\n let status = undefined;\n if (confirmd) {\n status = 'ok';\n }\n const currencyId = this.safeString (transaction, 'symbol');\n const code = this.safeCurrencyCode (currencyId, currency);\n return {\n 'info': transaction,\n 'id': this.safeString (transaction, 'id'),\n 'txid': this.safeString (transaction, 'transactionHash'),\n 'type': undefined,\n 'currency': code,\n 'network': this.networkIdToCode (this.safeString (transaction, 'chain')),\n 'amount': this.safeNumber (transaction, 'amount'),\n 'status': status,\n 'timestamp': timestamp,\n 'datetime': this.iso8601 (timestamp),\n 'address': address,\n 'addressFrom': undefined,\n 'addressTo': address,\n 'tag': undefined,\n 'tagFrom': undefined,\n 'tagTo': undefined,\n 'updated': undefined,\n 'comment': undefined,\n 'fee': undefined,\n 'internal': false,\n };\n }" } ], path_prefix: "", pro: true, quote_json_numbers: nil, rate_limits: %{ interval_ms: 7, period: 1000, requests: 142, rolling_window_size: 60000 }, raw_endpoints: %{ private: [], public: [] }, required_credentials: %{ api_key: true, password: false, secret: true, uid: false }, requires_eddsa: false, response_error: nil, signing: %{ api_key_header: "Arkham-Api-Key", confidence: :medium, pattern: :hmac_sha256_headers, signature_encoding: :base64, signature_header: "Arkham-Signature" }, spec_format_version: 1, status: %{ "eta" => nil, "status" => "ok", "updated" => nil, "url" => nil }, symbol_format: nil, symbol_formats: %{ precision_mode: 4, sample_limits: %{ "amount" => %{ "max" => 9000, "min" => 1.0e-5 }, "cost" => %{ "min" => 0.1 }, "price" => %{ "max" => 1000000, "min" => 0.01 } }, sample_precision: %{ "amount" => 1.0e-5, "price" => 0.01 }, spot: %{ base: "BTC", base_id: "BTC", case: :upper, contract: false, id: "BTC_USDT", limits: %{ "amount" => %{ "max" => 9000, "min" => 1.0e-5 }, "cost" => %{ "min" => 0.1 }, "leverage" => %{}, "price" => %{ "max" => 1000000, "min" => 0.01 } }, precision: %{ "amount" => 1.0e-5, "price" => 0.01 }, quote: "USDT", quote_id: "USDT", separator: "_", symbol: "BTC/USDT" }, swap: %{ base: "BTC", base_id: "BTC.P", case: :upper, contract: true, contract_size: 1, id: "BTC_USDT_PERP", inverse: false, limits: %{ "amount" => %{ "max" => 9000, "min" => 1.0e-5 }, "cost" => %{ "min" => 0.1 }, "leverage" => %{}, "price" => %{ "max" => 1000000, "min" => 0.01 } }, linear: true, precision: %{ "amount" => 1.0e-5, "price" => 0.01 }, quote: "USDT", quote_id: "USDT", separator: "_", settle: "USDT", settle_id: "USDT", symbol: "BTC/USDT:USDT" } }, symbol_patterns: %{ spot: %{ case: :upper, component_order: nil, date_format: nil, pattern: :underscore_upper, separator: "_", suffix: nil }, swap: %{ case: :upper, component_order: nil, date_format: nil, pattern: :suffix_perp, separator: "_", suffix: "_PERP" } }, timeframes: %{ "15m" => "15m", "1d" => "24h", "1h" => "1h", "1m" => "1m", "30m" => "30m", "5m" => "5m", "6h" => "6h" }, url_strategy: %{ detected_from: "fallback", pattern: :no_prefix, prefix: nil }, urls: %{ api: "https://arkm.com/api", api_sections: %{ "v1" => "https://arkm.com/api" }, doc: [ "https://arkm.com/limits-api", "https://info.arkm.com/api-platform" ], other: nil, sandbox: nil, www: "https://arkm.com/" }, version: "v1", ws: %{ auth: %{ algorithm: :sha256, encoding: :base64, market_specific: false, message_format: :op_args, op_field: "op", op_value: "auth", pattern: :generic_hmac, payload_format: "custom", requires_passphrase: false, timestamp_unit: :milliseconds }, channel_templates: %{ watch_balance: %{ auth_required: true, market_id_format: :native, params: [], pattern: :method_args_subscribe }, watch_ohlcv: %{ market_id_format: :native, params: [ %{ "default" => nil, "name" => "limit" } ], pattern: :method_args_subscribe }, watch_order_book: %{ market_id_format: :native, params: [ %{ "default" => nil, "name" => "limit" } ], pattern: :method_args_subscribe }, watch_orders: %{ auth_required: true, market_id_format: :native, params: [ %{ "default" => nil, "name" => "limit" } ], pattern: :method_args_subscribe }, watch_positions: %{ auth_required: true, market_id_format: :native, params: [ %{ "default" => nil, "name" => "limit" } ], pattern: :method_args_subscribe }, watch_ticker: %{ market_id_format: :native, params: [], pattern: :method_args_subscribe }, watch_trades: %{ market_id_format: :native, params: [ %{ "default" => nil, "name" => "limit" } ], pattern: :method_args_subscribe } }, has: %{ watch_balance: true, watch_bids_asks: nil, watch_liquidations: nil, watch_liquidations_for_symbols: nil, watch_my_liquidations: nil, watch_my_liquidations_for_symbols: nil, watch_my_trades: false, watch_ohlcv: true, watch_ohlcv_for_symbols: false, watch_order_book: true, watch_order_book_for_symbols: false, watch_orders: true, watch_orders_for_symbols: nil, watch_position: nil, watch_positions: nil, watch_status: nil, watch_ticker: true, watch_tickers: false, watch_trades: true, watch_trades_for_symbols: false }, message_patterns: [ %{ args_field: "args", format: :method, keys: [ "args", "confirmationId", "method" ], kind_field: "method", kind_value: "subscribe", sources: [ :send, :watch ] } ], options: %{ "watchOrderBook" => %{ "depth" => 100, "interval" => 500 } }, streaming: %{ keep_alive: 300000 }, subscription_config: %{ args_field: "args", args_format: :params_object, market_id_format: :native, op_field: "method" }, subscription_pattern: :method_params_subscribe, urls: "wss://arkm.com/ws", watch_methods: [ "watchBalance", "watchOHLCV", "watchOrderBook", "watchOrders", "watchPositions", "watchTicker", "watchTrades" ] } }