ccxt
Version:
764 lines (762 loc) • 497 kB
JavaScript
// ----------------------------------------------------------------------------
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
// ---------------------------------------------------------------------------
import { sha256 } from '@noble/hashes/sha2.js';
import Exchange from './abstract/bybit.js';
import { TICK_SIZE } from './base/functions/number.js';
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, AccountSuspended, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange, ManualInteractionNeeded, BadSymbol, RestrictedLocation } from './base/errors.js';
import { Precise } from './base/Precise.js';
import { rsa } from './base/functions/rsa.js';
// ---------------------------------------------------------------------------
/**
* @class bybit
* @augments Exchange
*/
export default class bybit extends Exchange {
describe() {
return this.deepExtend(super.describe(), {
'id': 'bybit',
'name': 'Bybit',
'countries': ['VG'], // British Virgin Islands
'version': 'v5',
'userAgent': undefined,
'rateLimit': 20,
'hostname': 'bybit.com', // bybit.com, bytick.com, bybit.nl, bybit.com.hk
'pro': true,
'certified': true,
'has': {
'CORS': true,
'spot': true,
'margin': true,
'swap': true,
'future': true,
'option': true,
'borrowCrossMargin': true,
'cancelAllOrders': true,
'cancelAllOrdersAfter': true,
'cancelOrder': true,
'cancelOrders': true,
'cancelOrdersForSymbols': true,
'closeAllPositions': false,
'closePosition': false,
'createConvertTrade': true,
'createMarketBuyOrderWithCost': true,
'createMarketSellOrderWithCost': true,
'createOrder': true,
'createOrders': true,
'createOrderWithTakeProfitAndStopLoss': true,
'createPostOnlyOrder': true,
'createReduceOnlyOrder': true,
'createStopLimitOrder': true,
'createStopLossOrder': true,
'createStopMarketOrder': true,
'createStopOrder': true,
'createTakeProfitOrder': true,
'createTrailingAmountOrder': true,
'createTriggerOrder': true,
'editOrder': true,
'editOrders': true,
'fetchAllGreeks': true,
'fetchBalance': true,
'fetchBidsAsks': 'emulated',
'fetchBorrowInterest': false, // temporarily disabled, as it doesn't work
'fetchBorrowRateHistories': false,
'fetchBorrowRateHistory': false,
'fetchCanceledAndClosedOrders': true,
'fetchCanceledOrders': true,
'fetchClosedOrder': true,
'fetchClosedOrders': true,
'fetchConvertCurrencies': true,
'fetchConvertQuote': true,
'fetchConvertTrade': true,
'fetchConvertTradeHistory': true,
'fetchCrossBorrowRate': true,
'fetchCrossBorrowRates': false,
'fetchCurrencies': true,
'fetchDeposit': false,
'fetchDepositAddress': true,
'fetchDepositAddresses': false,
'fetchDepositAddressesByNetwork': true,
'fetchDeposits': true,
'fetchDepositWithdrawFee': 'emulated',
'fetchDepositWithdrawFees': true,
'fetchFundingHistory': true,
'fetchFundingRate': 'emulated', // emulated in exchange
'fetchFundingRateHistory': true,
'fetchFundingRates': true,
'fetchGreeks': true,
'fetchIndexOHLCV': true,
'fetchIsolatedBorrowRate': false,
'fetchIsolatedBorrowRates': false,
'fetchLedger': true,
'fetchLeverage': true,
'fetchLeverageTiers': true,
'fetchLongShortRatio': false,
'fetchLongShortRatioHistory': true,
'fetchMarginAdjustmentHistory': false,
'fetchMarginMode': true,
'fetchMarketLeverageTiers': true,
'fetchMarkets': true,
'fetchMarkOHLCV': true,
'fetchMyLiquidations': true,
'fetchMySettlementHistory': true,
'fetchMyTrades': true,
'fetchOHLCV': true,
'fetchOpenInterest': true,
'fetchOpenInterestHistory': true,
'fetchOpenOrder': true,
'fetchOpenOrders': true,
'fetchOption': true,
'fetchOptionChain': true,
'fetchOrder': true,
'fetchOrderBook': true,
'fetchOrders': false,
'fetchOrderTrades': true,
'fetchPosition': true,
'fetchPositionADLRank': true,
'fetchPositionHistory': 'emulated',
'fetchPositions': true,
'fetchPositionsADLRank': true,
'fetchPositionsHistory': true,
'fetchPremiumIndexOHLCV': true,
'fetchSettlementHistory': true,
'fetchStatus': true,
'fetchTicker': true,
'fetchTickers': true,
'fetchTime': true,
'fetchTrades': true,
'fetchTradingFee': true,
'fetchTradingFees': true,
'fetchTransactions': false,
'fetchTransfers': true,
'fetchUnderlyingAssets': false,
'fetchVolatilityHistory': true,
'fetchWithdrawals': true,
'repayCrossMargin': true,
'sandbox': true,
'setLeverage': true,
'setMarginMode': true,
'setPositionMode': true,
'transfer': true,
'withdraw': true,
},
'timeframes': {
'1m': '1',
'3m': '3',
'5m': '5',
'15m': '15',
'30m': '30',
'1h': '60',
'2h': '120',
'4h': '240',
'6h': '360',
'12h': '720',
'1d': 'D',
'1w': 'W',
'1M': 'M',
},
'urls': {
'test': {
'spot': 'https://api-testnet.{hostname}',
'futures': 'https://api-testnet.{hostname}',
'v2': 'https://api-testnet.{hostname}',
'public': 'https://api-testnet.{hostname}',
'private': 'https://api-testnet.{hostname}',
},
'logo': 'https://github.com/user-attachments/assets/97a5d0b3-de10-423d-90e1-6620960025ed',
'api': {
'spot': 'https://api.{hostname}',
'futures': 'https://api.{hostname}',
'v2': 'https://api.{hostname}',
'public': 'https://api.{hostname}',
'private': 'https://api.{hostname}',
},
'demotrading': {
'spot': 'https://api-demo.{hostname}',
'futures': 'https://api-demo.{hostname}',
'v2': 'https://api-demo.{hostname}',
'public': 'https://api-demo.{hostname}',
'private': 'https://api-demo.{hostname}',
},
'www': 'https://www.bybit.com',
'doc': [
'https://bybit-exchange.github.io/docs/inverse/',
'https://bybit-exchange.github.io/docs/linear/',
'https://github.com/bybit-exchange',
],
'fees': 'https://help.bybit.com/hc/en-us/articles/360039261154',
'referral': 'https://www.bybit.com/invite?ref=XDK12WP',
},
'api': {
'public': {
'get': {
// spot
'spot/v3/public/symbols': 1,
'spot/v3/public/quote/depth': 1,
'spot/v3/public/quote/depth/merged': 1,
'spot/v3/public/quote/trades': 1,
'spot/v3/public/quote/kline': 1,
'spot/v3/public/quote/ticker/24hr': 1,
'spot/v3/public/quote/ticker/price': 1,
'spot/v3/public/quote/ticker/bookTicker': 1,
'spot/v3/public/server-time': 1,
'spot/v3/public/infos': 1,
'spot/v3/public/margin-product-infos': 1,
'spot/v3/public/margin-ensure-tokens': 1,
// data
'v3/public/time': 1,
'contract/v3/public/copytrading/symbol/list': 1,
// derivative
'derivatives/v3/public/order-book/L2': 1,
'derivatives/v3/public/kline': 1,
'derivatives/v3/public/tickers': 1,
'derivatives/v3/public/instruments-info': 1,
'derivatives/v3/public/mark-price-kline': 1,
'derivatives/v3/public/index-price-kline': 1,
'derivatives/v3/public/funding/history-funding-rate': 1,
'derivatives/v3/public/risk-limit/list': 1,
'derivatives/v3/public/delivery-price': 1,
'derivatives/v3/public/recent-trade': 1,
'derivatives/v3/public/open-interest': 1,
'derivatives/v3/public/insurance': 1,
// v5
'v5/announcements/index': 5, // 10/s = 1000 / (20 * 5)
'v5/system/status': 5,
// market
'v5/market/time': 5,
'v5/market/kline': 5,
'v5/market/mark-price-kline': 5,
'v5/market/index-price-kline': 5,
'v5/market/premium-index-price-kline': 5,
'v5/market/instruments-info': 5,
'v5/market/orderbook': 5,
'v5/market/rpi_orderbook': 5,
'v5/market/full_orderbook': 5,
'v5/market/tickers': 5,
'v5/market/funding/history': 5,
'v5/market/recent-trade': 5,
'v5/market/open-interest': 5,
'v5/market/historical-volatility': 5,
'v5/market/insurance': 5,
'v5/market/risk-limit': 5,
'v5/market/delivery-price': 5,
'v5/market/new-delivery-price': 5,
'v5/market/account-ratio': 5,
'v5/market/index-price-components': 5,
'v5/market/price-limit': 5,
'v5/market/adlAlert': 5,
'v5/market/fee-group-info': 5,
// spot leverage token
'v5/spot-lever-token/info': 5,
'v5/spot-lever-token/reference': 5,
// spot margin trade
'v5/spot-margin-trade/data': 5,
'v5/spot-margin-trade/collateral': 5,
'v5/spot-cross-margin-trade/data': 5,
'v5/spot-cross-margin-trade/pledge-token': 5,
'v5/spot-cross-margin-trade/borrow-token': 5,
// crypto loan
'v5/crypto-loan/collateral-data': 5,
'v5/crypto-loan/loanable-data': 5,
// crypto loan (new)
'v5/crypto-loan-common/loanable-data': 5,
'v5/crypto-loan-common/collateral-data': 5,
'v5/crypto-loan-fixed/supply-order-quote': 5,
'v5/crypto-loan-fixed/borrow-order-quote': 5,
// institutional lending
'v5/ins-loan/product-infos': 5,
'v5/ins-loan/ensure-tokens-convert': 5,
// earn
'v5/earn/product': 5,
},
},
'private': {
'get': {
'v5/market/instruments-info': 5,
// Legacy inverse swap
'v2/private/wallet/fund/records': 25, // 120 per minute = 2 per second => cost = 50 / 2 = 25
// spot
'spot/v3/private/order': 2.5,
'spot/v3/private/open-orders': 2.5,
'spot/v3/private/history-orders': 2.5,
'spot/v3/private/my-trades': 2.5,
'spot/v3/private/account': 2.5,
'spot/v3/private/reference': 2.5,
'spot/v3/private/record': 2.5,
'spot/v3/private/cross-margin-orders': 10,
'spot/v3/private/cross-margin-account': 10,
'spot/v3/private/cross-margin-loan-info': 10,
'spot/v3/private/cross-margin-repay-history': 10,
'spot/v3/private/margin-loan-infos': 10,
'spot/v3/private/margin-repaid-infos': 10,
'spot/v3/private/margin-ltv': 10,
// account
'asset/v3/private/transfer/inter-transfer/list/query': 50, // 60 per minute = 1 per second => cost = 50 / 1 = 50
'asset/v3/private/transfer/sub-member/list/query': 50,
'asset/v3/private/transfer/sub-member-transfer/list/query': 50,
'asset/v3/private/transfer/universal-transfer/list/query': 25,
'asset/v3/private/coin-info/query': 25, // 2/s
'asset/v3/private/deposit/address/query': 10,
'contract/v3/private/copytrading/order/list': 30, // 100 req/min = 1000 / (20 * 30) = 1.66666666667/s
'contract/v3/private/copytrading/position/list': 40, // 75 req/min = 1000 / (20 * 40) = 1.25/s
'contract/v3/private/copytrading/wallet/balance': 25, // 120 req/min = 1000 / (20 * 25) = 2/s
'contract/v3/private/position/limit-info': 25, // 120 per minute = 2 per second => cost = 50 / 2 = 25
'contract/v3/private/order/unfilled-orders': 1,
'contract/v3/private/order/list': 1,
'contract/v3/private/position/list': 1,
'contract/v3/private/execution/list': 1,
'contract/v3/private/position/closed-pnl': 1,
'contract/v3/private/account/wallet/balance': 1,
'contract/v3/private/account/fee-rate': 1,
'contract/v3/private/account/wallet/fund-records': 1,
// derivative
'unified/v3/private/order/unfilled-orders': 1,
'unified/v3/private/order/list': 1,
'unified/v3/private/position/list': 1,
'unified/v3/private/execution/list': 1,
'unified/v3/private/delivery-record': 1,
'unified/v3/private/settlement-record': 1,
'unified/v3/private/account/wallet/balance': 1,
'unified/v3/private/account/transaction-log': 1,
'unified/v3/private/account/borrow-history': 1,
'unified/v3/private/account/borrow-rate': 1,
'unified/v3/private/account/info': 1,
'user/v3/private/frozen-sub-member': 10, // 5/s
'user/v3/private/query-sub-members': 5, // 10/s
'user/v3/private/query-api': 5, // 10/s
'user/v3/private/get-member-type': 1,
'asset/v3/private/transfer/transfer-coin/list/query': 50,
'asset/v3/private/transfer/account-coin/balance/query': 50,
'asset/v3/private/transfer/account-coins/balance/query': 25,
'asset/v3/private/transfer/asset-info/query': 50,
'asset/v3/public/deposit/allowed-deposit-list/query': 0.17, // 300/s
'asset/v3/private/deposit/record/query': 10,
'asset/v3/private/withdraw/record/query': 10,
// v5
// trade
'v5/order/realtime': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/history': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/spot-borrow-check': 1, // 50/s = 1000 / (20 * 1)
// position
'v5/position/list': 5, // 10/s => cost = 50 / 10 = 5
'v5/execution/list': 5, // 10/s => cost = 50 / 10 = 5
'v5/position/closed-pnl': 5, // 10/s => cost = 50 / 10 = 5
'v5/position/get-closed-positions': 5,
'v5/position/move-history': 5, // 10/s => cost = 50 / 10 = 5
'v5/position/symbol-info': 5,
// pre-upgrade
'v5/pre-upgrade/order/history': 5,
'v5/pre-upgrade/execution/list': 5,
'v5/pre-upgrade/position/closed-pnl': 5,
'v5/pre-upgrade/account/transaction-log': 5,
'v5/pre-upgrade/asset/delivery-record': 5,
'v5/pre-upgrade/asset/settlement-record': 5,
// account
'v5/account/wallet-balance': 1,
'v5/account/borrow-history': 1,
'v5/account/instruments-info': 1,
'v5/account/collateral-info': 1,
'v5/account/option-asset-info': 1,
'v5/asset/coin-greeks': 1,
'v5/account/fee-rate': 10, // 5/s = 1000 / (20 * 10)
'v5/account/info': 5,
'v5/account/transaction-log': 1.66, // 30/s = 50 / 30
'v5/account/contract-transaction-log': 1, // deprecated
'v5/account/query-dcp-info': 5,
'v5/account/user-setting-config': 5,
'v5/account/pay-info': 5,
'v5/account/trade-info-for-analysis': 5,
'v5/account/smp-group': 1,
'v5/account/mmp-state': 5,
'v5/account/withdrawal': 5,
// asset
'v5/asset/asset-overview': 5,
'v5/asset/exchange/query-coin-list': 0.5, // 100/s => cost = 50 / 100 = 0.5
'v5/asset/exchange/convert-result-query': 0.5, // 100/s => cost = 50 / 100 = 0.5
'v5/asset/exchange/query-convert-history': 0.5, // 100/s => cost = 50 / 100 = 0.5
'v5/asset/exchange/order-record': 5, // 10/s => cost = 50 / 10 = 5
'v5/asset/fundinghistory': 5,
'v5/asset/portfolio-margin': 5,
'v5/asset/total-members-assets': 5,
'v5/asset/delivery-record': 5,
'v5/asset/settlement-record': 5,
'v5/asset/transfer/query-asset-info': 50, // deprecated, 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/query-account-coins-balance': 25, // 2/s => cost = 50 / 2 = 25
'v5/asset/transfer/query-account-coin-balance': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/query-transfer-coin-list': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/query-inter-transfer-list': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/query-sub-member-list': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/query-universal-transfer-list': 25, // 2/s => cost = 50 / 2 = 25
'v5/asset/deposit/query-allowed-list': 5,
'v5/asset/deposit/query-record': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/deposit/query-sub-member-record': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/deposit/query-internal-record': 5,
'v5/asset/deposit/query-address': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/deposit/query-sub-member-address': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/coin/query-info': 28, // should be 25 but exceeds ratelimit unless the weight is 28 or higher
'v5/asset/withdraw/query-address': 10,
'v5/asset/withdraw/query-record': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/withdraw/withdrawable-amount': 5,
'v5/asset/withdraw/vasp/list': 5,
'v5/asset/covert/small-balance-list': 5, // 10/s => cost = 50 / 10 = 5
'v5/asset/covert/small-balance-history': 5, // 10/s => cost = 50 / 10 = 5
'v5/asset/convert/small-balance-list': 5, // 10/s => cost = 50 / 10 = 5
'v5/asset/convert/small-balance-history': 5, // 10/s => cost = 50 / 10 = 5
'v5/fiat/query-coin-list': 5,
'v5/fiat/reference-price': 5,
'v5/fiat/trade-query': 5,
'v5/fiat/query-trade-history': 5,
'v5/fiat/balance-query': 5,
// user
'v5/user/query-sub-members': 5, // 10/s => cost = 50 / 10 = 5
'v5/user/query-api': 5, // 10/s => cost = 50 / 10 = 5
'v5/user/sub-apikeys': 5,
'v5/user/get-member-type': 5,
'v5/user/aff-customer-info': 5,
'v5/user/del-submember': 5,
'v5/user/submembers': 5,
'v5/user/escrow_sub_members': 5,
'v5/user/invitation/referrals': 5,
// affilate
'v5/affiliate/aff-user-list': 5,
'v5/affiliate/affiliate-sub-list': 5,
// spot leverage token
'v5/spot-lever-token/order-record': 1, // 50/s => cost = 50 / 50 = 1
// spot margin trade
'v5/spot-margin-trade/interest-rate-history': 5,
'v5/spot-margin-trade/state': 5,
'v5/spot-margin-trade/max-borrowable': 5,
'v5/spot-margin-trade/position-tiers': 5,
'v5/spot-margin-trade/coinstate': 5,
'v5/spot-margin-trade/currency-data': 5,
'v5/spot-margin-trade/fixedborrow-contract-info': 5,
'v5/spot-margin-trade/fixedborrow-order-info': 5,
'v5/spot-margin-trade/fixedborrow-order-quote': 5,
'v5/spot-margin-trade/liability': 5,
'v5/spot-margin-trade/repayment-available-amount': 5,
'v5/spot-margin-trade/get-auto-repay-mode': 5,
'v5/spot-cross-margin-trade/loan-info': 1, // 50/s => cost = 50 / 50 = 1
'v5/spot-cross-margin-trade/account': 1, // 50/s => cost = 50 / 50 = 1
'v5/spot-cross-margin-trade/orders': 1, // 50/s => cost = 50 / 50 = 1
'v5/spot-cross-margin-trade/repay-history': 1, // 50/s => cost = 50 / 50 = 1
// crypto loan
'v5/crypto-loan/borrowable-collateralisable-number': 5,
'v5/crypto-loan/ongoing-orders': 5,
'v5/crypto-loan/repayment-history': 5,
'v5/crypto-loan/borrow-history': 5,
'v5/crypto-loan/max-collateral-amount': 5,
'v5/crypto-loan/adjustment-history': 5,
// crypto loan (new)
'v5/crypto-loan-common/max-collateral-amount': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-common/adjustment-history': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-common/position': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-flexible/ongoing-coin': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-flexible/borrow-history': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-flexible/repayment-history': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/borrow-contract-info': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/supply-contract-info': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/borrow-order-info': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/renew-info': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/supply-order-info': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-fixed/repayment-history': 10, // 5/s => cost = 50 / 5 = 10
// institutional lending
'v5/ins-loan/product-infos': 5,
'v5/ins-loan/ensure-tokens': 5, // deprecated
'v5/ins-loan/ensure-tokens-convert': 5,
'v5/ins-loan/loan-order': 5,
'v5/ins-loan/repaid-history': 5,
'v5/ins-loan/ltv': 5, // deprecated
'v5/ins-loan/ltv-convert': 5,
'v5/ins-loan/coin-delta-amount': 5,
// c2c lending
'v5/lending/info': 5, // deprecated
'v5/lending/history-order': 5, // deprecated
'v5/lending/account': 5, // deprecated
// broker
'v5/broker/earning-record': 5, // deprecated
'v5/broker/earnings-info': 5,
'v5/broker/account-info': 5,
'v5/broker/asset/query-sub-member-deposit-record': 10,
// earn
'v5/earn/product': 5,
'v5/earn/order': 5,
'v5/earn/position': 5,
'v5/earn/yield': 5,
'v5/earn/hourly-yield': 5,
},
'post': {
// spot
'spot/v3/private/order': 2.5,
'spot/v3/private/cancel-order': 2.5,
'spot/v3/private/cancel-orders': 2.5,
'spot/v3/private/cancel-orders-by-ids': 2.5,
'spot/v3/private/purchase': 2.5,
'spot/v3/private/redeem': 2.5,
'spot/v3/private/cross-margin-loan': 10,
'spot/v3/private/cross-margin-repay': 10,
// account
'asset/v3/private/transfer/inter-transfer': 150, // 20 per minute = 0.333 per second => cost = 50 / 0.3333 = 150
'asset/v3/private/withdraw/create': 300,
'asset/v3/private/withdraw/cancel': 50,
'asset/v3/private/transfer/sub-member-transfer': 150,
'asset/v3/private/transfer/transfer-sub-member-save': 150,
'asset/v3/private/transfer/universal-transfer': 10, // 5/s
'user/v3/private/create-sub-member': 10, // 5/s
'user/v3/private/create-sub-api': 10, // 5/s
'user/v3/private/update-api': 10, // 5/s
'user/v3/private/delete-api': 10, // 5/s
'user/v3/private/update-sub-api': 10, // 5/s
'user/v3/private/delete-sub-api': 10, // 5/s
// contract
'contract/v3/private/copytrading/order/create': 30, // 100 req/min = 1000 / (20 * 30) = 1.66666666667/s
'contract/v3/private/copytrading/order/cancel': 30,
'contract/v3/private/copytrading/order/close': 30,
'contract/v3/private/copytrading/position/close': 40, // 75 req/min = 1000 / (20 * 40) = 1.25/s
'contract/v3/private/copytrading/position/set-leverage': 40,
'contract/v3/private/copytrading/wallet/transfer': 25, // 120 req/min = 1000 / (20 * 25) = 2/s
'contract/v3/private/copytrading/order/trading-stop': 2.5,
'contract/v3/private/order/create': 1,
'contract/v3/private/order/cancel': 1,
'contract/v3/private/order/cancel-all': 1,
'contract/v3/private/order/replace': 1,
'contract/v3/private/position/set-auto-add-margin': 1,
'contract/v3/private/position/switch-isolated': 1,
'contract/v3/private/position/switch-mode': 1,
'contract/v3/private/position/switch-tpsl-mode': 1,
'contract/v3/private/position/set-leverage': 1,
'contract/v3/private/position/trading-stop': 1,
'contract/v3/private/position/set-risk-limit': 1,
'contract/v3/private/account/setMarginMode': 1,
// derivative
'unified/v3/private/order/create': 30, // 100 req/min (shared) = 1000 / (20 * 30) = 1.66666666667/s
'unified/v3/private/order/replace': 30,
'unified/v3/private/order/cancel': 30,
'unified/v3/private/order/create-batch': 30,
'unified/v3/private/order/replace-batch': 30,
'unified/v3/private/order/cancel-batch': 30,
'unified/v3/private/order/cancel-all': 30,
'unified/v3/private/position/set-leverage': 2.5,
'unified/v3/private/position/tpsl/switch-mode': 2.5,
'unified/v3/private/position/set-risk-limit': 2.5,
'unified/v3/private/position/trading-stop': 2.5,
'unified/v3/private/account/upgrade-unified-account': 2.5,
'unified/v3/private/account/setMarginMode': 2.5,
// tax
'fht/compliance/tax/v3/private/registertime': 50,
'fht/compliance/tax/v3/private/create': 50,
'fht/compliance/tax/v3/private/status': 50,
'fht/compliance/tax/v3/private/url': 50,
// v5
// trade
'v5/order/create': 2.5, // 20/s = 1000 / (20 * 2.5)
'v5/order/amend': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/cancel': 2.5,
'v5/order/cancel-all': 50, // 1/s = 1000 / (20 * 50)
'v5/order/create-batch': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/amend-batch': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/cancel-batch': 5, // 10/s => cost = 50 / 10 = 5
'v5/order/disconnected-cancel-all': 5,
'v5/order/pre-check': 5,
// position
'v5/position/set-leverage': 5, // 10/s => cost = 50 / 10 = 5
'v5/position/switch-isolated': 5, // deprecated
'v5/position/set-tpsl-mode': 5, // deprecated, 10/s => cost = 50 / 10 = 5
'v5/position/switch-mode': 5,
'v5/position/set-risk-limit': 5, // deprecated, 10/s => cost = 50 / 10 = 5
'v5/position/trading-stop': 5, // 10/s => cost = 50 / 10 = 5
'v5/position/set-auto-add-margin': 5,
'v5/position/add-margin': 5,
'v5/position/move-positions': 5,
'v5/position/confirm-pending-mmr': 5,
// account
'v5/account/upgrade-to-uta': 5,
'v5/account/quick-repayment': 5,
'v5/account/set-margin-mode': 5,
'v5/account/set-hedging-mode': 5,
'v5/account/mmp-modify': 5,
'v5/account/mmp-reset': 5,
'v5/account/borrow': 5,
'v5/account/repay': 5,
'v5/account/no-convert-repay': 5,
'v5/account/set-limit-px-action': 5,
'v5/account/set-delta-mode': 5,
// asset
'v5/asset/exchange/quote-apply': 1, // 50/s
'v5/asset/exchange/convert-execute': 1, // 50/s
'v5/asset/transfer/inter-transfer': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/transfer/save-transfer-sub-member': 150, // deprecated, 1/3/s => cost = 50 / 1/3 = 150
'v5/asset/transfer/universal-transfer': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/deposit/deposit-to-account': 5,
'v5/asset/travel-rule/deposit/submit': 5,
'v5/asset/withdraw/create': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/withdraw/cancel': 50, // 1/s => cost = 50 / 1 = 50
'v5/asset/covert/get-quote': 10, // 5/s => cost = 50 / 5 = 10
'v5/asset/covert/small-balance-execute': 10, // 5/s => cost = 50 / 5 = 10
'v5/fiat/quote-apply': 10,
'v5/fiat/trade-execute': 10,
// user
'v5/user/create-sub-member': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/create-sub-api': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/frozen-sub-member': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/update-api': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/update-sub-api': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/delete-api': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/delete-sub-api': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/agreement': 10, // 5/s => cost = 50 / 5 = 10
'v5/user/create-demo-member': 10, // 5/s => cost = 50 / 5 = 10
// spot leverage token
'v5/spot-lever-token/purchase': 2.5, // 20/s => cost = 50 / 20 = 2.5
'v5/spot-lever-token/redeem': 2.5, // 20/s => cost = 50 / 20 = 2.5
// spot margin trade
'v5/spot-margin-trade/switch-mode': 5,
'v5/spot-margin-trade/set-leverage': 5,
'v5/spot-margin-trade/set-auto-repay-mode': 5,
'v5/spot-margin-trade/fixedborrow': 5,
'v5/spot-margin-trade/fixedborrow-renew': 5,
'v5/spot-cross-margin-trade/loan': 2.5, // 20/s => cost = 50 / 20 = 2.5
'v5/spot-cross-margin-trade/repay': 2.5, // 20/s => cost = 50 / 20 = 2.5
'v5/spot-cross-margin-trade/switch': 2.5, // 20/s => cost = 50 / 20 = 2.5
// crypto loan
'v5/crypto-loan/borrow': 5,
'v5/crypto-loan/repay': 5,
'v5/crypto-loan/adjust-ltv': 5,
// crypto loan (new)
'v5/crypto-loan-common/adjust-ltv': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-common/max-loan': 10, // 5/s => cost = 50 / 5 = 10
'v5/crypto-loan-flexible/borrow': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-flexible/repay': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-flexible/repay-collateral': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/borrow': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/renew': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/supply': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/borrow-order-cancel': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/supply-order-cancel': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/fully-repay': 50, // 1/s => cost = 50 / 1 = 50
'v5/crypto-loan-fixed/repay-collateral': 50, // 1/s => cost = 50 / 1 = 50
// institutional lending
'v5/ins-loan/association-uid': 5,
'v5/ins-loan/repay-loan': 5,
// c2c lending
'v5/lending/purchase': 5, // deprecated
'v5/lending/redeem': 5, // deprecated
'v5/lending/redeem-cancel': 5, // deprecated
'v5/account/set-collateral-switch': 5,
'v5/account/set-collateral-switch-batch': 5,
// demo trading
'v5/account/demo-apply-money': 5,
// broker
'v5/broker/award/info': 5,
'v5/broker/award/distribute-award': 5,
'v5/broker/award/distribution-record': 5,
// earn
'v5/earn/place-order': 5,
},
},
},
'httpExceptions': {
'403': RateLimitExceeded, // Forbidden -- You request too many times
},
'exceptions': {
// Uncodumented explanation of error strings:
// - oc_diff: order cost needed to place this order
// - new_oc: total order cost of open orders including the order you are trying to open
// - ob: order balance - the total cost of current open orders
// - ab: available balance
'exact': {
'-10009': BadRequest, // {"ret_code":-10009,"ret_msg":"Invalid period!","result":null,"token":null}
'-1004': BadRequest, // {"ret_code":-1004,"ret_msg":"Missing required parameter \u0027symbol\u0027","ext_code":null,"ext_info":null,"result":null}
'-1021': BadRequest, // {"ret_code":-1021,"ret_msg":"Timestamp for this request is outside of the recvWindow.","ext_code":null,"ext_info":null,"result":null}
'-1103': BadRequest, // An unknown parameter was sent.
'-1140': InvalidOrder, // {"ret_code":-1140,"ret_msg":"Transaction amount lower than the minimum.","result":{},"ext_code":"","ext_info":null,"time_now":"1659204910.248576"}
'-1197': InvalidOrder, // {"ret_code":-1197,"ret_msg":"Your order quantity to buy is too large. The filled price may deviate significantly from the market price. Please try again","result":{},"ext_code":"","ext_info":null,"time_now":"1659204531.979680"}
'-2013': InvalidOrder, // {"ret_code":-2013,"ret_msg":"Order does not exist.","ext_code":null,"ext_info":null,"result":null}
'-2015': AuthenticationError, // Invalid API-key, IP, or permissions for action.
'-6017': BadRequest, // Repayment amount has exceeded the total liability
'-6025': BadRequest, // Amount to borrow cannot be lower than the min. amount to borrow (per transaction)
'-6029': BadRequest, // Amount to borrow has exceeded the user's estimated max amount to borrow
'5004': ExchangeError, // {"retCode":5004,"retMsg":"Server Timeout","result":null,"retExtInfo":{},"time":1667577060106}
'7001': BadRequest, // {"retCode":7001,"retMsg":"request params type error"}
'10001': BadRequest, // parameter error
'10002': InvalidNonce, // request expired, check your timestamp and recv_window
'10003': AuthenticationError, // Invalid apikey
'10004': AuthenticationError, // invalid sign
'10005': PermissionDenied, // permission denied for current apikey
'10006': RateLimitExceeded, // too many requests
'10007': AuthenticationError, // api_key not found in your request parameters
'10008': AccountSuspended, // User had been banned
'10009': AuthenticationError, // IP had been banned
'10010': PermissionDenied, // request ip mismatch
'10014': BadRequest, // Request is duplicate
'10016': ExchangeError, // {"retCode":10016,"retMsg":"System error. Please try again later."}
'10017': BadRequest, // request path not found or request method is invalid
'10018': RateLimitExceeded, // exceed ip rate limit
'10020': PermissionDenied, // {"retCode":10020,"retMsg":"your account is not a unified margin account, please update your account","result":null,"retExtInfo":null,"time":1664783731123}
'10024': PermissionDenied, // Compliance rules triggered
'10027': PermissionDenied, // Trading Banned
'10028': PermissionDenied, // The API can only be accessed by unified account users.
'10029': PermissionDenied, // The requested symbol is invalid, please check symbol whitelist
'12137': InvalidOrder, // {"retCode":12137,"retMsg":"Order quantity has too many decimals.","result":{},"retExtInfo":{},"time":1695900943033}
'12201': BadRequest, // {"retCode":12201,"retMsg":"Invalid orderCategory parameter.","result":{},"retExtInfo":null,"time":1666699391220}
'12141': BadRequest, // "retCode":12141,"retMsg":"Duplicate clientOrderId.","result":{},"retExtInfo":{},"time":1686134298989}
'100028': PermissionDenied, // The API cannot be accessed by unified account users.
'110001': OrderNotFound, // Order does not exist
'110003': InvalidOrder, // Order price is out of permissible range
'110004': InsufficientFunds, // Insufficient wallet balance
'110005': InvalidOrder, // position status
'110006': InsufficientFunds, // cannot afford estimated position_margin
'110007': InsufficientFunds, // {"retCode":110007,"retMsg":"ab not enough for new order","result":{},"retExtInfo":{},"time":1668838414793}
'110008': InvalidOrder, // Order has been finished or canceled
'110009': InvalidOrder, // The number of stop orders exceeds maximum limit allowed
'110010': InvalidOrder, // Order already cancelled
'110011': InvalidOrder, // Any adjustments made will trigger immediate liquidation
'110012': InsufficientFunds, // Available balance not enough
'110013': BadRequest, // Due to risk limit, cannot set leverage
'110014': InsufficientFunds, // Available balance not enough to add margin
'110015': BadRequest, // the position is in cross_margin
'110016': InvalidOrder, // Requested quantity of contracts exceeds risk limit, please adjust your risk limit level before trying again
'110017': InvalidOrder, // Reduce-only rule not satisfied
'110018': BadRequest, // userId illegal
'110019': InvalidOrder, // orderId illegal
'110020': InvalidOrder, // number of active orders greater than 500
'110021': InvalidOrder, // Open Interest exceeded
'110022': InvalidOrder, // qty has been limited, cannot modify the order to add qty
'110023': InvalidOrder, // This contract only supports position reduction operation, please contact customer service for details
'110024': BadRequest, // You have an existing position, so position mode cannot be switched
'110025': NoChange, // Position mode is not modified
'110026': MarginModeAlreadySet, // Cross/isolated margin mode is not modified
'110027': NoChange, // Margin is not modified
'110028': BadRequest, // Open orders exist, so you cannot change position mode
'110029': BadRequest, // Hedge mode is not available for this symbol
'110030': InvalidOrder, // Duplicate orderId
'110031': InvalidOrder, // risk limit info does not exists
'110032': InvalidOrder, // Illegal order
'110033': InvalidOrder, // Margin cannot be set without open position
'110034': InvalidOrder, // There is no net position
'110035': InvalidOrder, // Cancel order is not completed before liquidation
'110036': InvalidOrder, // Cross margin mode is not allowed to change leverage
'110037': InvalidOrder, // User setting list does not have this symbol
'110038': InvalidOrder, // Portfolio margin mode is not allowed to change leverage
'110039': InvalidOrder, // Maintain margin rate is too high, which may trigger liquidation
'110040': InvalidOrder, // Order will trigger forced liquidation, please resubmit the order
'110041': InvalidOrder, // Skip liquidation is not allowed when a position or maker order exists
'110042': InvalidOrder, // Pre-delivery status can only reduce positions
'110043': BadRequest, // Set leverage not modified
'110044': InsufficientFunds, // Insufficient available margin
'110045': InsufficientFunds, // Insufficient wallet balance
'110046': BadRequest, // Any adjustments made will trigger immediate liquidation
'110047': BadRequest, // Risk limit cannot be adjusted due to insufficient available margin
'110048': BadRequest, // Risk limit cannot be adjusted as the current/expected position value held exceeds the revised risk limit
'110049': BadRequest, // Tick notes can only be numbers
'110050': BadRequest, // Coin is not in the range of selected
'110051': InsufficientFunds, // The user's available balance cannot cover the lowest price of the current market
'110052': InsufficientFunds, // User's available balance is insufficient to set a price
'110053': InsufficientFunds, // The user's available balance cannot cover the current market price and upper limit price
'110054': InvalidOrder, // This position has at least one take profit link order, so the take profit and stop loss mode cannot be switched
'110055': InvalidOrder, // This position has at least one stop loss link order, so the take profit and stop loss mode cannot be switched
'110056': InvalidOrder, // This position has at least one trailing stop link order, so the take profit and stop loss mode cannot be switched
'110057': InvalidOrder, // Conditional order or limit order contains TP/SL related params
'110058': InvalidOrder, // Insufficient number of remaining position size to set take profit and stop loss
'110059': InvalidOrder, // In the case of partial filled of the open order, it is not allowed to modify the take profit and stop loss settings of the open order
'110060': BadRequest, // Under full TP/SL mode, it i