README.md

okxr: R Interface to the OKX API

okxr is an R package for working with the OKX REST API from R. It provides typed wrappers for market data, account endpoints, asset history, trading, and copy trading, with shared request signing and schema-based response parsing.

Status

okxr is available on CRAN. Install the stable release from CRAN or use the GitHub repository for development versions between CRAN releases.

Current development release: v0.4.5

Installation

Stable CRAN release:

install.packages("okxr")

Development release from GitHub:

# install.packages("devtools")
devtools::install_github("OliverLDS/okxr")

Features

Setup

config <- list(
  api_key = "your_api_key",
  secret_key = "your_secret_key",
  passphrase = "your_passphrase"
)

Public market and public reference endpoints can be called without credentials. Private account, asset, trade, and copy-trading endpoints require signed OKX API credentials.

Do not store real credentials in committed R scripts, examples, or tests. For interactive use, load them from environment variables or another local secret store. If you use OKX simulated trading, set demo = TRUE in config.

config <- list(
  api_key = Sys.getenv("OKX_API_KEY"),
  secret_key = Sys.getenv("OKX_SECRET_KEY"),
  passphrase = Sys.getenv("OKX_PASSPHRASE"),
  demo = TRUE,
  timeout = 10
)

Return values

By default, wrappers return parsed data.table objects with typed columns and variable labels where schemas are defined. Use set_okxr_options(raw_data = TRUE) to return the raw OKX data payload instead.

Network failures, request timeouts, OKX error responses, or empty API data payloads may return NULL with a warning. Request timeout defaults to 10 seconds and can be set globally with set_okxr_options(timeout = 15) or per request with config$timeout.

Examples

Public market examples require network access but no OKX credentials. Private account, trading, asset, and copy-trading examples require valid OKX credentials; trading examples may have account side effects.

Market data

get_market_candles(
  inst_id = "BTC-USDT",
  bar = "1m",
  limit = 100
)

Account data

get_account_balance(config = config)
get_account_positions(config = config)

Place an order

post_trade_order(
  inst_id = "BTC-USDT",
  td_mode = "cross",
  side = "buy",
  ord_type = "market",
  sz = "0.01",
  config = config
)

Copy trading

get_copy_trade_my_leaders(config = config)
get_copy_trade_current_subpos(config = config)

Wrapper categories

| Category | Method | Example function | | --- | --- | --- | | market | GET | get_market_candles() | | market | GET | get_market_tickers() | | market | GET | get_market_trades() | | market | GET | get_market_mark_price_candles() | | market | GET | get_market_index_tickers() | | market | GET | get_market_index_candles() | | market | GET | get_market_index_components() | | public | GET | get_public_time() | | public | GET | get_public_underlying() | | public | GET | get_public_estimated_price() | | public | GET | get_public_estimated_settlement_info() | | public | GET | get_public_opt_summary() | | public | GET | get_public_position_tiers() | | public | GET | get_public_discount_rate_interest_free_quota() | | public | GET | get_public_interest_rate_loan_quota() | | public | GET | get_public_insurance_fund() | | public | GET | get_public_block_trades() | | public | GET | get_public_convert_contract_coin() | | public | GET | get_public_instrument_tick_bands() | | public | GET | get_public_premium_history() | | public | GET | get_public_option_trades() | | account | GET | get_account_balance() | | account | GET | get_account_instruments() | | account | GET | get_account_subtypes() | | account | GET | get_account_adjust_leverage_info() | | account | GET | get_account_position_risk() | | account | GET | get_account_max_loan() | | account | GET | get_account_max_size() | | account | GET | get_account_max_avail_size() | | account | GET | get_account_trade_fee() | | account | GET | get_account_interest_rate() | | account | GET | get_account_interest_accrued() | | account | GET | get_account_max_withdrawal() | | account | GET | get_account_risk_state() | | account | GET | get_account_interest_limits() | | account | GET | get_account_greeks() | | account | GET | get_account_position_tiers() | | account | GET | get_account_collateral_assets() | | account | GET | get_account_mmp_config() | | account | GET | get_account_move_positions_history() | | account | GET | get_account_precheck_set_delta_neutral() | | account | GET | get_account_bills_history_archive() | | account | GET | get_account_subaccount_balances() | | account | GET | get_account_subaccount_max_withdrawal() | | account | GET | get_account_set_account_switch_precheck() | | account | GET | get_account_spot_borrow_repay_history() | | account | GET | get_account_bills() | | account | POST | post_account_set_leverage() | | account | POST | post_account_set_position_mode() | | account | POST | post_account_set_fee_type() | | account | POST | post_account_set_greeks() | | account | POST | post_account_set_auto_repay() | | account | POST | post_account_set_auto_loan() | | account | POST | post_account_set_account_level() | | account | POST | post_account_set_collateral_assets() | | account | POST | post_account_position_margin_balance() | | account | POST | post_account_spot_manual_borrow_repay() | | account | POST | post_account_account_level_switch_preset() | | account | POST | post_account_mmp_reset() | | account | POST | post_account_mmp_config() | | account | POST | post_account_move_positions() | | asset | GET | get_asset_balances() | | asset | GET | get_asset_deposit_history() | | asset | GET | get_asset_withdrawal_history() | | asset | GET | get_asset_currencies() | | asset | GET | get_asset_non_tradable_assets() | | asset | GET | get_asset_asset_valuation() | | asset | GET | get_asset_bills() | | asset | GET | get_asset_transfer_state() | | asset | GET | get_asset_convert_history() | | asset | POST | post_asset_transfer() | | asset | POST | post_asset_withdrawal() | | asset | POST | post_asset_cancel_withdrawal() | | asset | POST | post_asset_convert_estimate_quote() | | asset | POST | post_asset_convert_trade() | | trade | GET | get_trade_order() | | trade | GET | get_trade_orders_history() | | trade | GET | get_trade_orders_algo_pending() | | trade | GET | get_trade_easy_convert_history() | | trade | GET | get_trade_one_click_repay_history_v2() | | trade | GET | get_trade_account_rate_limit() | | trade | GET | get_trade_fills() | | trade | POST | post_trade_order() | | trade | POST | post_trade_cancel_order() | | trade | POST | post_trade_batch_orders() | | trade | POST | post_trade_cancel_batch_orders() | | trade | POST | post_trade_amend_order() | | trade | POST | post_trade_amend_batch_orders() | | trade | POST | post_trade_order_precheck() | | trade | POST | post_trade_cancel_all_after() | | trade | POST | post_trade_cancel_algos() | | trade | POST | post_trade_amend_algos() | | trade | POST | post_trade_mass_cancel() | | copy trading | GET | get_copy_trade_my_leaders() | | copy trading | GET | get_copy_trade_settings() | | copy trading | GET | get_copy_trade_current_subpos() | | copy trading | GET | get_copy_trade_historical_subpos() | | copy trading | GET | get_copy_trade_instruments() | | copy trading | GET | get_copy_trade_public_config() | | copy trading | GET | get_copy_trade_public_lead_traders() | | copy trading | GET | get_copy_trade_public_copy_traders() | | copy trading | GET | get_copy_trade_public_preference_currency() | | copy trading | GET | get_copy_trade_public_current_subpositions() | | copy trading | GET | get_copy_trade_public_subpositions_history() | | copy trading | GET | get_copy_trade_public_pnl() | | copy trading | GET | get_copy_trade_public_stats() | | copy trading | GET | get_copy_trade_public_weekly_pnl() | | copy trading | GET | get_copy_trade_profit_sharing_details() | | copy trading | GET | get_copy_trade_total_profit_sharing() |

Release notes

See NEWS.md for release history.

Development status

License

MIT

Author

Oliver Zhou Lily Li



Try the okxr package in your browser

Any scripts or data that you put into this service are public.

okxr documentation built on May 8, 2026, 5:09 p.m.