www.okx.com
Open in
urlscan Pro
2606:4700:4400::6812:2bae
Public Scan
URL:
https://www.okx.com/docs-v5/en/
Submission: On October 05 via api from US — Scanned from US
Submission: On October 05 via api from US — Scanned from US
Form analysis
0 forms found in the DOMText Content
NAV * API * Broker * Best Practice * Change Log API Broker Best Practice Change Log 中文 HTTP Python * Overview * API Resources and Support * Tutorials * Python libraries * Customer service * V5 API Key Creation * REST Authentication * Making Requests * Signature * WebSocket * Overview * Connect * Connection count limit * Login * Subscribe * Unsubscribe * Account mode * Production Trading Services * Demo Trading Services * Demo Trading Explorer * General Info * Transaction Timeouts * REST API * WebSocket * Rate Limits * Trading-related APIs * Sub-account rate limit * Fill ratio based sub-account rate limit * Best practices * Market Maker Program * Broker Program * Trading Account * REST API * Get instruments * Get balance * Get positions * Get positions history * Get account and position risk * Get bills details (last 7 days) * Get bills details (last 3 months) * Apply bills details (since 2021) * Get bills details (since 2021) * Get account configuration * Set position mode * Set leverage * Get maximum order quantity * Get maximum available balance/equity * Increase/decrease margin * Get leverage * Get leverage estimated info * Get the maximum loan of instrument * Get fee rates * Get interest accrued data * Get interest rate * Set greeks (PA/BS) * Isolated margin trading settings * Get maximum withdrawals * Get account risk state * Manual borrow and repay in Quick Margin Mode * Get borrow and repay history in Quick Margin Mode * VIP loans borrow and repay * Get borrow and repay history for VIP loans * Get VIP interest accrued data * Get VIP interest deducted data * Get VIP loan order list * Get VIP loan order detail * Get borrow interest and limit * Get fixed loan borrow limit * Get fixed loan borrow quote * Place fixed loan borrowing order * Amend fixed loan borrowing order * Manual renew fixed loan borrowing order * Repay fixed loan borrowing order * Convert fixed loan to market loan * Reduce liabilities for fixed loan * Get fixed loan borrow order list * Position builder (new) * Set risk offset amount * Get Greeks * Get PM position limitation * Set risk offset type * Activate option * Set auto loan * Set account mode * Reset MMP Status * Set MMP * GET MMP Config * WebSocket * Account channel * Positions channel * Balance and position channel * Position risk warning * Account greeks channel * Order Book Trading * Trade * POST / Place order * POST / Place multiple orders * POST / Cancel order * POST / Cancel multiple orders * POST / Amend order * POST / Amend multiple orders * POST / Close positions * GET / Order details * GET / Order List * GET / Order history (last 7 days) * GET / Order history (last 3 months) * GET / Transaction details (last 3 days) * GET / Transaction details (last 3 months) * GET / Easy convert currency list * POST / Place easy convert * GET / Easy convert history * GET / One-click repay currency list * POST / Trade one-click repay * GET / One-click repay history * POST / Mass cancel order * POST / Cancel All After * GET / Account rate limit * POST / Order precheck * WS / Order channel * WS / Fills channel * WS / Place order * WS / Place multiple orders * WS / Cancel order * WS / Cancel multiple orders * WS / Amend order * WS / Amend multiple orders * WS / Mass cancel order * Algo Trading * POST / Place algo order * POST / Cancel algo order * POST / Amend algo order * POST / Cancel advance algo order * GET / Algo order details * GET / Algo order list * GET / Algo order history * WS / Algo orders channel * WS / Advance algo orders channel * Grid Trading * POST / Place grid algo order * POST / Amend grid algo order * POST / Stop grid algo order * POST / Close position for contract grid * POST / Cancel close position order for contract grid * POST / Instant trigger grid algo order * GET / Grid algo order list * GET / Grid algo order history * GET / Grid algo order details * GET / Grid algo sub orders * GET / Grid algo order positions * POST / Spot grid withdraw income * POST / Compute margin balance * POST / Adjust margin balance * POST / Add investment * GET / Grid AI parameter (public) * POST / Compute min investment (public) * GET / RSI back testing (public) * GET / Max grid quantity (public) * WS / Spot grid algo orders channel * WS / Contract grid algo orders channel * WS / Grid positions channel * WS / Grid sub orders channel * Signal bot trading * POST / Create signal * GET / Signals * POST / Create signal bot * POST / Cancel signal bots * POST / Adjust margin balance * POST / Amend TPSL * POST / Set instruments * GET / Signal bot order details * GET / Active signal bot * GET / Signal bot history * GET / Signal bot order positions * GET / Position history * POST / Close position * POST / Place sub order * POST / Cancel sub order * GET / Signal bot sub orders * GET / Signal bot event history * Recurring Buy * POST / Place recurring buy order * POST / Amend recurring buy order * POST / Stop recurring buy order * GET / Recurring buy order list * GET / Recurring buy order history * GET / Recurring buy order details * GET / Recurring buy sub orders * WS / Recurring buy orders channel * Copy Trading * GET / Existing lead or copy positions * GET / Lead or copy position history * POST / Place lead or copy stop order * POST / Close lead or copy position * GET / Leading instruments * POST / Amend leading instruments * GET / Profit sharing details * GET / Total profit sharing * GET / Unrealized profit sharing details * GET / Total unrealized profit sharing * POST / Apply for lead trading * POST / Stop lead trading * POST / Amend profit sharing ratio * GET / Account configuration * POST / First copy settings * POST / Amend copy settings * POST / Stop copying * GET / Copy settings * GET / Multiple leverages * POST / Set Multiple leverages * GET / My lead traders * GET / My history lead traders * GET / Copy trading configuration * GET / Lead trader ranks * GET / Lead trader weekly pnl * GET / Lead trader daily pnl * GET / Lead trader stats * GET / Lead trader currency preferences * GET / Lead trader current lead positions * GET / Lead trader lead position history * GET / Copy traders * GET / Lead trader ranks (private) * GET / Lead trader weekly pnl (private) * GET / Lead trader daily pnl (private) * GET / Lead trader stats (private) * GET / Lead trader currency preferences (private) * GET / Lead trader current lead positions (private) * GET / Lead trader lead position history (private) * GET / Copy traders (private) * WS / Copy trading notification channel * WS / Lead trading notification channel * Market Data * GET / Tickers * GET / Ticker * GET / Order book * GET / Full order book * GET / Candlesticks * GET / Candlesticks history * GET / Trades * GET / Trades history * GET / Option trades by instrument family * GET / Option trades * GET / 24H total volume * GET / Call auction details * WS / Tickers channel * WS / Candlesticks channel * WS / Trades channel * WS / All trades channel * WS / Order book channel * WS / Option trades channel * WS / Call auction details channel * Block Trading * Block Trading Workflow * REST API * Get Counterparties * Create RFQ * Cancel RFQ * Cancel multiple RFQs * Cancel all RFQs * Execute Quote * Get Quote products * Set Quote products * Reset MMP status * Set MMP * Get MMP Config * Create Quote * Cancel Quote * Cancel multiple Quotes * Cancel all Quotes * Cancel All After * Get rfqs * Get quotes * Get trades * Get public structure block trades * Get block tickers * Get block ticker * Get public block trades * WebSocket Private Channel * Rfqs channel * Quotes channel * Structure block trades channel * WebSocket Public Channel * Public structure block trades channel * Public block trades channel * Block tickers channel * Spread Trading * Introduction * Basic Concepts * High Level Workflow * Comprehensive API Workflow * Obtaining Available Spreads * Retrieving Your Orders * Retrieving Your Trades * Submitting an Order * Spread States * Trade Lifecycle * Order State * Trade State * All Trades * REST API * Place order * Cancel order * Cancel All orders * Amend order * Get order details * Get active orders * Get orders (last 21 days) * Get orders history (last 3 months) * Get trades (last 7 days) * Get Spreads (Public) * Get order book (Public) * Get ticker (Public) * Get public trades (Public) * Get candlesticks * Get candlesticks history * Cancel All After * Websocket Trade API * WS / Place order * WS / Amend order * WS / Cancel order * WS / Cancel all orders * WebSocket Private Channel * Order channel * Trades channel * WebSocket Public Channel * Order book channel * Public Trades channel * Tickers channel * Candlesticks channel * Public Data * REST API * Get instruments * Get delivery/exercise history * Get open interest * Get funding rate * Get funding rate history * Get limit price * Get option market data * Get estimated delivery/exercise price * Get discount rate and interest-free quota * Get system time * Get mark price * Get position tiers * Get interest rate and loan quota * Get interest rate and loan quota for VIP loans * Get underlying * Get insurance fund * Unit convert * Get option tick bands * Get premium history * Get index tickers * Get index candlesticks * Get index candlesticks history * Get mark price candlesticks * Get mark price candlesticks history * Get oracle * Get exchange rate * Get index components * Get economic calendar data * WebSocket * Instruments channel * Open interest channel * Funding rate channel * Price limit channel * Option summary channel * Estimated delivery/exercise price channel * Mark price channel * Index tickers channel * Mark price candlesticks channel * Index candlesticks channel * Liquidation orders channel * ADL warning channel * Economic calendar channel * Trading Statistics * REST API * Get support coin * Get contract open interest history * Get taker volume * Get contract taker volume * Get margin lending ratio * Get top traders contract long/short ratio * Get top traders contract long/short ratio (by position) * Get contract long/short ratio * Get long/short ratio * Get contracts open interest and volume * Get options open interest and volume * Get put/call ratio * Get open interest and volume (expiry) * Get open interest and volume (strike) * Get taker flow * Funding Account * REST API * Get currencies * Get balance * Get non-tradable assets * Get account asset valuation * Funds transfer * Get funds transfer state * Asset bills details * Get deposit address * Get deposit history * Withdrawal * Cancel withdrawal * Get withdrawal history * Get deposit withdraw status * Small assets convert * Get exchange list (public) * Apply for monthly statement (last year) * GET monthly statement (last year) * Get convert currencies * Get convert currency pair * Estimate quote * Convert trade * Get convert history * WebSocket * Deposit info channel * Withdrawal info channel * Sub-account * REST API * Get sub-account list * Reset the API Key of a sub-account * Get sub-account trading balance * Get sub-account funding balance * Get sub-account maximum withdrawals * Get history of sub-account transfer * Get history of managed sub-account transfer * Master accounts manage the transfers between sub-accounts * Set permission of transfer out * Get custody trading sub-account list * Set sub-accounts VIP loan allocation * Get sub-account borrow interest and limit * Financial Product * On-chain earn * GET / offers * POST / Purchase * POST / Redeem * POST / Cancel purchases/redemptions * GET / Active orders * GET / Order history * ETH staking * POST / Purchase * POST / Redeem * GET / Balance * GET / Purchase&Redeem history * GET / APY history (Public) * Simple earn flexible * GET / Saving balance * POST / Savings purchase/redemption * POST / Set lending rate * GET / Lending history * GET / public borrow info (public) * GET / Public borrow history (public) * Simple earn fixed * GET / Lending offers (public) * GET / Lending APY history (public) * GET / Lending volume (public) * POST / Place lending order * POST / Amend lending order * GET / Lending order list * GET / Lending sub order list * Affiliate * REST API * Get the invitee's detail * Get the user's affiliate rebate information * Status * GET / Status * WS / Status channel * Announcement * GET / Announcements * GET / Announcement types * Error Code * REST API * Public * Finance * Convert * Futures * Swap * Option * Funding * Account * Block Trading and Spread Orderbook * Copy trading * Trading bot * WebSocket * Public OVERVIEW Welcome to our V5 API documentation. OKX provides REST and WebSocket APIs to suit your trading needs. * For users who complete registration on my.okx.com, please visit https://my.okx.com/docs-v5/en/ for the V5 API documentation. API RESOURCES AND SUPPORT TUTORIALS * Learn how to trade with V5 API: Best practice to OKX’s v5 API * Learn python spot trading step by step: Python Spot Trading Tutorial * Learn python derivatives trading step by step: Python Derivatives Trading Tutorial PYTHON LIBRARIES * Use Python SDK for easier integration: Python SDK * Get access to our market maker python sample code Python market maker sample CUSTOMER SERVICE * Get support in our Telegram group: https://t.me/OKXAPI * Subscribe to API related changes: https://t.me/OKExAPIChannel * Please take 1 minute to help us improve: V5 API Satisfaction Survey * If you have any questions, please consult online customer service V5 API KEY CREATION Please refer to my api page regarding V5 API Key creation. GENERATING AN API KEY Create an API Key on the website before signing any requests. After creating an APIKey, keep the following information safe: * APIKey * SecretKey * Passphrase The system returns randomly-generated APIKeys and SecretKeys. You will need to provide the Passphrase to access the API. We store the salted hash of your Passphrase for authentication. We cannot recover the Passphrase if you have lost it. You will need to create a new set of APIKey. There are three permissions below that can be associated with an API key. One or more permission can be assigned to any key. * Read : Can request and view account info such as bills and order history which need read permission * Trade : Can place and cancel orders, funding transfer, make settings which need write permission * Withdraw : Can make withdrawals Each APIKey can be linked with up to 20 IP addresses. API keys with trading or withdrawal permissions that are not bound to IPs will expire after 14 days of inactivity. (API keys in demo trading will not be deleted.) REST AUTHENTICATION MAKING REQUESTS All private REST requests must contain the following headers: * OK-ACCESS-KEY The API Key as a String. * OK-ACCESS-SIGN The Base64-encoded signature (see Signing Messages subsection for details). * OK-ACCESS-TIMESTAMP The UTC timestamp of your request .e.g : 2020-12-08T09:08:57.715Z * OK-ACCESS-PASSPHRASE The passphrase you specified when creating the APIKey. Request bodies should have content type application/json and be in valid JSON format. SIGNATURE > Signing Messages The OK-ACCESS-SIGN header is generated as follows: * Create a prehash string of timestamp + method + requestPath + body (where + represents String concatenation). * Prepare the SecretKey. * Sign the prehash string with the SecretKey using the HMAC SHA256. * Encode the signature in the Base64 format. Example: sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp + 'GET' + '/api/v5/account/balance?ccy=BTC', SecretKey)) The timestamp value is the same as the OK-ACCESS-TIMESTAMP header with millisecond ISO format, e.g. 2020-12-08T09:08:57.715Z. The request method should be in UPPERCASE: e.g. GET and POST. The requestPath is the path of requesting an endpoint. Example: /api/v5/account/balance The body refers to the String of the request body. It can be omitted if there is no request body (frequently the case for GET requests). Example: {"instId":"BTC-USDT","lever":"5","mgnMode":"isolated"} `GET` request parameters are counted as requestpath, not body The SecretKey is generated when you create an APIKey. Example: 22582BD0CFF14C41EDBF1AB98506286D WEBSOCKET OVERVIEW WebSocket is a new HTML5 protocol that achieves full-duplex data transmission between the client and server, allowing data to be transferred effectively in both directions. A connection between the client and server can be established with just one handshake. The server will then be able to push data to the client according to preset rules. Its advantages include: * The WebSocket request header size for data transmission between client and server is only 2 bytes. * Either the client or server can initiate data transmission. * There's no need to repeatedly create and delete TCP connections, saving resources on bandwidth and server. We recommend developers use WebSocket API to retrieve market data and order book depth. CONNECT Connection limit: 3 requests per second (based on IP) When subscribing to a public channel, use the address of the public service. When subscribing to a private channel, use the address of the private service Request limit: The total number of 'subscribe'/'unsubscribe'/'login' requests per connection is limited to 480 times per hour. If there’s a network problem, the system will automatically disable the connection. The connection will break automatically if the subscription is not established or data has not been pushed for more than 30 seconds. To keep the connection stable: 1. Set a timer of N seconds whenever a response message is received, where N is less than 30. 2. If the timer is triggered, which means that no new message is received within N seconds, send the String 'ping'. 3. Expect a 'pong' as a response. If the response message is not received within N seconds, please raise an error or reconnect. CONNECTION COUNT LIMIT The limit will be set at 20 WebSocket connections per specific WebSocket channel per sub-account. Each WebSocket connection is identified by the unique connId. The WebSocket channels subject to this limitation are as follows: 1. Orders channel 2. Account channel 3. Positions channel 4. Balance and positions channel 5. Position risk warning channel 6. Account greeks channel If users subscribe to the same channel through the same WebSocket connection through multiple arguments, for example, by using {"channel": "orders", "instType": "ANY"} and {"channel": "orders", "instType": "SWAP"}, it will be counted once only. If users subscribe to the listed channels (such as orders and accounts) using either the same or different connections, it will not affect the counting, as these are considered as two different channels. The system calculates the number of WebSocket connections per channel. The platform will send the number of active connections to clients through the channel-conn-count event message to new channel subscriptions. > Connection count update Copy to Clipboard{ "event":"channel-conn-count", "channel":"orders", "connCount": "2", "connId":"abcd1234" } When the limit is breached, generally the latest connection that sends the subscription request will be rejected. Client will receive the usual subscription acknowledgement followed by the channel-conn-count-error from the connection that the subscription has been terminated. In exceptional circumstances the platform may unsubscribe existing connections. > Connection limit error Copy to Clipboard{ "event": "channel-conn-count-error", "channel": "orders", "connCount": "20", "connId":"a4d3ae55" } Order operations through WebSocket, including place, amend and cancel orders, are not impacted through this change. LOGIN > Request Example Copy to Clipboard{ "op": "login", "args": [ { "apiKey": "985d5b66-57ce-40fb-b714-afc0b9787083", "passphrase": "123456", "timestamp": "1538054050", "sign": "7L+zFQ+CEgGu5rzCj4+BdV2/uUHGqddA9pI6ztsRRPs=" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation login args Array Yes List of account to login > apiKey String Yes API Key > passphrase String Yes API Key password > timestamp String Yes Unix Epoch time, the unit is seconds > sign String Yes Signature string > Successful Response Example Copy to Clipboard{ "event": "login", "code": "0", "msg": "", "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60009", "msg": "Login failed.", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation login error code String No Error code msg String No Error message connId String Yes WebSocket connection ID apiKey: Unique identification for invoking API. Requires user to apply one manually. passphrase: API Key password timestamp: the Unix Epoch time, the unit is seconds, e.g. 1704876947 sign: signature string, the signature algorithm is as follows: First concatenate timestamp, method, requestPath, strings, then use HMAC SHA256 method to encrypt the concatenated string with SecretKey, and then perform Base64 encoding. secretKey: The security key generated when the user applies for APIKey, e.g. : 22582BD0CFF14C41EDBF1AB98506286D Example of timestamp: const timestamp = '' + Date.now() / 1,000 Among sign example: sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp +'GET'+'/users/self/verify', secretKey)) method: always 'GET'. requestPath : always '/users/self/verify' The request will expire 30 seconds after the timestamp. If your server time differs from the API server time, we recommended using the REST API to query the API server time and then set the timestamp. SUBSCRIBE Subscription Instructions > Request format description Copy to Clipboard{ "op": "subscribe", "args": ["<SubscriptionTopic>"] } WebSocket channels are divided into two categories: public and private channels. Public channels -- No authentication is required, include tickers channel, K-Line channel, limit price channel, order book channel, and mark price channel etc. Private channels -- including account channel, order channel, and position channel, etc -- require log in. Users can choose to subscribe to one or more channels, and the total length of multiple channels cannot exceed 64 KB. Below is an example of subscription parameters. The requirement of subscription parameters for each channel is different. For details please refer to the specification of each channels. > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "tickers", "instId": "LTC-USD-200327" }, { "channel": "candle1m", "instId": "LTC-USD-200327" } ] } Request parameters Parameter Type Required Description op String Yes Operation subscribe args Array Yes List of subscribed channels > channel String Yes Channel name > instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "tickers", "instId": "LTC-USD-200327" }, "connId": "a4d3ae55" } Return parameters Parameter Type Required Description event String Yes Event, subscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID UNSUBSCRIBE Unsubscribe from one or more channels. > Request format description Copy to Clipboard{ "op": "unsubscribe", "args": ["< SubscriptionTopic> "] } > Request Example Copy to Clipboard{ "op": "unsubscribe", "args": [ { "channel": "tickers", "instId": "LTC-USD-200327" }, { "channel": "candle1m", "instId": "LTC-USD-200327" } ] } Request parameters Parameter Type Required Description op String Yes Operation unsubscribe args Array Yes List of channels to unsubscribe from > channel String Yes Channel name > instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > Response Example Copy to Clipboard{ "event": "unsubscribe", "arg": { "channel": "tickers", "instId": "LTC-USD-200327" }, "connId": "a4d3ae55" } Response parameters Parameter Type Required Description event String Yes Event, unsubscribe error arg Object No Unsubscribed channel > channel String Yes Channel name > instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID code String No Error code msg String No Error message ACCOUNT MODE To facilitate your trading experience, please set the appropriate account mode before starting trading. In the trading account trading system, 4 account modes are supported: Spot mode, Spot and futures mode, Multi-currency margin mode, and Portfolio margin mode. You need to set on the Web/App for the first set of every account mode. PRODUCTION TRADING SERVICES The Production Trading URL: * REST: https://www.okx.com * Public WebSocket: wss://ws.okx.com:8443/ws/v5/public * Private WebSocket: wss://ws.okx.com:8443/ws/v5/private * Business WebSocket: wss://ws.okx.com:8443/ws/v5/business AWS URL: * REST: https://aws.okx.com * Public WebSocket: wss://wsaws.okx.com:8443/ws/v5/public * Private WebSocket: wss://wsaws.okx.com:8443/ws/v5/private * Business WebSocket: wss://wsaws.okx.com:8443/ws/v5/business DEMO TRADING SERVICES Currently, the V5 API works for Demo Trading, but some functions are not supported, such as `withdraw','deposit','purchase/redemption', etc. The Demo Trading URL: * REST: https://www.okx.com * Public WebSocket: wss://wspap.okx.com:8443/ws/v5/public * Private WebSocket: wss://wspap.okx.com:8443/ws/v5/private * Business WebSocket: wss://wspap.okx.com:8443/ws/v5/business OKX account can be used for login on Demo Trading. If you already have an OKX account, you can log in directly. Start API Demo Trading by the following steps: Login OKX —> Trade —> Demo Trading —> Personal Center —> Demo Trading API -> Create Demo Trading V5 API Key —> Start your Demo Trading Note: `x-simulated-trading: 1` needs to be added to the header of the Demo Trading request. > Http Header Example Copy to ClipboardContent-Type: application/json OK-ACCESS-KEY: 37c541a1-****-****-****-10fe7a038418 OK-ACCESS-SIGN: leaVRETrtaoEQ3yI9qEtI1CZ82ikZ4xSG5Kj8gnl3uw= OK-ACCESS-PASSPHRASE: 1****6 OK-ACCESS-TIMESTAMP: 2020-03-28T12:21:41.274Z x-simulated-trading: 1 DEMO TRADING EXPLORER You need to sign in to your OKX account before accessing the explorer. The interface only allow access to the demo trading environment. * Clicking Try it out button in Parameters Panel and editing request parameters. * Clicking Execute button to send your request. You can check response in Responses panel. Try demo trading explorer GENERAL INFO The rules for placing orders at the exchange level are as follows: * The maximum number of pending orders (including post only orders, limit orders and taker orders that are being processed): 4,000 * The maximum number of pending orders per trading symbol is 500, the limit of 500 pending orders applies to the following order types: * Limit * Market * Post only * Fill or Kill (FOK) * Immediate or Cancel (IOC) * Market order with Immediate-or-Cancel order (optimal limit IOC) * Take Profit / Stop Loss (TP/SL) * Limit and market orders triggered under the order types below: * Take Profit / Stop Loss (TP/SL) * Trigger * Trailing stop * Arbitrage * Iceberg * TWAP * Recurring buy * The maximum number of pending spread orders: 500 across all spreads * The maximum number of pending algo orders: * TP/SL order: 100 per instrument * Trigger order: 500 * Trailing order: 50 * Iceberg order: 100 * TWAP order: 20 * The maximum number of grid trading * Spot grid: 100 * Contract grid: 100 The rules for trading are as follows: * When the number of maker orders matched with a taker order exceeds the maximum number limit of 1000, the taker order will be canceled. * The limit orders will only be executed with a portion corresponding to 1000 maker orders and the remainder will be canceled. * Fill or Kill (FOK) orders will be canceled directly. The rules for the returning data are as follows: * code and msg represent the request result or error reason when the return data has code, and has not sCode; * It is sCode and sMsg that represent the request result or error reason when the return data has sCode rather than code and msg. The introduction of instFamily: * There are no difference between uly and instFamily: * For BTC-USD-SWAP, uly and instFamily are both BTC-USD. For BTC-USDC-SWAP, uly and instFamily are both BTC-USDC. * If you set the request parameter "uly" as BTC-USD, you will get the data for BTC-USD (coin-margined) contracts. * If you set the request parameter "instFamily" as BTC-USD, then you also will get data for BTC-USD (coin-margined) contracts. * You can look up the corresponding instFamily of each instrument from the "Get instruments" endpoint. TRANSACTION TIMEOUTS Orders may not be processed in time due to network delay or busy OKX servers. You can configure the expiry time of the request using expTime if you want the order request to be discarded after a specific time. If expTime is specified in the requests for Place (multiple) orders or Amend (multiple) orders, the request will not be processed if the current system time of the server is after the expTime. You should synchronize with our system time. Use Get system time to obtain the current system time. REST API Set the following parameters in the request header Parameter Type Required Description expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 The following endpoints are supported: * Place order * Place multiple orders * Amend order * Amend multiple orders > Request Example Copy to Clipboardcurl -X 'POST' \ 'https://www.okx.com/api/v5/trade/order' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'OK-ACCESS-KEY: *****' \ -H 'OK-ACCESS-SIGN: *****'' \ -H 'OK-ACCESS-TIMESTAMP: *****'' \ -H 'OK-ACCESS-PASSPHRASE: *****'' \ -H 'expTime: 1597026383085' \ // request effective deadline -d '{ "instId": "BTC-USDT", "tdMode": "cash", "side": "buy", "ordType": "limit", "px": "1000", "sz": "0.01" }' WEBSOCKET The following parameters are set in the request Parameter Type Required Description expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 The following endpoints are supported: * Place order * Place multiple orders * Amend order * Amend multiple orders > Request Example Copy to Clipboard{ "id": "1512", "op": "order", "expTime":"1597026383085", // request effective deadline "args": [{ "side": "buy", "instId": "BTC-USDT", "tdMode": "isolated", "ordType": "market", "sz": "100" }] } RATE LIMITS Our REST and WebSocket APIs use rate limits to protect our APIs against malicious usage so our trading platform can operate reliably and fairly. When a request is rejected by our system due to rate limits, the system returns error code 50011 (Rate limit reached. Please refer to API documentation and throttle requests accordingly). The rate limit is different for each endpoint. You can find the limit for each endpoint from the endpoint details. Rate limit definitions are detailed below: * WebSocket login and subscription rate limits are based on connection. * Public unauthenticated REST rate limits are based on IP address. * Private REST rate limits are based on User ID (sub-accounts have individual User IDs). * WebSocket order management rate limits are based on User ID (sub-accounts have individual User IDs). TRADING-RELATED APIS For Trading-related APIs (place order, cancel order, and amend order) the following conditions apply: * Rate limits are shared across the REST and WebSocket channels. * Rate limits for placing orders, amending orders, and cancelling orders are independent from each other. * Rate limits are defined on the Instrument ID level (except Options) * Rate limits for Options are defined based on the Instrument Family level. Refer to the Get instruments endpoint to view Instrument Family information. * Rate limits for a multiple order endpoint and a single order endpoint are also independent, with the exception being when there is only one order sent to a multiple order endpoint, the order will be counted as a single order and adopt the single order rate limit. SUB-ACCOUNT RATE LIMIT At the sub-account level, we allow a maximum of 1000 order requests per 2 seconds. Only new order requests and amendment order requests will be counted towards this limit. The limit encompasses all requests from the endpoints below. For batch order requests consisting of multiple orders, each order will be counted individually. Error code 50061 is returned when the sub-account rate limit is exceeded. The existing rate limit rule per instrument ID remains unchanged and the existing rate limit and sub-account rate limit will operate in parallel. If clients require a higher rate limit, clients can trade via multiple sub-accounts. * POST / Place order * POST / Place multiple orders * POST / Amend order * POST / Amend multiple orders * WS / Place order * WS / Place multiple orders * WS / Amend order * WS / Amend multiple orders FILL RATIO BASED SUB-ACCOUNT RATE LIMIT This is only applicable to >= VIP5 customers. As an incentive for more efficient trading, the exchange will offer a higher sub-account rate limit to clients with a high trade fill ratio. The exchange calculates two ratios based on the transaction data from the past 7 days at 00:00 UTC. 1. Sub-account fill ratio: This ratio is determined by dividing (the trade volume in USDT of the sub-account) by (sum of (new and amendment request count per symbol * symbol multiplier) of the sub-account). Note that the master trading account itself is also considered as a sub-account in this context. 2. Master account aggregated fill ratio: This ratio is calculated by dividing (the trade volume in USDT on the master account level) by (the sum (new and amendment count per symbol * symbol multiplier] of all sub-accounts). The symbol multiplier allows for fine-tuning the weight of each symbol. A smaller symbol multiplier (<1) is used for smaller pairs that require more updates per trading volume. All instruments have a default symbol multiplier, and some instruments will have overridden symbol multipliers. InstType Override rule Overridden symbol multiplier Default symbol multiplier Perpetual Futures Per instrument ID 1 Instrument ID: BTC-USDT-SWAP BTC-USD-SWAP ETH-USDT-SWAP ETH-USD-SWAP 0.2 Expiry Futures Per instrument Family 0.3 Instrument Family: BTC-USDT BTC-USD ETH-USDT ETH-USD 0.1 Spot Per instrument ID 0.5 Instrument ID: BTC-USDT ETH-USDT 0.1 Options Per instrument Family 0.1 The fill ratio computation excludes block trading, spread trading, MMP and fiat orders for order count; and excludes block trading, spread trading for trade volume. Only successful order requests (sCode=0) are considered. At 08:00 UTC, the system will use the maximum value between the sub-account fill ratio and the master account aggregated fill ratio based on the data snapshot at 00:00 UTC to determine the sub-account rate limit based on the table below. For broker (non-disclosed) clients, the system considers the sub-account fill ratio only. Fill ratio[x<=ratio<y) Sub-account rate limit per 2 seconds(new and amendment) Tier 1 [0,1) 1,000 Tier 2 [1,2) 1,250 Tier 3 [2,3) 1,500 Tier 4 [3,5) 1,750 Tier 5 [5,10) 2,000 Tier 6 [10,20) 2,500 Tier 7 [20,50) 3,000 Tier 8 >= 50 10,000 If there is an improvement in the fill ratio and rate limit to be uplifted, the uplift will take effect immediately at 08:00 UTC. However, if the fill ratio decreases and the rate limit needs to be lowered, a one-day grace period will be granted, and the lowered rate limit will only be implemented on T+1 at 08:00 UTC. On T+1, if the fill ratio improves, the higher rate limit will be applied accordingly. In the event of client demotion to VIP4, their rate limit will be downgraded to Tier 1, accompanied by a one-day grace period. If the 7-day trading volume of a sub-account is less than 1,000,000 USDT, the fill ratio of the master account will be applied to it. For newly created sub-accounts, the Tier 1 rate limit will be applied at creation until T+1 8am UTC, at which the normal rules will be applied. Block trading, spread trading, MMP and spot/margin orders are exempted from the sub-account rate limit. The exchange offers GET / Account rate limit endpoint that provides ratio and rate limit data, which will be updated daily at 8am UTC. It will return the sub-account fill ratio, the master account aggregated fill ratio, current sub-account rate limit and sub-account rate limit on T+1 (applicable if the rate limit is going to be demoted). The fill ratio and rate limit calculation example is shown below. Client has 3 accounts, symbol multiplier for BTC-USDT-SWAP = 1 and XRP-USDT = 0.1. 1. Account A (master account): 1. BTC-USDT-SWAP trade volume = 100 USDT, order count = 10; 2. XRP-USDT trade volume = 20 USDT, order count = 15; 3. Sub-account ratio = (100+20) / (10 * 1 + 15 * 0.1) = 10.4 2. Account B (sub-account): 1. BTC-USDT-SWAP trade volume = 200 USDT, order count = 100; 2. XRP-USDT trade volume = 20 USDT, order count = 30; 3. Sub-account ratio = (200+20) / (100 * 1 + 30 * 0.1) = 2.13 3. Account C (sub-account): 1. BTC-USDT-SWAP trade volume = 300 USDT, order count = 1000; 2. XRP-USDT trade volume = 20 USDT, order count = 45; 3. Sub-account ratio = (300+20) / (100 * 1 + 45 * 0.1) = 3.06 4. Master account aggregated fill ratio = (100+20+200+20+300+20) / (10 * 1 + 15 * 0.1 + 100 * 1 + 30 * 0.1 + 100 * 1 + 45 * 0.1) = 3.01 5. Rate limit of accounts 1. Account A = max(10.4, 3.01) = 10.4 -> 2500 order requests/2s 2. Account B = max(2.13, 3.01) = 3.01 -> 1750 order requests/2s 3. Account C = max(3.06, 3.01) = 3.06 -> 1750 order requests/2s BEST PRACTICES If you require a higher request rate than our rate limit, you can set up different sub-accounts to batch request rate limits. We recommend this method for throttling or spacing out requests in order to maximize each accounts' rate limit and avoid disconnections or rejections. MARKET MAKER PROGRAM High-caliber trading teams are welcomed to work with OKX as market makers in providing a liquid, fair, and orderly platform to all users. OKX market makers could enjoy favourable fees in return for meeting the market making obligations. Prerequisites (Satisfy any condition): * VIP 2 or above on fee schedule * Qualified Market Maker on other exchange Interested parties can reach out to us using this form: https://okx.typeform.com/contact-sales Remarks: Market making obligations and trading fees will be shared to successful parties only. OKX reserves the right of final decision and interpretation for the content hereinabove. In fairness to all users, market makers will be ineligible for other VIP-related and volume-related promotions or rebates. BROKER PROGRAM If your business platform offers cryptocurrency services, you can apply to join the OKX Broker Program, become our partner broker, enjoy exclusive broker services, and earn high rebates through trading fees generated by OKX users. The Broker Program includes, and is not limited to, integrated trading platforms, trading bots, copy trading platforms, trading bot providers, quantitative strategy institutions, asset management platforms etc. * Click to apply * Broker rules * If you have any questions, feel free to contact our customer support. Relevant information for specific Broker Program documentation and product services will be provided following successful applications. TRADING ACCOUNT The API endpoints of Account require authentication. REST API GET INSTRUMENTS Retrieve available instruments info of current account. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID + INSTRUMENTTYPE HTTP REQUEST GET /api/v5/account/instruments > Request Example Copy to ClipboardGET /api/v5/account/instruments?instType=SPOT Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) result = accountAPI.get_instruments(instType="SPOT") print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SPOT: Spot MARGIN: Margin SWAP: Perpetual Futures FUTURES: Expiry Futures OPTION: Option uly String Conditional Underlying Only applicable to FUTURES/SWAP/OPTION.If instType is OPTION, either uly or instFamily is required. instFamily String Conditional Instrument family Only applicable to FUTURES/SWAP/OPTION. If instType is OPTION, either uly or instFamily is required. instId String No Instrument ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "baseCcy": "BTC", "ctMult": "", "ctType": "", "ctVal": "", "ctValCcy": "", "expTime": "", "instFamily": "", "instId": "BTC-EUR", "instType": "SPOT", "lever": "", "listTime": "1704876947000", "lotSz": "0.00000001", "maxIcebergSz": "9999999999.0000000000000000", "maxLmtAmt": "1000000", "maxLmtSz": "9999999999", "maxMktAmt": "1000000", "maxMktSz": "1000000", "maxStopSz": "1000000", "maxTriggerSz": "9999999999.0000000000000000", "maxTwapSz": "9999999999.0000000000000000", "minSz": "0.00001", "optType": "", "quoteCcy": "EUR", "settleCcy": "", "state": "live", "ruleType": "normal", "stk": "", "tickSz": "1", "uly": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID, e.g. BTC-USD-SWAP uly String Underlying, e.g. BTC-USD Only applicable to MARGIN/FUTURES/SWAP/OPTION instFamily String Instrument family, e.g. BTC-USD Only applicable to MARGIN/FUTURES/SWAP/OPTION baseCcy String Base currency, e.g. BTC inBTC-USDT Only applicable to SPOT/MARGIN quoteCcy String Quote currency, e.g. USDT in BTC-USDT Only applicable to SPOT/MARGIN settleCcy String Settlement and margin currency, e.g. BTC Only applicable to FUTURES/SWAP/OPTION ctVal String Contract value Only applicable to FUTURES/SWAP/OPTION ctMult String Contract multiplier Only applicable to FUTURES/SWAP/OPTION ctValCcy String Contract value currency Only applicable to FUTURES/SWAP/OPTION optType String Option type, C: Call P: put Only applicable to OPTION stk String Strike price Only applicable to OPTION listTime String Listing time, Unix timestamp format in milliseconds, e.g. 1597026383085 expTime String Expiry time Applicable to SPOT/MARGIN/FUTURES/SWAP/OPTION. For FUTURES/OPTION, it is natural delivery/exercise time. It is the instrument offline time when there is SPOT/MARGIN/FUTURES/SWAP/ manual offline. Update once change. lever String Max Leverage, Not applicable to SPOT, OPTION tickSz String Tick size, e.g. 0.0001 For Option, it is minimum tickSz among tick band, please use "Get option tick bands" if you want get option tickBands. lotSz String Lot size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. minSz String Minimum order size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. ctType String Contract type linear: linear contract inverse: inverse contract Only applicable to FUTURES/SWAP state String Instrument status live suspend preopen. e.g. There will be preopen before the Futures and Options new contracts state is live. test: Test pairs, can't be traded ruleType String Trading rule types normal: normal trading pre_market: pre-market trading maxLmtSz String The maximum order quantity of a single limit order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxMktSz String The maximum order quantity of a single market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. maxLmtAmt String Max USD amount for a single limit order maxMktAmt String Max USD amount for a single market order Only applicable to SPOT/MARGIN maxTwapSz String The maximum order quantity of a single TWAP order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. The minimum order quantity of a single TWAP order is minSz*2 maxIcebergSz String The maximum order quantity of a single iceBerg order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxTriggerSz String The maximum order quantity of a single trigger order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxStopSz String The maximum order quantity of a single stop market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. When a new contract is going to be listed, the instrument data of the new contract will be available with status preopen. When a product is going to be delisted (e.g. when a FUTURES contract is settled or OPTION contract is exercised), the instrument will not be available GET BALANCE Retrieve a list of assets (with non-zero balance), remaining balance, and available amount in the trading account. Interest-free quota and discount rates are public data and not displayed on the account interface. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/account/balance > Request Example Copy to Clipboard# Get the balance of all assets in the account GET /api/v5/account/balance # Get the balance of BTC and ETH assets in the account GET /api/v5/account/balance?ccy=BTC,ETH Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get account balance result = accountAPI.get_account_balance() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "adjEq": "55415.624719833286", "borrowFroz": "0", "details": [ { "availBal": "4834.317093622894", "availEq": "4834.3170936228935", "borrowFroz": "0", "cashBal": "4850.435693622894", "ccy": "USDT", "crossLiab": "0", "disEq": "4991.542013297616", "eq": "4992.890093622894", "eqUsd": "4991.542013297616", "smtSyncEq": "0", "fixedBal": "0", "frozenBal": "158.573", "imr": "", "interest": "0", "isoEq": "0", "isoLiab": "0", "isoUpl": "0", "liab": "0", "maxLoan": "0", "mgnRatio": "", "mmr": "", "notionalLever": "", "ordFrozen": "0", "rewardBal": "0", "spotInUseAmt": "", "clSpotInUseAmt": "", "maxSpotInUse": "", "spotIsoBal": "0", "stgyEq": "150", "twap": "0", "uTime": "1705449605015", "upl": "-7.545600000000006", "uplLiab": "0", "spotBal": "", "openAvgPx": "", "accAvgPx": "", "spotUpl": "", "spotUplRatio": "", "totalPnl": "", "totalPnlRatio": "" } ], "imr": "8.57068529", "isoEq": "0", "mgnRatio": "143682.59776662575", "mmr": "0.3428274116", "notionalUsd": "85.7068529", "ordFroz": "0", "totalEq": "55837.43556134779", "uTime": "1705474164160", "upl": "-7.543562688000006" } ], "msg": "" } RESPONSE PARAMETERS Parameters Types Description uTime String Update time of account information, millisecond format of Unix timestamp, e.g. 1597026383085 totalEq String The total amount of equity in USD isoEq String Isolated margin equity in USD Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin adjEq String Adjusted / Effective equity in USD The net fiat value of the assets in the account that can provide margins for spot, expiry futures, perpetual futures and options under the cross-margin mode. In multi-ccy or PM mode, the asset and margin requirement will all be converted to USD value to process the order check or liquidation. Due to the volatility of each currency market, our platform calculates the actual USD value of each currency based on discount rates to balance market risks. Applicable to Spot mode/Multi-currency margin and Portfolio margin ordFroz String Cross margin frozen for pending orders in USD Only applicable to Spot mode/Multi-currency margin imr String Initial margin requirement in USD The sum of initial margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin mmr String Maintenance margin requirement in USD The sum of maintenance margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin borrowFroz String Potential borrowing IMR of the account in USD Only applicable to Spot mode/Multi-currency margin/Portfolio margin. It is "" for other margin modes. mgnRatio String Margin ratio in USD Applicable to Spot mode/Multi-currency margin/Portfolio margin notionalUsd String Notional value of positions in USD Applicable to Spot mode/Multi-currency margin/Portfolio margin upl String Cross-margin info of unrealized profit and loss at the account level in USD Applicable to Multi-currency margin/Portfolio margin details Array Detailed asset information in all currencies > ccy String Currency > eq String Equity of currency > cashBal String Cash balance > uTime String Update time of currency balance information, Unix timestamp format in milliseconds, e.g. 1597026383085 > isoEq String Isolated margin equity of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > availEq String Available equity of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > disEq String Discount equity of currency in USD. > fixedBal String Frozen balance for Dip Sniper and Peak Sniper > availBal String Available balance of currency > frozenBal String Frozen balance of currency > ordFrozen String Margin frozen for open orders Applicable to Spot mode/Spot and futures mode/Multi-currency margin > liab String Liabilities of currency It is a positive value, e.g. 21625.64 Applicable to Spot mode/Multi-currency margin/Portfolio margin > upl String The sum of the unrealized profit & loss of all margin and derivatives positions of currency. Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > uplLiab String Liabilities due to Unrealized loss of currency Applicable to Multi-currency margin/Portfolio margin > crossLiab String Cross liabilities of currency Applicable to Spot mode/Multi-currency margin/Portfolio margin > rewardBal String Trial fund balance > isoLiab String Isolated liabilities of currency Applicable to Multi-currency margin/Portfolio margin > mgnRatio String Cross margin ratio of currency The index for measuring the risk of a certain asset in the account. Applicable to Spot and futures mode and when there is cross position > imr String Cross initial margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position > mmr String Cross maintenance margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position > interest String Accrued interest of currency It is a positive value, e.g. 9.01 Applicable to Spot mode/Multi-currency margin/Portfolio margin > twap String Risk indicator of auto liability repayment Divided into multiple levels from 0 to 5, the larger the number, the more likely the auto repayment will be triggered. Applicable to Spot mode/Multi-currency margin/Portfolio margin > maxLoan String Max loan of currency Applicable to cross of Spot mode/Multi-currency margin/Portfolio margin > eqUsd String Equity in USD of currency > borrowFroz String Potential borrowing IMR of currency in USD Applicable to Multi-currency margin/Portfolio margin. It is "" for other margin modes. > notionalLever String Leverage of currency Applicable to Spot and futures mode > stgyEq String Strategy equity > isoUpl String Isolated unrealized profit and loss of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > spotInUseAmt String Spot in use amount Applicable to Portfolio margin > clSpotInUseAmt String User-defined spot risk offset amount Applicable to Portfolio margin > maxSpotInUse String Max possible spot risk offset amount Applicable to Portfolio margin > spotIsoBal String Spot isolated balance Applicable to copy trading Applicable to Spot mode/Spot and futures mode > smtSyncEq String Smark sync equity The default is "0", only applicable to copy trader > spotBal String Spot balance. The unit is currency, e.g. BTC. Clicking knows more > openAvgPx Array Spot average cost price. The unit is USD. Clicking knows more > accAvgPx Array Spot accumulated cost price. The unit is USD. Clicking knows more > spotUpl String Spot unrealized profit and loss. The unit is USD. Clicking knows more > spotUplRatio String Spot unrealized profit and loss ratio. Clicking knows more > totalPnl String Spot accumulated profit and loss. The unit is USD. Clicking knows more > totalPnlRatio String Spot accumulated profit and loss ratio. Clicking knows more * Regarding more parameter details, you can refer to product documentations below: Spot and futures mode: cross margin trading Multi-currency margin mode: cross margin trading Multi-currency margin mode vs. Portfolio margin mode "" will be returned for inapplicable fields under the current account level. The currency details will not be returned when cashBal and eq is both 0. Distribution of applicable fields under each account level are as follows: Parameters Spot mode Spot and futures mode Multi-currency margin mode Portfolio margin mode uTime Yes Yes Yes Yes totalEq Yes Yes Yes Yes isoEq Yes Yes Yes adjEq Yes Yes Yes ordFroz Yes Yes Yes imr Yes Yes Yes mmr Yes Yes Yes borrowFroz Yes Yes Yes mgnRatio Yes Yes Yes notionalUsd Yes Yes Yes upl Yes Yes details Yes Yes > ccy Yes Yes Yes Yes > eq Yes Yes Yes Yes > cashBal Yes Yes Yes Yes > uTime Yes Yes Yes Yes > isoEq Yes Yes Yes > availEq Yes Yes Yes > disEq Yes Yes Yes Yes > availBal Yes Yes Yes Yes > frozenBal Yes Yes Yes Yes > ordFrozen Yes Yes Yes Yes > liab Yes Yes Yes > upl Yes Yes Yes > uplLiab Yes Yes > crossLiab Yes Yes Yes > isoLiab Yes Yes > mgnRatio Yes > interest Yes Yes Yes > twap Yes Yes Yes > maxLoan Yes Yes Yes > eqUsd Yes Yes Yes Yes > borrowFroz Yes Yes Yes > notionalLever Yes > stgyEq Yes Yes Yes Yes > isoUpl Yes Yes Yes > spotInUseAmt Yes > spotIsoBal Yes Yes > imr Yes > mmr Yes > smtSyncEq Yes Yes Yes Yes > spotBal Yes Yes Yes Yes > openAvgPx Yes Yes Yes Yes > accAvgPx Yes Yes Yes Yes > spotUpl Yes Yes Yes Yes > spotUplRatio Yes Yes Yes Yes > totalPnl Yes Yes Yes Yes > totalPnlRatio Yes Yes Yes Yes GET POSITIONS Retrieve information on your positions. When the account is in net mode, net positions will be displayed, and when the account is in long/short mode, long or short positions will be displayed. Return in reverse chronological order using ctime. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/positions > Request Example Copy to Clipboard# Query BTC-USDT position information GET /api/v5/account/positions?instId=BTC-USDT Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get positions information result = accountAPI.get_positions() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type MARGIN SWAP FUTURES OPTION instId will be checked against instType when both parameters are passed. instId String No Instrument ID, e.g. BTC-USDT-SWAP. Single instrument ID or multiple instrument IDs (no more than 10) separated with comma posId String No Single position ID or multiple position IDs (no more than 20) separated with comma. There is attribute expiration, the posId and position information will be cleared if it is more than 30 days after the last full close position. instId If the instrument ever had position and its open interest is 0, it will return the position information with specific instId. It will not return the position information with specific instId if there is no valid posId; it will not return the position information without specific instId. In the isolated margin trading settings, if it is set to the manual transfers mode, after the position is transferred to the margin, a position with a position of 0 will be generated > Response Example Copy to Clipboard{ "code": "0", "data": [ { "adl": "1", "availPos": "0.00190433573", "avgPx": "62961.4", "baseBal": "", "baseBorrowed": "", "baseInterest": "", "bePx": "", "bizRefId": "", "bizRefType": "", "cTime": "1724740225685", "ccy": "BTC", "clSpotInUseAmt": "", "closeOrderAlgo": [], "deltaBS": "", "deltaPA": "", "fee": "", "fundingFee": "", "gammaBS": "", "gammaPA": "", "idxPx": "62890.5", "imr": "", "instId": "BTC-USDT", "instType": "MARGIN", "interest": "0", "last": "62892.9", "lever": "5", "liab": "-99.9998177776581948", "liabCcy": "USDT", "liqPenalty": "", "liqPx": "53615.448336593756", "margin": "0.000317654", "markPx": "62891.9", "maxSpotInUseAmt": "", "mgnMode": "isolated", "mgnRatio": "9.404143929947395", "mmr": "0.0000318005395854", "notionalUsd": "119.756628017499", "optVal": "", "pendingCloseOrdLiabVal": "0", "pnl": "", "pos": "0.00190433573", "posCcy": "BTC", "posId": "1752810569801498626", "posSide": "net", "quoteBal": "", "quoteBorrowed": "", "quoteInterest": "", "realizedPnl": "", "spotInUseAmt": "", "spotInUseCcy": "", "thetaBS": "", "thetaPA": "", "tradeId": "785524470", "uTime": "1724742632153", "upl": "-0.0000033452492717", "uplLastPx": "-0.0000033199677697", "uplRatio": "-0.0105311101755551", "uplRatioLastPx": "-0.0104515220008934", "usdPx": "", "vegaBS": "", "vegaPA": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type mgnMode String Margin mode cross isolated posId String Position ID posSide String Position side long, pos is positive short, pos is positive net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. For MARGIN, pos is always positive, posCcy being base currency means long position, posCcy being quote currency means short position.) pos String Quantity of positions. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred baseBal String Base currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) quoteBal String Quote currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) baseBorrowed String Base currency amount already borrowed, only applicable to MARGIN(Quick Margin Mode)(Deprecated) baseInterest String Base Interest, undeducted interest that has been incurred, only applicable to MARGIN(Quick Margin Mode)(Deprecated) quoteBorrowed String Quote currency amount already borrowed, only applicable to MARGIN(Quick Margin Mode)(Deprecated) quoteInterest String Quote Interest, undeducted interest that has been incurred, only applicable to MARGIN(Quick Margin Mode)(Deprecated) posCcy String Position currency, only applicable to MARGIN positions. availPos String Position that can be closed Only applicable to MARGIN, FUTURES/SWAP in the long-short mode and OPTION. For Margin position, the rest of sz will be SPOT trading after the liability is repaid while closing the position. Please get the available reduce-only amount from "Get maximum available tradable amount" if you want to reduce the amount of SPOT trading as much as possible. avgPx String Average open price markPx String Latest Mark price upl String Unrealized profit and loss calculated by mark price. uplRatio String Unrealized profit and loss ratio calculated by mark price. uplLastPx String Unrealized profit and loss calculated by last price. Main usage is showing, actual value is upl. uplRatioLastPx String Unrealized profit and loss ratio calculated by last price. instId String Instrument ID, e.g. BTC-USDT-SWAP lever String Leverage Not applicable to OPTION and positions of cross margin mode under Portfolio margin liqPx String Estimated liquidation price Not applicable to OPTION imr String Initial margin requirement, only applicable to cross. margin String Margin, can be added or reduced. Only applicable to isolated. mgnRatio String Margin ratio mmr String Maintenance margin requirement liab String Liabilities, only applicable to MARGIN. liabCcy String Liabilities currency, only applicable to MARGIN. interest String Interest. Undeducted interest that has been incurred. tradeId String Last trade ID optVal String Option Value, only applicable to OPTION. pendingCloseOrdLiabVal String The amount of close orders of isolated margin liability. notionalUsd String Notional value of positions in USD adl String Auto-deleveraging (ADL) indicator Divided into 5 levels, from 1 to 5, the smaller the number, the weaker the adl intensity. ccy String Currency used for margin last String Latest traded price idxPx String Latest underlying index price usdPx String Latest USD price of the ccy on the market, only applicable to OPTION bePx String Breakeven price deltaBS String delta: Black-Scholes Greeks in dollars, only applicable to OPTION deltaPA String delta: Greeks in coins, only applicable to OPTION gammaBS String gamma: Black-Scholes Greeks in dollars, only applicable to OPTION gammaPA String gamma: Greeks in coins, only applicable to OPTION thetaBS String theta:Black-Scholes Greeks in dollars, only applicable to OPTION thetaPA String theta:Greeks in coins, only applicable to OPTION vegaBS String vega:Black-Scholes Greeks in dollars, only applicable to OPTION vegaPA String vega:Greeks in coins, only applicable to OPTION spotInUseAmt String Spot in use amount Applicable to Portfolio margin spotInUseCcy String Spot in use unit, e.g. BTC Applicable to Portfolio margin clSpotInUseAmt String User-defined spot risk offset amount Applicable to Portfolio margin maxSpotInUseAmt String Max possible spot risk offset amount Applicable to Portfolio margin bizRefId String External business id, e.g. experience coupon id bizRefType String External business type realizedPnl String Realized profit and loss Only applicable to FUTURES/SWAP/OPTION realizedPnl=pnl+fee+fundingFee+liqPenalty pnl String Accumulated pnl of closing order(s) fee String Accumulated fee Negative number represents the user transaction fee charged by the platform.Positive number represents rebate. fundingFee String Accumulated funding fee liqPenalty String Accumulated liquidation penalty. It is negative when there is a value. closeOrderAlgo Array Close position algo orders attached to the position. This array will have values only after you request "Place algo order" with closeFraction=1. > algoId String Algo ID > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last:last price index:index price mark:mark price > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last:last price index:index price mark:mark price > closeFraction String Fraction of position to be closed when the algo order is triggered. cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Latest time position was adjusted, Unix timestamp format in milliseconds, e.g. 1597026383085 As for portfolio margin account, the IMR and MMR of the position are calculated in risk unit granularity, thus their values of the same risk unit cross positions are the same. GET POSITIONS HISTORY Retrieve the updated position data for the last 3 months. Return in reverse chronological order using utime. Getting positions history is not supported under Portfolio margin mode. RATE LIMIT: 10 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/positions-history > Request Example Copy to ClipboardGET /api/v5/account/positions-history Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get positions history result = accountAPI.get_positions_history() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type MARGIN SWAP FUTURES OPTION instId String No Instrument ID, e.g. BTC-USD-SWAP mgnMode String No Margin mode cross isolated type String No The type of latest close position 1: Close position partially;2:Close all;3:Liquidation;4:Partial liquidation; 5:ADL; It is the latest type if there are several types for the same position. posId String No Position ID. There is attribute expiration. The posId will be expired if it is more than 30 days after the last full close position, then position will use new posId. after String No Pagination of data to return records earlier than the requested uTime, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested uTime, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. All records that have the same uTime will be returned at the current request > Response Example Copy to Clipboard{ "code": "0", "data": [ { "cTime": "1654177169995", "ccy": "BTC", "closeAvgPx": "29786.5999999789081085", "closeTotalPos": "1", "instId": "BTC-USD-SWAP", "instType": "SWAP", "lever": "10.0", "mgnMode": "cross", "openAvgPx": "29783.8999999995535393", "openMaxPos": "1", "realizedPnl": "0.001", "fee": "-0.0001", "fundingFee": "0", "liqPenalty": "0", "pnl": "0.0011", "pnlRatio": "0.000906447858888", "posId": "452587086133239818", "posSide": "long", "direction": "long", "triggerPx": "", "type": "1", "uTime": "1654177174419", "uly": "BTC-USD" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID mgnMode String Margin mode cross isolated type String The type of latest close position 1:Close position partially;2:Close all;3:Liquidation;4:Partial liquidation; 5:ADL; It is the latest type if there are several types for the same position. cTime String Created time of position uTime String Updated time of position openAvgPx String Average price of opening position closeAvgPx String Average price of closing position posId String Position ID openMaxPos String Max quantity of position closeTotalPos String Position's cumulative closed volume realizedPnl String Realized profit and loss Only applicable to FUTURES/SWAP/OPTION realizedPnl=pnl+fee+fundingFee+liqPenalty fee String Accumulated fee Negative number represents the user transaction fee charged by the platform.Positive number represents rebate. fundingFee String Accumulated funding fee liqPenalty String Accumulated liquidation penalty. It is negative when there is a value. pnl String Profit and loss pnlRatio String P&L ratio posSide String Position mode side long: Hedge mode long short: Hedge mode short net: Net mode lever String Leverage direction String Direction: long short Only applicable to MARGIN/FUTURES/SWAP/OPTION triggerPx String trigger mark price. There is value when type is equal to 3, 4 or 5. It is "" when type is equal to 1 or 2 uly String Underlying ccy String Currency used for margin GET ACCOUNT AND POSITION RISK Get account and position risk Obtain basic information about accounts and positions on the same time snapshot RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/account/account-position-risk > Request Example Copy to ClipboardGET /api/v5/account/account-position-risk Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get account and position risk result = accountAPI.get_account_position_risk() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type MARGIN SWAP FUTURES OPTION > Response Example Copy to Clipboard{ "code":"0", "data":[ { "adjEq":"174238.6793649711331679", "balData":[ { "ccy":"BTC", "disEq":"78846.7803721021362242", "eq":"1.3863533369419636" }, { "ccy":"USDT", "disEq":"73417.2495112863300127", "eq":"73323.395564963177146" } ], "posData":[ { "baseBal": "0.4", "ccy": "", "instId": "BTC-USDT", "instType": "MARGIN", "mgnMode": "isolated", "notionalCcy": "0", "notionalUsd": "0", "pos": "0", "posCcy": "", "posId": "310388685292318723", "posSide": "net", "quoteBal": "0" } ], "ts":"1620282889345" } ], "msg":"" } RESPONSE PARAMETERS Parameters Types Description ts String Update time of account information, millisecond format of Unix timestamp, e.g. 1597026383085 adjEq String Adjusted / Effective equity in USD Applicable to Multi-currency margin and Portfolio margin balData Array Detailed asset information in all currencies > ccy String Currency > eq String Equity of currency > disEq String Discount equity of currency in USD. posData Array Detailed position information in all currencies > instType String Instrument type > mgnMode String Margin mode cross isolated > posId String Position ID > instId String Instrument ID, e.g. BTC-USDT-SWAP > pos String Quantity of positions contract. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred > baseBal String Base currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > quoteBal String Quote currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > posSide String Position side long short net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. MARGIN: posCcy being base currency means long position, posCcy being quote currency means short position.) > posCcy String Position currency, only applicable to MARGIN positions. > ccy String Currency used for margin > notionalCcy String Notional value of positions in coin > notionalUsd String Notional value of positions in USD GET BILLS DETAILS (LAST 7 DAYS) Retrieve the bills of the account. The bill refers to all transaction records that result in changing the balance of an account. Pagination is supported, and the response is sorted with the most recent first. This endpoint can retrieve data from the last 7 days. RATE LIMIT: 5 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/bills > Request Example Copy to ClipboardGET /api/v5/account/bills GET /api/v5/account/bills?instType=MARGIN Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get bills details (last 7 days) result = accountAPI.get_account_bills() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION instId String No Instrument ID, e.g. BTC-USDT ccy String No Bill currency mgnMode String No Margin mode isolated cross ctType String No Contract type linear inverse Only applicable to FUTURES/SWAP type String No Bill type 1: Transfer 2: Trade 3: Delivery 4: Forced repayment 5: Liquidation 6: Margin transfer 7: Interest deduction 8: Funding fee 9: ADL 10: Clawback 11: System token conversion 12: Strategy transfer 13: DDH 14: Block trade 15: Quick Margin 22: Repay 24: Spread trading 26: Structured products 250: Copy trader profit sharing expenses 251: Copy trader profit sharing refund subType String No Bill subtype 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 9: Interest deduction for Market loans 11: Transfer in 12: Transfer out 14: Interest deduction for VIP loans 160: Manual margin increase 161: Manual margin decrease 162: Auto margin increase 114: Forced repayment buy 115: Forced repayment sell 118: System token conversion transfer in 119: System token conversion transfer out 100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 108:clawback 109: Liquidation fees 110: Liquidation transfer in 111: Liquidation transfer out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL sell 131: ddh buy 132: ddh sell 170: Exercised(ITM buy side) 171: Counterparty exercised(ITM sell side) 172: Expired(Non-ITM buy and sell side) 112: Delivery long 113: Delivery short 117: Delivery/Exercise clawback 173: Funding fee expense 174: Funding fee income 200:System transfer in 201: Manually transfer in 202: System transfer out 203: Manually transfer out 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 210: Manual Borrowing of quick margin 211: Manual Repayment of quick margin 212: Auto borrow of quick margin 213: Auto repay of quick margin 220: Transfer in when using USDT to buy OPTION 221: Transfer out when using USDT to buy OPTION 16: Repay forcibly 17: Repay interest by borrowing forcibly 224: Repayment transfer in 225: Repayment transfer out 236: Easy convert in 237: Easy convert out 250: Profit sharing expenses 251: Profit sharing refund 280: SPOT profit sharing expenses 281: SPOT profit sharing refund 270: Spread trading buy 271: Spread trading sell 272: Spread trading open long 273: Spread trading open short 274: Spread trading close long 275: Spread trading close short 280: SPOT profit sharing expenses 281: SPOT profit sharing refund 284: Copy trade automatic transfer in 285: Copy trade manual transfer in 286: Copy trade automatic transfer out 287: Copy trade manual transfer out 290: Crypto dust auto-transfer out 293: Fixed loan interest deduction 294: Fixed loan interest refund 295 : Fixed loan overdue penalty 296: From structured order placements 297: To structured order placements 298: From structured settlements 299: To structured settlements 306: Manual borrow 307: Auto borrow 308: Manual repay 309: Auto repay 312: Auto offset after String No Pagination of data to return records earlier than the requested bill ID. before String No Pagination of data to return records newer than the requested bill ID. begin String No Filter with a begin timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "bal": "8694.2179403378290202", "balChg": "0.0219338232210000", "billId": "623950854533513219", "ccy": "USDT", "clOrdId": "", "execType": "T", "fee": "-0.000021955779", "fillFwdPx": "", "fillIdxPx": "27104.1", "fillMarkPx": "", "fillMarkVol": "", "fillPxUsd": "", "fillPxVol": "", "fillTime": "1695033476166", "from": "", "instId": "BTC-USDT", "instType": "SPOT", "interest": "0", "mgnMode": "isolated", "notes": "", "ordId": "623950854525124608", "pnl": "0", "posBal": "0", "posBalChg": "0", "px": "27105.9", "subType": "1", "sz": "0.021955779", "tag": "", "to": "", "tradeId": "586760148", "ts": "1695033476167", "type": "2" }] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type billId String Bill ID type String Bill type subType String Bill subtype ts String The time when the balance complete update, Unix timestamp format in milliseconds, e.g.1597026383085 balChg String Change in balance amount at the account level posBalChg String Change in balance amount at the position level bal String Balance at the account level posBal String Balance at the position level sz String Quantity px String Price which related to subType Trade filled price for1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 114: Forced repayment buy 115: Forced repayment sell Liquidation Price for100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 16: Repay forcibly 17: Repay interest by borrowing forcibly 110: Liquidation transfer in 111: Liquidation transfer out Delivery price for112: Delivery long 113: Delivery short Exercise price for170: Exercised 171: Counterparty exercised 172: Expired OTM Mark price for173: Funding fee expense 174: Funding fee income ccy String Account balance currency pnl String Profit and loss fee String Fee Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. Trading fee rule mgnMode String Margin mode isolated cross When bills are not generated by position changes, the field returns "" instId String Instrument ID, e.g. BTC-USDT ordId String Order ID Return order ID when the type is 2/5/9 Return "" when there is no order. execType String Liquidity taker or maker T: taker M: maker from String The remitting account 6: Funding account 18: Trading account Only applicable to transfer. When bill type is not transfer, the field returns "". to String The beneficiary account 6: Funding account 18: Trading account Only applicable to transfer. When bill type is not transfer, the field returns "". notes String Notes interest String Interest tag String Order tag fillTime String Last filled time tradeId String Last traded ID clOrdId String Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. fillIdxPx String Index price at the moment of trade execution For cross currency spot pairs, it returns baseCcy-USDT index price. For example, for LTC-ETH, this field returns the index price of LTC-USDT. fillMarkPx String Mark price when filled Applicable to FUTURES/SWAP/OPTIONS, return "" for other instrument types fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types Funding Fee expense (subType = 173) You may refer to "pnl" for the fee payment GET BILLS DETAILS (LAST 3 MONTHS) Retrieve the account’s bills. The bill refers to all transaction records that result in changing the balance of an account. Pagination is supported, and the response is sorted with most recent first. This endpoint can retrieve data from the last 3 months. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/bills-archive > Request Example Copy to ClipboardGET /api/v5/account/bills-archive GET /api/v5/account/bills-archive?instType=MARGIN Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get bills details (last 3 months) result = accountAPI.get_account_bills_archive() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION instId String No Instrument ID, e.g. BTC-USDT ccy String No Bill currency mgnMode String No Margin mode isolated cross ctType String No Contract type linear inverse Only applicable to FUTURES/SWAP type String No Bill type 1: Transfer 2: Trade 3: Delivery 4: Forced repayment 5: Liquidation 6: Margin transfer 7: Interest deduction 8: Funding fee 9: ADL 10: Clawback 11: System token conversion 12: Strategy transfer 13: DDH 14: Block trade 15: Quick Margin 22: Repay 24: Spread trading 26: Structured products 250: Copy trader profit sharing expenses 251: Copy trader profit sharing refund subType String No Bill subtype 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 9: Interest deduction for Market loans 11: Transfer in 12: Transfer out 14: Interest deduction for VIP loans 160: Manual margin increase 161: Manual margin decrease 162: Auto margin increase 114: Forced repayment buy 115: Forced repayment sell 118: System token conversion transfer in 119: System token conversion transfer out 100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 108:clawback 109: Liquidation fees 110: Liquidation transfer in 111: Liquidation transfer out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL sell 131: ddh buy 132: ddh sell 170: Exercised(ITM buy side) 171: Counterparty exercised(ITM sell side) 172: Expired(Non-ITM buy and sell side) 112: Delivery long 113: Delivery short 117: Delivery/Exercise clawback 173: Funding fee expense 174: Funding fee income 200:System transfer in 201: Manually transfer in 202: System transfer out 203: Manually transfer out 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 210: Manual Borrowing of quick margin 211: Manual Repayment of quick margin 212: Auto borrow of quick margin 213: Auto repay of quick margin 220: Transfer in when using USDT to buy OPTION 221: Transfer out when using USDT to buy OPTION 16: Repay forcibly 17: Repay interest by borrowing forcibly 224: Repayment transfer in 225: Repayment transfer out 236: Easy convert in 237: Easy convert out 250: Profit sharing expenses 251: Profit sharing refund 280: SPOT profit sharing expenses 281: SPOT profit sharing refund 270: Spread trading buy 271: Spread trading sell 272: Spread trading open long 273: Spread trading open short 274: Spread trading close long 275: Spread trading close short 280: SPOT profit sharing expenses 281: SPOT profit sharing refund 284: Copy trade automatic transfer in 285: Copy trade manual transfer in 286: Copy trade automatic transfer out 287: Copy trade manual transfer out 290: Crypto dust auto-transfer out 293: Fixed loan interest deduction 294: Fixed loan interest refund 295 : Fixed loan overdue penalty 296: From structured order placements 297: To structured order placements 298: From structured settlements 299: To structured settlements 306: Manual borrow 307: Auto borrow 308: Manual repay 309: Auto repay 312: Auto offset after String No Pagination of data to return records earlier than the requested bill ID. before String No Pagination of data to return records newer than the requested bill ID. begin String No Filter with a begin timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "bal": "8694.2179403378290202", "balChg": "0.0219338232210000", "billId": "623950854533513219", "ccy": "USDT", "clOrdId": "", "execType": "T", "fee": "-0.000021955779", "fillFwdPx": "", "fillIdxPx": "27104.1", "fillMarkPx": "", "fillMarkVol": "", "fillPxUsd": "", "fillPxVol": "", "fillTime": "1695033476166", "from": "", "instId": "BTC-USDT", "instType": "SPOT", "interest": "0", "mgnMode": "isolated", "notes": "", "ordId": "623950854525124608", "pnl": "0", "posBal": "0", "posBalChg": "0", "px": "27105.9", "subType": "1", "sz": "0.021955779", "tag": "", "to": "", "tradeId": "586760148", "ts": "1695033476167", "type": "2" }] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type billId String Bill ID type String Bill type subType String Bill subtype ts String The time when the balance complete update, Unix timestamp format in milliseconds, e.g.1597026383085 balChg String Change in balance amount at the account level posBalChg String Change in balance amount at the position level bal String Balance at the account level posBal String Balance at the position level sz String Quantity px String Price which related to subType Trade filled price for1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 114: Forced repayment buy 115: Forced repayment sell Liquidation Price for100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 16: Repay forcibly 17: Repay interest by borrowing forcibly 110: Liquidation transfer in 111: Liquidation transfer out Delivery price for112: Delivery long 113: Delivery short Exercise price for170: Exercised 171: Counterparty exercised 172: Expired OTM Mark price for173: Funding fee expense 174: Funding fee income ccy String Account balance currency pnl String Profit and loss fee String Fee Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. Trading fee rule mgnMode String Margin mode isolated cross When bills are not generated by position changes, the field returns "" instId String Instrument ID, e.g. BTC-USDT ordId String Order ID Return order ID when the type is 2/5/9 Return "" when there is no order. execType String Liquidity taker or maker T: taker M: maker from String The remitting account 6: Funding account 18: Trading account Only applicable to transfer. When bill type is not transfer, the field returns "". to String The beneficiary account 6: Funding account 18: Trading account Only applicable to transfer. When bill type is not transfer, the field returns "". notes String Notes interest String Interest tag String Order tag fillTime String Last filled time tradeId String Last traded ID clOrdId String Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. fillIdxPx String Index price at the moment of trade execution For cross currency spot pairs, it returns baseCcy-USDT index price. For example, for LTC-ETH, this field returns the index price of LTC-USDT. fillMarkPx String Mark price when filled Applicable to FUTURES/SWAP/OPTIONS, return "" for other instrument types fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types Funding Fee expense (subType = 173) You may refer to "pnl" for the fee payment APPLY BILLS DETAILS (SINCE 2021) Apply for bill data since 1 February, 2021 except for the current quarter. RATE LIMIT:12 REQUESTS PER DAY RATE LIMIT RULE: USERID PERMISSIONS: READ HTTP REQUEST POST /api/v5/account/bills-history-archive > Request Example Copy to ClipboardPOST /api/v5/account/bills-history-archive body { "year":"2023", "quarter":"Q1" } REQUEST PARAMETERS Parameter Type Required Description year String Yes 4 digits year quarter String Yes Quarter, valid value is Q1, Q2, Q3, Q4 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "result": "true", "ts": "1646892328000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result String Whether there is already a download link for this section true: Existed, can check from "Get bills details (since 2021)". false: Does not exist and is generating, can check the download link after 30 hours ts String Download link generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 Check the file link from the "Get bills details (since 2021)" endpoint in 30 hours to allow for data generation. During peak demand, data generation may take longer. If the file link is still unavailable after 48 hours, reach out to customer support for assistance. It is only applicable to the data from the unified account. GET BILLS DETAILS (SINCE 2021) Apply for bill data since 1 February, 2021 except for the current quarter. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID PERMISSIONS: READ HTTP REQUEST GET /api/v5/account/bills-history-archive > Response Example Copy to ClipboardGET /api/v5/account/bills-history-archive?year=2023&quarter=Q4 REQUEST PARAMETERS Parameter Type Required Description year String Yes 4 digits year quarter String Yes Quarter, valid value is Q1, Q2, Q3, Q4 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fileHref": "http://xxx", "state": "finished", "ts": "1646892328000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description fileHref String Download file link ts String Download link generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 state String Download link status "finished" "ongoing" "failed": Failed, please apply again FIELD DESCRIPTIONS IN THE DECOMPRESSED CSV FILE Parameter Type Description instType String Instrument type billId String Bill ID subType String Bill subtype ts String The time when the balance complete update, Unix timestamp format in milliseconds, e.g.1597026383085 balChg String Change in balance amount at the account level posBalChg String Change in balance amount at the position level bal String Balance at the account level posBal String Balance at the position level sz String Quantity px String Price which related to subType Trade filled price for1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 114: Forced repayment buy 115: Forced repayment sell Liquidation Price for100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 16: Repay forcibly 17: Repay interest by borrowing forcibly 110: Liquidation transfer in 111: Liquidation transfer out Delivery price for112: Delivery long 113: Delivery short Exercise price for170: Exercised 171: Counterparty exercised 172: Expired OTM Mark price for173: Funding fee expense 174: Funding fee income ccy String Account balance currency pnl String Profit and loss fee String Fee Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. Trading fee rule mgnMode String Margin mode isolated cross When bills are not generated by position changes, the field returns "" instId String Instrument ID, e.g. BTC-USDT ordId String Order ID Return order ID when the type is 2/5/9 Return "" when there is no order. execType String Liquidity taker or maker T: taker M: maker interest String Interest tag String Order tag fillTime String Last filled time tradeId String Last traded ID clOrdId String Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. fillIdxPx String Index price at the moment of trade execution For cross currency spot pairs, it returns baseCcy-USDT index price. For example, for LTC-ETH, this field returns the index price of LTC-USDT. fillMarkPx String Mark price when filled Applicable to FUTURES/SWAP/OPTIONS, return "" for other instrument types fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types GET ACCOUNT CONFIGURATION Retrieve current account configuration. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/config > Request Example Copy to ClipboardGET /api/v5/account/config Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Retrieve current account configuration result = accountAPI.get_account_config() print(result) REQUEST PARAMETERS none > Response Example Copy to Clipboard{ "code": "0", "data": [ { "acctLv": "2", "acctStpMode": "cancel_maker", "autoLoan": false, "ctIsoMode": "automatic", "discountType": "1", "enableSpotBorrow": false, "greeksType": "PA", "ip": "", "kycLv": "3", "label": "v5 test", "level": "Lv1", "levelTmp": "", "liquidationGear": "-1", "mainUid": "44705892343619584", "mgnIsoMode": "automatic", "opAuth": "1", "perm": "read_only,withdraw,trade", "posMode": "long_short_mode", "roleType": "0", "spotBorrowAutoRepay": false, "spotOffsetType": "", "spotRoleType": "0", "spotTraderInsts": [], "traderInsts": [], "uid": "44705892343619584" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description uid String Account ID of current request. mainUid String Main Account ID of current request. The current request account is main account if uid = mainUid. The current request account is sub-account if uid != mainUid. acctLv String Account mode 1: Spot mode 2: Spot and futures mode 3: Multi-currency margin 4: Portfolio margin acctStpMode String Account self-trade prevention mode cancel_maker cancel_taker cancel_both Users can log in to the webpage through the master account to modify this configuration posMode String Position mode long_short_mode: long/short, only applicable to FUTURES/SWAP net_mode: net autoLoan Boolean Whether to borrow coins automatically true: borrow coins automatically false: not borrow coins automatically greeksType String Current display type of Greeks PA: Greeks in coins BS: Black-Scholes Greeks in dollars level String The user level of the current real trading volume on the platform, e.g Lv1 levelTmp String Temporary experience user level of special users, e.g Lv3 ctIsoMode String Contract isolated margin trading settings automatic: Auto transfers autonomy: Manual transfers mgnIsoMode String Margin isolated margin trading settings automatic: Auto transfers quick_margin: Quick Margin Mode (For new accounts, including subaccounts, some defaults will be automatic, and others will be quick_margin) spotOffsetType String Risk offset type 1: Spot-Derivatives(USDT) to be offsetted 2: Spot-Derivatives(Coin) to be offsetted 3: Only derivatives to be offsetted Only applicable to Portfolio margin roleType String Role type 0: General user 1: Leading trader 2: Copy trader traderInsts Array Leading trade instruments, only applicable to Leading trader spotRoleType String SPOT copy trading role type. 0: General user;1: Leading trader;2: Copy trader spotTraderInsts String Spot lead trading instruments, only applicable to lead trader opAuth String Whether the optional trading was activated 0: not activate 1: activated kycLv String Main account KYC level 0: No verification 1: level 1 completed 2: level 2 completed 3: level 3 completed If the request originates from a subaccount, kycLv is the KYC level of the main account. If the request originates from the main account, kycLv is the KYC level of the current account. label String API key note of current request API key. No more than 50 letters (case sensitive) or numbers, which can be pure letters or pure numbers. ip String IP addresses that linked with current API key, separate with commas if more than one, e.g. 117.37.203.58,117.37.203.57. It is an empty string "" if there is no IP bonded. perm String The permission of the current requesting API key or Access token read_only: Read trade: Trade withdraw: Withdraw discountType String Discount rule type for current account 0: Original discount rate rules, the default value 1: New discount rules After new discount rate rules are effective completely, this parameter will be removed from the endpoint. Advice you to prepare in advance. liquidationGear String The margin ratio level of liquidation alert 3 means that you will get hourly liquidation alerts on app and channel "Position risk warning" when your margin level drops to or below 300% 0 means that there is not alert enableSpotBorrow Boolean Whether borrow is allowed or not in Spot mode true: Enabled false: Disabled spotBorrowAutoRepay Boolean Whether auto-repay is allowed or not in Spot mode true: Enabled false: Disabled SET POSITION MODE Spot and futures mode and Multi-currency mode: FUTURES and SWAP support both long/short mode and net mode. In net mode, users can only have positions in one direction; In long/short mode, users can hold positions in long and short directions. Portfolio margin mode: FUTURES and SWAP only support net mode RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-position-mode > Request Example Copy to ClipboardPOST /api/v5/account/set-position-mode body { "posMode":"long_short_mode" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Set position mode result = accountAPI.set_position_mode( posMode="long_short_mode" ) print(result) REQUEST PARAMETERS Parameter Type Required Description posMode String Yes Position mode long_short_mode: long/short, only applicable to FUTURES/SWAP net_mode: net > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "posMode": "long_short_mode" }] } RESPONSE PARAMETERS Parameter Type Description posMode String Position mode Portfolio margin account only supports net mode SET LEVERAGE There are 10 different scenarios for leverage setting: 1. Set leverage for MARGIN instruments under isolated-margin trade mode at pairs level. 2. Set leverage for MARGIN instruments under cross-margin trade mode and Spot mode (enabled borrow) at currency level. 3. Set leverage for MARGIN instruments under cross-margin trade mode and Spot and futures mode account mode at pairs level. 4. Set leverage for MARGIN instruments under cross-margin trade mode and Multi-currency margin at currency level. 5. Set leverage for MARGIN instruments under cross-margin trade mode and Portfolio margin at currency level. 6. Set leverage for FUTURES instruments under cross-margin trade mode at underlying level. 7. Set leverage for FUTURES instruments under isolated-margin trade mode and buy/sell position mode at contract level. 8. Set leverage for FUTURES instruments under isolated-margin trade mode and long/short position mode at contract and position side level. 9. Set leverage for SWAP instruments under cross-margin trade at contract level. 10. Set leverage for SWAP instruments under isolated-margin trade mode and buy/sell position mode at contract level. 11. Set leverage for SWAP instruments under isolated-margin trade mode and long/short position mode at contract and position side level. Note that the request parameter posSide is only required when margin mode is isolated in long/short position mode for FUTURES/SWAP instruments (see scenario 8 and 11 above). Please refer to the request examples on the right for each case. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-leverage > Request Example Copy to Clipboard# 1. Set leverage for `MARGIN` instruments under `isolated-margin` trade mode at pairs level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT", "lever":"5", "mgnMode":"isolated" } # 2. Set leverage for `MARGIN` instruments under `cross-margin` trade mode and Spot mode (enabled borrow) at currency level. POST /api/v5/account/set-leverage body { "ccy":"BTC", "lever":"5", "mgnMode":"cross" } # 3. Set leverage for `MARGIN` instruments under `cross-margin` trade mode and Spot and futures mode account mode at pairs level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT", "lever":"5", "mgnMode":"cross" } # 4. Set leverage for `MARGIN` instruments under `cross-margin` trade mode and Multi-currency margin at currency level. POST /api/v5/account/set-leverage body { "ccy":"BTC", "lever":"5", "mgnMode":"cross" } # 5. Set leverage for `MARGIN` instruments under `cross-margin` trade mode and Portfolio margin at currency level. POST /api/v5/account/set-leverage body { "ccy":"BTC", "lever":"5", "mgnMode":"cross" } # 6. Set leverage for `FUTURES` instruments under `cross-margin` trade mode at underlying level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-200802", "lever":"5", "mgnMode":"cross" } # 7. Set leverage for `FUTURES` instruments under `isolated-margin` trade mode and buy/sell order placement mode at contract level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-200802", "lever":"5", "mgnMode":"isolated" } # 8. Set leverage for `FUTURES` instruments under `isolated-margin` trade mode and long/short order placement mode at contract and position side level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-200802", "lever":"5", "posSide":"long", "mgnMode":"isolated" } # 9. Set leverage for `SWAP` instruments under `cross-margin` trade at contract level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-SWAP", "lever":"5", "mgnMode":"cross" } # 10. Set leverage for `SWAP` instruments under `isolated-margin` trade mode and buy/sell order placement mode at contract level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-SWAP", "lever":"5", "mgnMode":"isolated" } # 11. Set leverage for `SWAP` instruments under `isolated-margin` trade mode and long/short order placement mode at contract and position side level. POST /api/v5/account/set-leverage body { "instId":"BTC-USDT-SWAP", "lever":"5", "posSide":"long", "mgnMode":"isolated" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Set leverage for MARGIN instruments under isolated-margin trade mode at pairs level. result = accountAPI.set_leverage( instId="BTC-USDT", lever="5", mgnMode="isolated" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Conditional Instrument ID Under cross mode, either instId or ccy is required; if both are passed, instId will be used by default. ccy String Conditional Currency used for margin, used for the leverage setting for the currency in auto borrow. Only applicable to cross MARGIN of Spot mode/Multi-currency margin/Portfolio margin Required when setting the leverage for automatically borrowing coin. lever String Yes Leverage mgnMode String Yes Margin mode isolated cross Can only be cross if ccy is passed. posSide String Conditional Position side long short Only required when margin mode is isolated in long/short mode for FUTURES/SWAP. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "lever": "30", "mgnMode": "isolated", "instId": "BTC-USDT-SWAP", "posSide": "long" } ] } RESPONSE PARAMETERS Parameter Type Description lever String Leverage mgnMode String Margin mode cross isolated instId String Instrument ID posSide String Position side When setting leverage for `cross` `FUTURES`/`SWAP` at the underlying level, pass in any instId and mgnMode(`cross`). Leverage cannot be adjusted for the cross positions of Expiry Futures and Perpetual Futures under the portfolio margin account. GET MAXIMUM ORDER QUANTITY The maximum quantity to buy or sell. It corresponds to the "sz" from placement. Under the Portfolio Margin account, the calculation of the maximum buy/sell amount or open amount is not supported under the cross mode of derivatives. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/max-size > Request Example Copy to ClipboardGET /api/v5/account/max-size?instId=BTC-USDT&tdMode=isolated Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get maximum buy/sell amount or open amount result = accountAPI.get_max_order_size( instId="BTC-USDT", tdMode="isolated" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Single instrument or multiple instruments (no more than 5) in the smae instrument type separated with comma, e.g. BTC-USDT,ETH-USDT tdMode String Yes Trade mode cross isolated cash spot_isolated ccy String Conditional Currency used for margin Only applicable to MARGIN of Spot and futures mode. px String No Price When the price is not specified, it will be calculated according to the current limit price for FUTURES and SWAP, the last traded price for other instrument types. The parameter will be ignored when multiple instruments are specified. leverage String No Leverage for instrument The default is current leverage Only applicable to MARGIN/FUTURES/SWAP unSpotOffset Boolean No true: disable Spot-Derivatives risk offset, false: enable Spot-Derivatives risk offset Default is false Applicable to Portfolio It is effective when Spot-Derivatives risk offset is turned on, otherwise this parameter is ignored. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "instId": "BTC-USDT", "maxBuy": "0.0500695098559788", "maxSell": "64.4798671570072269" }] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID ccy String Currency used for margin maxBuy String SPOT/MARGIN: The maximum quantity in base currency that you can buy The cross-margin order under Spot and futures mode mode, quantity of coins is based on base currency. FUTURES/SWAP/OPTIONS: The maximum quantity of contracts that you can buy maxSell String SPOT/MARGIN: The maximum quantity in quote currency that you can sell The cross-margin order under Spot and futures mode mode, quantity of coins is based on base currency. FUTURES/SWAP/OPTIONS: The maximum quantity of contracts that you can sell GET MAXIMUM AVAILABLE BALANCE/EQUITY Available balance for isolated margin positions and SPOT, available equity for cross margin positions. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/max-avail-size > Request Example Copy to Clipboard# Query maximum available transaction amount when cross MARGIN BTC-USDT use BTC as margin GET /api/v5/account/max-avail-size?instId=BTC-USDT&tdMode=cross&ccy=BTC # Query maximum available transaction amount for SPOT BTC-USDT GET /api/v5/account/max-avail-size?instId=BTC-USDT&tdMode=cash Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get maximum available transaction amount for SPOT BTC-USDT result = accountAPI.get_max_avail_size( instId="BTC-USDT", tdMode="cash" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Single instrument or multiple instruments (no more than 5) separated with comma, e.g. BTC-USDT,ETH-USDT ccy String Conditional Currency used for margin Only applicable to cross MARGIN of Spot and futures mode. tdMode String Yes Trade mode cross isolated cash spot_isolated reduceOnly Boolean No Whether to reduce position only Only applicable to MARGIN px String No The price of closing position. Only applicable to reduceOnly MARGIN. unSpotOffset Boolean No true: disable Spot-Derivatives risk offset, false: enable Spot-Derivatives risk offset Default is false Only applicable to Portfolio margin It is effective when Spot-Derivatives risk offset is turned on, otherwise this parameter is ignored. quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USDT", "availBuy": "100", "availSell": "1" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID availBuy String Maximum available balance/equity to buy availSell String Maximum available balance/equity to sell In the case of SPOT/MARGIN, availBuy is in the quote currency, and availSell is in the base currency. In the case of MARGIN with cross tdMode, both availBuy and availSell are in the currency passed in ccy. INCREASE/DECREASE MARGIN Increase or decrease the margin of the isolated position. Margin reduction may result in the change of the actual leverage. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/position/margin-balance > Request Example Copy to ClipboardPOST /api/v5/account/position/margin-balance body { "instId":"BTC-USDT-200626", "posSide":"short", "type":"add", "amt":"1" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Increase margin result = accountAPI.adjustment_margin( instId="BTC-USDT-SWAP", posSide="short", type= "add", amt="1" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID posSide String Yes Position side, the default is net long short net type String Yes add: add margin reduce: reduce margin amt String Yes Amount to be increased or decreased. ccy String Conditional Currency, only applicable to MARGIN(Quick Margin Mode) > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "amt": "0.3", "ccy": "BTC", "instId": "BTC-USDT", "leverage": "", "posSide": "net", "type": "add" }] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID posSide String Position side, long short amt String Amount to be increase or decrease type String add: add margin reduce: reduce margin leverage String Real leverage after the margin adjustment ccy String Currency Manual transfer mode The value of the margin initially assigned to the isolated position must be greater than or equal to 10,000 USDT, and a position will be created on the account. GET LEVERAGE RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/leverage-info > Request Example Copy to ClipboardGET /api/v5/account/leverage-info?instId=BTC-USDT-SWAP&mgnMode=cross Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get leverage result = accountAPI.get_leverage( instId="BTC-USDT-SWAP", mgnMode="cross" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Conditional Instrument ID Single instrument ID or multiple instrument IDs (no more than 20) separated with comma ccy String Conditional Currency,used for getting leverage of currency level. Applicable to cross MARGIN of Spot mode/Multi-currency margin/Portfolio margin. Supported single currency or multiple currencies (no more than 20) separated with comma. mgnMode String Yes Margin mode cross isolated > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy":"", "instId": "BTC-USDT-SWAP", "mgnMode": "cross", "posSide": "long", "lever": "10" },{ "ccy":"", "instId": "BTC-USDT-SWAP", "mgnMode": "cross", "posSide": "short", "lever": "10" }] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID ccy String Currency,used for getting leverage of currency level. Applicable to cross MARGIN of Spot mode/Multi-currency margin/Portfolio margin. mgnMode String Margin mode posSide String Position side long short net In long/short mode, the leverage in both directions long/short will be returned. lever String Leverage Leverage cannot be enquired for the cross positions of Expiry Futures and Perpetual Futures under the portfolio margin account. GET LEVERAGE ESTIMATED INFO RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/adjust-leverage-info > Request Example Copy to ClipboardGET /api/v5/account/adjust-leverage-info?instType=MARGIN&mgnMode=isolated&lever=3&instId=BTC-USDT REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type MARGIN SWAP FUTURES mgnMode String Yes Margin mode isolated cross lever String Yes Leverage instId String Conditional Instrument ID, e.g. BTC-USDT It is required for these scenarioes: SWAP and FUTURES, Margin isolation, Margin cross in Spot and futures mode. ccy String Conditional Currency used for margin, e.g. BTC It is required for Margin cross in Spot and futures mode, Multi-currency margin and Portfolio margin posSide String No posSide net: The default value long short > Response Example Copy to Clipboard{ "code": "0", "data": [ { "estAvailQuoteTrans": "", "estAvailTrans": "1.1398040558348279", "estLiqPx": "", "estMaxAmt": "10.6095865868904898", "estMgn": "0.0701959441651721", "estQuoteMaxAmt": "176889.6871254563042714", "estQuoteMgn": "", "existOrd": false, "maxLever": "10", "minLever": "0.01" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description estAvailQuoteTrans String The estimated margin(in quote currency) can be transferred out under the corresponding leverage For cross, it is the maximum quantity that can be transferred from the trading account. For isolated, it is the maximum quantity that can be transferred from the isolated position Only applicable to MARGIN estAvailTrans String The estimated margin can be transferred out under the corresponding leverage. For cross, it is the maximum quantity that can be transferred from the trading account. For isolated, it is the maximum quantity that can be transferred from the isolated position The unit is base currency for MARGIN It is not applicable to the scenario when increasing leverage for isolated position under FUTURES and SWAP estLiqPx String The estimated liquidation price under the corresponding leverage. Only return when there is a position. estMgn String The estimated margin needed by position under the corresponding leverage. For the MARGIN position, it is margin in base currency estQuoteMgn String The estimated margin (in quote currency) needed by position under the corresponding leverage estMaxAmt String For MARGIN, it is the estimated maximum loan in base currency under the corresponding leverage For SWAP and FUTURES, it is the estimated maximum quantity of contracts that can be opened under the corresponding leverage estQuoteMaxAmt String The MARGIN estimated maximum loan in quote currency under the corresponding leverage. existOrd Boolean Whether there is pending orders true false maxLever String Maximum leverage minLever String Minimum leverage GET THE MAXIMUM LOAN OF INSTRUMENT RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/max-loan > Request Example Copy to Clipboard# Max loan of cross `MARGIN` in `Spot mode` (enabled borrowing) GET /api/v5/account/max-loan?instId=BTC-USDT&mgnMode=cross # Max loan of isolated `MARGIN` in `Spot and futures mode` GET /api/v5/account/max-loan?instId=BTC-USDT&mgnMode=isolated # Max loan of cross `MARGIN` in `Spot and futures mode` (Margin Currency is BTC) GET /api/v5/account/max-loan?instId=BTC-USDT&mgnMode=cross&mgnCcy=BTC # Max loan of cross `MARGIN` in `Multi-currency margin` GET /api/v5/account/max-loan?instId=BTC-USDT&mgnMode=cross Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Max loan of cross MARGIN in Spot and futures mode (Margin Currency is BTC) result = accountAPI.get_max_loan( instId="BTC-USDT", mgnMode="cross", mgnCcy="BTC" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Single instrument or multiple instruments (no more than 5) separated with comma, e.g. BTC-USDT,ETH-USDT mgnMode String Yes Margin mode isolated cross mgnCcy String Conditional Margin currency Only applicable to cross MARGIN in Spot and futures mode > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USDT", "mgnMode": "isolated", "mgnCcy": "", "maxLoan": "0.1", "ccy": "BTC", "side": "sell" }, { "instId": "BTC-USDT", "mgnMode": "isolated", "mgnCcy": "", "maxLoan": "0.2", "ccy": "USDT", "side": "buy" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID mgnMode String Margin mode mgnCcy String Margin currency maxLoan String Max loan ccy String Currency side String Order side buy sell GET FEE RATES RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/trade-fee > Request Example Copy to Clipboard# Query trade fee rate of SPOT BTC-USDT GET /api/v5/account/trade-fee?instType=SPOT&instId=BTC-USDT Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get trading fee rates of current account result = accountAPI.get_fee_rates( instType="SPOT", instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SPOT MARGIN SWAP FUTURES OPTION instId String No Instrument ID, e.g. BTC-USDT Applicable to SPOT/MARGIN uly String No Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION ruleType String Yes Trading rule types normal: normal trading pre_market: pre-market trading ruleType can not be passed through together with instId/instFamily/uly > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "category": "1", //Deprecated "delivery": "", "exercise": "", "instType": "SPOT", "level": "lv1", "maker": "-0.0008", "makerU": "", "makerUSDC": "", "taker": "-0.001", "takerU": "", "takerUSDC": "", "ruleType": "normal", "ts": "1608623351857", "fiat": [] } ] } RESPONSE PARAMETERS Parameter Type Description level String Fee rate Level taker String For SPOT/MARGIN, it is taker fee rate of the USDT trading pairs. For FUTURES/SWAP/OPTION, it is the fee rate of crypto-margined contracts maker String For SPOT/MARGIN, it is maker fee rate of the USDT trading pairs. For FUTURES/SWAP/OPTION, it is the fee rate of crypto-margined contracts takerU String Taker fee rate of USDT-margined contracts, only applicable to FUTURES/SWAP makerU String Maker fee rate of USDT-margined contracts, only applicable to FUTURES/SWAP delivery String Delivery fee rate exercise String Fee rate for exercising the option instType String Instrument type takerUSDC String For SPOT/MARGIN, it is taker fee rate of the USDⓈ&Crypto trading pairs. For FUTURES/SWAP, it is the fee rate of USDC-margined contracts makerUSDC String For SPOT/MARGIN, it is maker fee rate of the USDⓈ&Crypto trading pairs. For FUTURES/SWAP, it is the fee rate of USDC-margined contracts ruleType String Trading rule types normal: normal trading pre_market: pre-market trading ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 category String Currency category. Note: this parameter is already deprecated fiat Array Details of fiat fee rate > ccy String Fiat currency. > taker String Taker fee rate > maker String Maker fee rate Remarks: The value of maker/taker: positive number, which means the rate of rebate; negative number, which means the rate of commission. USDⓈ represent the stablecoin besides USDT and USDC GET INTEREST ACCRUED DATA Get interest accrued data. Only data within the last one year can be obtained. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/interest-accrued > Request Example Copy to ClipboardGET /api/v5/account/interest-accrued Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get interest accrued data result = accountAPI.get_interest_accrued() print(result) REQUEST PARAMETERS Parameter Type Required Description type String No Loan type 1: VIP loans 2: Market loans Default is Market loans ccy String No Loan currency, e.g. BTC Only applicable to Market loans Only applicable toMARGIN instId String No Instrument ID, e.g. BTC-USDT Only applicable to Market loans mgnMode String No Margin mode cross isolated Only applicable to Market loans after String No Pagination of data to return records earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "instId": "", "interest": "0.0003960833333334", "interestRate": "0.0000040833333333", "liab": "97", "mgnMode": "", "ts": "1637312400000", "type": "1" }, { "ccy": "USDT", "instId": "", "interest": "0.0004083333333334", "interestRate": "0.0000040833333333", "liab": "100", "mgnMode": "", "ts": "1637049600000", "type": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description type String Loan type 1: VIP loans 2: Market loans ccy String Loan currency, e.g. BTC instId String Instrument ID, e.g. BTC-USDT Only applicable to Market loans mgnMode String Margin mode cross isolated interest String Interest interestRate String Interest rate (in hour) liab String Liability ts String Timestamp for interest accured, Unix timestamp format in milliseconds, e.g. 1597026383085 GET INTEREST RATE Get the user's current leveraged currency borrowing market interest rate RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/account/interest-rate > Request Example Copy to ClipboardGET /api/v5/account/interest-rate Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get the user's current leveraged currency borrowing interest rate result = accountAPI.get_interest_rate() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Currency, e.g. BTC Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ccy":"BTC", "interestRate":"0.0001" }, { "ccy":"LTC", "interestRate":"0.0003" } ] } RESPONSE PARAMETERS Parameter Type Description interestRate String interest rate(the current hour) ccy String currency SET GREEKS (PA/BS) Set the display type of Greeks. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-greeks > Request Example Copy to ClipboardPOST /api/v5/account/set-greeks body { "greeksType":"PA" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Set greeks (PA/BS) result = accountAPI.set_greeks(greeksType="PA") print(result) REQUEST PARAMETERS Parameter Type Required Description greeksType String Yes Display type of Greeks. PA: Greeks in coins BS: Black-Scholes Greeks in dollars > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "greeksType": "PA" }] } RESPONSE PARAMETERS Parameter Type Description greeksType String Display type of Greeks. ISOLATED MARGIN TRADING SETTINGS You can set the currency margin and futures/perpetual Isolated margin trading mode RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-isolated-mode > Request Example Copy to ClipboardPOST /api/v5/account/set-isolated-mode body { "isoMode":"automatic", "type":"MARGIN" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Isolated margin trading settings result = accountAPI.set_isolated_mode( isoMode="automatic", type="MARGIN" ) print(result) REQUEST PARAMETERS Parameter Type Required Description isoMode String Yes Isolated margin trading settings automatic: Auto transfers type String Yes Instrument type MARGIN CONTRACTS When there are positions and pending orders in the current account, the margin transfer mode from position to position cannot be adjusted. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "isoMode": "automatic" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description isoMode String Isolated margin trading settings automatic: Auto transfers CONTRACTS Auto transfers: Automatically occupy and release the margin when opening and closing positions MARGIN Auto transfers: Automatically borrow and return coins when opening and closing positions GET MAXIMUM WITHDRAWALS Retrieve the maximum transferable amount from trading account to funding account. If no currency is specified, the transferable amount of all owned currencies will be returned. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/max-withdrawal > Request Example Copy to ClipboardGET /api/v5/account/max-withdrawal Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get maximum withdrawals result = accountAPI.get_max_withdrawal() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "maxWd": "124", "maxWdEx": "125", "spotOffsetMaxWd": "", "spotOffsetMaxWdEx": "" }, { "ccy": "ETH", "maxWd": "10", "maxWdEx": "12", "spotOffsetMaxWd": "", "spotOffsetMaxWdEx": "" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency maxWd String Max withdrawal (excluding borrowed assets under Spot mode/Multi-currency margin/Portfolio margin) maxWdEx String Max withdrawal (including borrowed assets under Spot mode/Multi-currency margin/Portfolio margin) spotOffsetMaxWd String Max withdrawal under Spot-Derivatives risk offset mode (excluding borrowed assets under Portfolio margin) Applicable to Portfolio margin spotOffsetMaxWdEx String Max withdrawal under Spot-Derivatives risk offset mode (including borrowed assets under Portfolio margin) Applicable to Portfolio margin GET ACCOUNT RISK STATE Only applicable to Portfolio margin account RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/account/risk-state > Request Example Copy to ClipboardGET /api/v5/account/risk-state Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get account risk state result = accountAPI.get_account_position_risk() print(result) > Response Example Copy to Clipboard{ "code": "0", "data": [ { "atRisk": false, "atRiskIdx": [], "atRiskMgn": [], "ts": "1635745078794" } ], "msg": "" } RESPONSE PARAMETERS Parameters Types Description atRisk String Account risk status in auto-borrow mode true: the account is currently in a specific risk state false: the account is currently not in a specific risk state atRiskIdx Array derivatives risk unit list atRiskMgn Array margin risk unit list ts String Unix timestamp format in milliseconds, e.g.1597026383085 MANUAL BORROW AND REPAY IN QUICK MARGIN MODE Please note that this endpoint will be deprecated soon. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/quick-margin-borrow-repay > Request Example Copy to ClipboardPOST /api/v5/account/quick-margin-borrow-repay body { "instId":"BTC-USDT", "ccy":"USDT", "side":"borrow", "amt":"100" } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT ccy String Yes Loan currency, e.g. BTC side String Yes borrow repay amt String Yes borrow/repay amount > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "100", "instId":"BTC-USDT", "ccy": "USDT", "side": "borrow" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT ccy String Loan currency, e.g. BTC side String borrow repay amt String borrow/repay amount GET BORROW AND REPAY HISTORY IN QUICK MARGIN MODE Get record in the past 3 months. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/quick-margin-borrow-repay-history > Request Example Copy to ClipboardGET /api/v5/account/quick-margin-borrow-repay-history REQUEST PARAMETERS Parameter Type Required Description instId String No Instrument ID, e.g. BTC-USDT ccy String No Loan currency, e.g. BTC side String No borrow repay after String No Pagination of data to return records earlier than the requested refId before String No Pagination of data to return records newer than the requested refId begin String No Filter with a begin timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "instId": "BTC-USDT", "ccy": "USDT", "side": "borrow", "accBorrowed": "0.01", "amt": "0.005", "refId": "1637310691470124", "ts": "1637310691470" }, { "instId": "BTC-USDT", "ccy": "USDT", "side": "borrow", "accBorrowed": "0.01", "amt": "0.005", "refId": "1637310691470123", "ts": "1637310691400" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT ccy String Loan currency, e.g. BTC side String borrow repay accBorrowed String Accumulate borrow amount amt String borrow/repay amount refId String The ID of borrowing or repayment ts String Timestamp for Borrow/Repay VIP LOANS BORROW AND REPAY Maximum number of borrowing orders for a single currency is 20 RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/borrow-repay > Request Example Copy to ClipboardPOST /api/v5/account/borrow-repay body { "ccy":"USDT", "side":"borrow", "amt":"100" } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # VIP loans borrow and repay result = accountAPI.borrow_repay( ccy="USDT", side="borrow", amt="100" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Loan currency, e.g. BTC side String Yes borrow repay amt String Yes borrow/repay amount ordId String Conditional Order ID of borrowing, it is necessary while repaying > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "70809.316200", "ccy": "USDT", "ordId": "544199684697214976", "side": "borrow", "state": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Loan currency, e.g. BTC side String borrow repay amt String Already borrow/repay amount ordId String Order ID of borrowing state String State 1:Borrowing 2:Borrowed 3:Repaying 4:Repaid 5:Borrow failed GET BORROW AND REPAY HISTORY FOR VIP LOANS RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/borrow-repay-history > Request Example Copy to ClipboardGET /api/v5/account/borrow-repay-history Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get borrow and repay history for VIP loans result = accountAPI.get_borrow_repay_history() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Loan currency, e.g. BTC after String No Pagination of data to return records earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "tradedLoan": "102", "ts": "1637310691470", "type": "2", "usedLoan": "97" }, { "ccy": "USDT", "tradedLoan": "102", "ts": "1637050435058", "type": "2", "usedLoan": "199" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Loan currency, e.g. BTC type String Type 1: borrow 2: repay 3: Loan reversed, lack of balance for interest tradedLoan String Borrow/Repay amount usedLoan String Borrowed amount for current account ts String Timestamp for Borrow/Repay GET VIP INTEREST ACCRUED DATA RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/vip-interest-accrued > Request Example Copy to ClipboardGET /api/v5/account/vip-interest-accrued REQUEST PARAMETERS Parameter Type Required Description ccy String No Loan currency, e.g. BTC Only applicable toMARGIN ordId String No Order ID of borrowing after String No Pagination of data to return records earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "interest": "0.0003960833333334", "interestRate": "0.0000040833333333", "liab": "97", "ordId": "16373124000001235", "ts": "1637312400000" }, { "ccy": "USDT", "interest": "0.0004083333333334", "interestRate": "0.0000040833333333", "liab": "100", "ordId": "16370496000001234", "ts": "1637049600000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID of borrowing ccy String Loan currency, e.g. BTC interest String Interest interestRate String Interest rate (in hours) liab String Liability ts String Timestamp for interest accrued, Unix timestamp format in milliseconds, e.g. 1597026383085 GET VIP INTEREST DEDUCTED DATA RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/vip-interest-deducted > Request Example Copy to ClipboardGET /api/v5/account/vip-interest-deducted REQUEST PARAMETERS Parameter Type Required Description ccy String No Loan currency, e.g. BTC Only applicable toMARGIN ordId String No Order ID of borrowing after String No Pagination of data to return records earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "interest": "0.0003960833333334", "interestRate": "0.0000040833333333", "liab": "97", "ordId": "16373124000001235", "ts": "1637312400000" }, { "ccy": "USDT", "interest": "0.0004083333333334", "interestRate": "0.0000040833333333", "liab": "100", "ordId": "16370496000001234", "ts": "1637049600000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID of borrowing ccy String Loan currency, e.g. BTC interest String Interest interestRate String Interest rate (in hour) liab String Liability ts String Timestamp for interest accured, Unix timestamp format in milliseconds, e.g. 1597026383085 GET VIP LOAN ORDER LIST RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/vip-loan-order-list > Request Example Copy to ClipboardGET /api/v5/account/vip-loan-order-list REQUEST PARAMETERS Parameter Type Required Description ordId String No Order ID of borrowing state String No State 1:Borrowing 2:Borrowed 3:Repaying 4:Repaid 5:Borrow failed ccy String No Loan currency, e.g. BTC after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "borrowAmt": "1.5000000000000000", "ccy": "USDT", "curRate": "0.0000169999999992", "dueAmt": "0.0000000000000000", "nextRefreshTime": "1688172235000", "ordId": "584301085292781568", "origRate": "0.0000169999999992", "repayAmt": "1.5000000000000000", "state": "4", "ts": "1685580235000" } ] } RESPONSE PARAMETERS Parameter Type Description ts String Operation time, unix timestamp format in milliseconds, e.g. 1597026383085 nextRefreshTime String Next interest rate refresh time, unix timestamp format in milliseconds, e.g. 1597026383085 ccy String Loan currency, e.g. BTC ordId String Order ID state String State 1:Borrowing 2:Borrowed 3:Repaying 4:Repaid 5:Borrow failed origRate String Original rate of order curRate String Current annual rate of ccy dueAmt String Amount due borrowAmt String Amount borrowed repayAmt String Amount repaid GET VIP LOAN ORDER DETAIL RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/vip-loan-order-detail > Request Example Copy to ClipboardGET /api/v5/account/vip-loan-order-detail?ordId=697717437869338879 REQUEST PARAMETERS Parameter Type Required Description ordId String yes Order ID of loan ccy String No Loan currency, e.g. BTC after String No Pagination of data to return records earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "amt": "1.5000000000000000", "ccy": "USDT", "failReason": "", "rate": "0.0000000000000000", "ts": "1685580264572", "type": "2" } ] } RESPONSE PARAMETERS Parameter Type Description ts String Operation time ccy String Loan currency, e.g. BTC type String Operation Type: 1:Borrow 2:Repayment 3:System Repayment 4:Interest Rate Refresh rate String Current order rate (daily interest rate) amt String Borrow/repay amount failReason String Fail reason GET BORROW INTEREST AND LIMIT RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/interest-limits > Request Example Copy to ClipboardGET /api/v5/account/interest-limits?type=1&ccy=BTC Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get borrow interest and limit result = accountAPI.get_interest_limits( type="1", ccy="BTC" ) print(result) REQUEST PARAMETERS Parameter Type Required Description type String No Loan type 1: VIP loans 2: Market loans Default is Market loans ccy String No Loan currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "data": [ { "debt": "97.06402000000000000000000000000000", "interest": "", "nextDiscountTime": "1637312400000", "nextInterestTime": "1637312400000", "loanAlloc": "", "records": [ { "availLoan": "0.0000000000000000", "ccy": "BTC", "interest": "", "loanQuota": "600.0000000000000000", "posLoan": "0", "rate": "0.00199200", "surplusLmt": "600.0000000000000000", "surplusLmtDetails":{ "allAcctRemainingQuota": "600.00", "curAcctRemainingQuota": "600.00", "platRemainingQuota": "600.00" }, "usedLmt": "0", "usedLoan": "0.0000000000000000" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description debt String Current debt in USDT interest String Current interest in USDT, the unit is USDT Only applicable to Market loans nextDiscountTime String Next deduct time, Unix timestamp format in milliseconds, e.g. 1597026383085 nextInterestTime String Next accrual time, Unix timestamp format in milliseconds, e.g. 1597026383085 loanAlloc String VIP Loan allocation for the current trading account 1. The unit is percent(%). Range is [0, 100]. Precision is 0.01% 2. If master account did not assign anything, then "0" 3. "" if shared between master and sub-account records Array Details for currencies > ccy String Loan currency, e.g. BTC > rate String Current daily rate > loanQuota String Borrow limit of master account If loan allocation has been assigned, then it is the borrow limit of the current trading account > surplusLmt String Available amount across all sub-accounts If loan allocation has been assigned, then it is the available amount to borrow by the current trading account > surplusLmtDetails Object The details of available amount across all sub-accounts The value of surplusLmt is the minimum value within this array. It can help you judge the reason that surplusLmt is not enough. Only applicable to VIP loans >> allAcctRemainingQuota String Total remaining quota for master account and sub-accounts >> curAcctRemainingQuota String The remaining quota for the current account. Only applicable to the case in which the sub-account is assigned the loan allocation >> platRemainingQuota String Remaining quota for the platform. The format like "600" will be returned when it is more than curAcctRemainingQuota or allAcctRemainingQuota > usedLmt String Borrowed amount across all sub-accounts If loan allocation has been assigned, then it is the borrowed amount by the current trading account > interest String Interest to be deducted Only applicable to Market loans > posLoan String Frozen amount for current account (Within the locked quota) Only applicable to VIP loans > availLoan String Available amount for current account (Within the locked quota) Only applicable to VIP loans > usedLoan String Borrowed amount for current account Only applicable to VIP loans > avgRate String Average (hour) interest of already borrowed coin only applicable to VIP loans GET FIXED LOAN BORROW LIMIT RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/fixed-loan/borrowing-limit > Request Example Copy to ClipboardGET /api/v5/account/fixed-loan/borrowing-limit Copy to Clipboard REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "data": [ { "availRepay": "1110.9884", "borrowed": "60895.1139", "details": [ { "availBorrow": "0.0566", "borrowed": "0", "ccy": "BTC", "minBorrow": "0.1433", "used": "0" }, { "availBorrow": "0", "borrowed": "0", "ccy": "LTC", "minBorrow": "114.582", "used": "0" }, { "availBorrow": "10", "borrowed": "0", "ccy": "ETH", "minBorrow": "2.6666", "used": "0" }, { "availBorrow": "248727.5", "borrowed": "61115", "ccy": "USDT", "minBorrow": "9999.5679", "used": "60000" } ], "totalAvailBorrow": "289336.6564", "totalBorrowLmt": "22843016.1921", "ts": "1716368077071", "used": "59784.1256" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description totalBorrowLmt String (Master account and sub-accounts) Total borrow limit, unit in USD totalAvailBorrow String (Master account and sub-accounts) Total available amount to borrow, unit in USD borrowed String (Current account) Borrowed amount, unit in USD used String (Current account) Used amount, unit in USD availRepay String (Current account) Available amount to repay, unit in USD details Array of object Borrow limit info in details > ccy String Borrowing currency, e.g. BTC > used String Used amount of current currency > borrowed String Borrowed amount of current currency > availBorrow String Available amount to borrow of current currency > minBorrow String Minimum borrow amount ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET FIXED LOAN BORROW QUOTE RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/fixed-loan/borrowing-quote > Request Example Copy to Clipboard# Quote for new order GET /api/v5/account/fixed-loan/borrowing-quote?type=normal&ccy=BTC&maxRate=0.1&amt=0.1&term=30D # Quote for renew order GET /api/v5/account/fixed-loan/borrowing-quote?type=reborrow&ordId=2405162053378222 Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description type String Yes Type normal: new order reborrow: renew existing order ccy String Optional Borrowing currency, e.g. BTC if type=normal, the parameter is required. amt String Optional Borrowing amount if type=normal, the parameter is required. maxRate String Optional Maximum acceptable borrow rate, in decimal. e.g. 0.01 represents 1% if type=normal, the parameter is required. term String Optional Fixed term for borrowing order 30D:30 Days if type=normal, the parameter is required. ordId String Optional Order ID if type=reborrow, the parameter is required. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ccy": "BTC", "term":"30D", "estAvailBorrow":"0.1", "estRate": "0.01", "estInterest": "25", "penaltyInterest": "", "ts": "1629966436396" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Borrowing currency, e.g. BTC term String Fixed term for borrowing order 30D:30 Days estAvailBorrow String Estimated available borrowing amount estRate String Estimated borrowing rate, e.g. "0.01" estInterest String Estimated borrowing interest penaltyInterest String Penalty interest for reborrowing Applicate to type = reborrow, else return "" ts String Data return time,Unix timestamp format in milliseconds, e.g. 1597026383085 PLACE FIXED LOAN BORROWING ORDER For new borrowing orders, they belong to the IOC (immediately close and cancel the remaining) type. For renewal orders, they belong to the FOK (Fill-or-kill) type. Order book may refer to Get lending volume (public). RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/borrowing-order > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/borrowing-order body { "ccy": "BTC", "amt": "0.1", "maxRate": "0.01", "term": "30D", "reborrow": true, "reborrowRate": "0.01" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ccy String Yes Borrowing currency, e.g. BTC amt String Yes Borrowing amount maxRate String Yes Maximum acceptable borrow rate, in decimal. e.g. 0.01 represents 1%. term String Yes Fixed term for borrowing order 30D:30 Days reborrow Boolean No Whether or not auto-renew when the term is due true: auto-renew false: not auto-renew Default is false. reborrowRate String No Auto-renew borrowing rate, in decimal. e.g. 0.01 represents 1%. If reborrow is true, the parameter is required. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID AMEND FIXED LOAN BORROWING ORDER RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/amend-borrowing-order > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/amend-borrowing-order body { "ordId": "2405162053378222", "reborrow": true, "renewMaxRate": "0.01" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Borrowing order ID reborrow Boolean No Whether or not reborrowing when the term is due. Default is false. renewMaxRate String No Maximum acceptable auto-renew borrow rate for borrowing order, in decimal. e.g. 0.01 represents 1%. If reborrow is true, the parameter is required. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID MANUAL RENEW FIXED LOAN BORROWING ORDER RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/manual-reborrow > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/manual-reborrow body { "ordId": "2405162053378222", "maxRate": "0.01" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Borrowing order ID maxRate String Yes Maximum acceptable borrowing rate, in decimal. e.g. 0.01 represents 1%. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID REPAY FIXED LOAN BORROWING ORDER RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/repay-borrowing-order > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/repay-borrowing-order body { "ordId": "2405162053378222" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Borrowing order ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID CONVERT FIXED LOAN TO MARKET LOAN RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/convert-to-market-loan > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/convert-to-market-loan body { "ordId": "2409141848234868" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Borrowing order ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId": "2409141848234868" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID REDUCE LIABILITIES FOR FIXED LOAN Provide the function of "setting pending repay state / canceling pending repay state" for fixed loan order. Setting pending repay state • When your order status changes to pending repayment, and the repayment priority changes to fixed Loan first, followed by market loans. New liabilities are then allocated to market loans before fixed Loan. • After repayment, the repayment priority of this order’s crypto reverts to market loans first, followed by fixed Loan, with new liabilities allocated to fixed Loan before market loans. • When multiple orders are pending repayment, the order with the earliest maturity date takes priority. If the maturity date is the same, the order with the highest interest rate takes priority. If the interest rates are also the same, the largest order takes priority. Once you repay all the orders or cancel repayment, the repayment priority reverts to the default status. • You can close your margin position or transfer in the borrowed crypto to reduce liability. If the reduced liabilities are greater than the borrowing amount, repayment will be automatic. • Orders that are already in a pending repay state cannot be manually repaid. If manual repayment is required, the pending repay state should be cancelled. RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/fixed-loan/reduce-liabilities > Request Example Copy to ClipboardPOST /api/v5/account/fixed-loan/reduce-liabilities body { "ordId": "2409141802194350", "pendingRepay": true } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Borrowing order ID pendingRepay String Yes true: Set order state to pending repay false: Cancel pending repay state > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId": "2409141802194350", "pendingRepay": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Borrowing order ID pendingRepay String true: Set order state to pending repay false: Cancel pending repay state GET FIXED LOAN BORROW ORDER LIST RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/fixed-loan/borrowing-orders-list > Request Example Copy to ClipboardGET /api/v5/account/fixed-loan/borrowing-orders-list Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String No Borrowing order ID ccy String No Borrowing currency, e.g. BTC state String No State 1: Borrowing 2: Borrowed 3: Settled (Repaid) 4: Borrow failed 5: Overdue 6: Settling 7: Reborrowing 8: Pending repay (more details refer to Reduce liabilities for fixed loan) after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accruedInterest": "0.0065753424657534", "actualBorrowAmt": "0", "cTime": "1720701491000", "ccy": "ETH", "curRate": "0", "deadlinePenaltyInterest": "1723271891000", "earlyRepayPenaltyInterest": "", "expiryTime": "1723293491000", "failedReason": "1", "forceRepayTime": "1725885491000", "ordId": "2407112038109533", "overduePenaltyInterest": "", "potentialPenaltyInterest": "", "reborrow": false, "reborrowRate": "", "reqBorrowAmt": "8", "settleReason": "", "state": "4", "term": "30D", "uTime": "1720701490000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Borrowing currency, e.g. BTC ordId String Borrowing order ID term String Fixed term for borrowing order 30D: 30 days state String State 1: Borrowing 2: Borrowed 3: Settled (Repaid) 4: Borrow failed 5: Overdue 6: Settling 7: Reborrowing 8: Pending repay (more details refer to Reduce liabilities for fixed loan) failedReason String Borrowing failed reason 1: There are currently no matching orders 2: Unable to pay prepaid interest -1: Other reason settleReason String Settle reason 1: Order at maturity 2: Extension in advance 3: Early repayment curRate String Borrowing annual rate of current order accruedInterest String Accrued interest reqBorrowAmt String Requested borrowing mount actualBorrowAmt String Actual borrowed mount reborrow Boolean Whether or not auto-renew when the term is due true: auto-renew false: not auto-renew reborrowRate String Auto-renew borrowing rate, in decimal. e.g. 0.01 represents 1% expiryTime String Expiry time, Unix timestamp format in milliseconds, e.g. 1597026383085 forceRepayTime String Force repayment time, unix timestamp format in milliseconds, e.g. 1597026383085 deadlinePenaltyInterest String Deadline of penalty interest for early repayment, Unix timestamp format in milliseconds, e.g. 1597026383085 potentialPenaltyInterest String Potential penalty Interest for early repayment overduePenaltyInterest String Overdue penalty interest earlyRepayPenaltyInterest String Early repay penalty interest cTime String Creation time for borrowing order, unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Update time for borrowing order, unix timestamp format in milliseconds, e.g. 1597026383085 POSITION BUILDER (NEW) Calculates portfolio margin information for virtual position/assets or current position of the user. You can add up to 200 virtual positions and 200 virtual assets in one request. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID PERMISSIONS: READ HTTP REQUEST POST /api/v5/account/position-builder > Request Example Copy to Clipboard# Both real and virtual positions and assets are calculated POST /api/v5/account/position-builder body { "inclRealPosAndEq": false, "simPos":[ { "pos":"-10", "instId":"BTC-USDT-SWAP" }, { "pos":"10", "instId":"LTC-USDT-SWAP" } ], "simAsset":[ { "ccy": "USDT", "amt": "100" } ], "spotOffsetType":"1", "greeksType":"CASH" } # Only existing real positions are calculated POST /api/v5/account/position-builder body { "inclRealPosAndEq":true } # Only virtual positions are calculated POST /api/v5/account/position-builder body { "inclRealPosAndEq": false, "simPos":[ { "pos":"10", "instId":"BTC-USDT-SWAP" }, { "pos":"10", "instId":"LTC-USDT-SWAP" } ] } Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) result = accountAPI.position_builder( inclRealPosAndEq=True, simPos=[ { "pos": "10", "instId": "BTC-USDT-SWAP" }, { "pos": "10", "instId": "LTC-USDT-SWAP" } ] ) print(result) REQUEST PARAMETERS Parameter Type Required Description inclRealPosAndEq Boolean No Whether import existing positions and assets The default is true spotOffsetType String No Spot-derivatives risk offset mode 1: Spot-derivatives (USDT) 2: Spot-derivatives (crypto) 3: Derivatives-only The default is 3 simPos Array of object No List of simulated positions > instId String No Instrument ID, e.g. BTC-USDT-SWAP Applicable to SWAP/FUTURES/OPTION > pos String No Quantity of positions simAsset Array of object No List of simulated assets When inclRealPosAndEq is true, only real assets are considered and virtual assets are ignored > ccy String No Currency, e.g. BTC > amt String No Currency amount greeksType String No Greeks type BS: Black-Scholes Model Greeks PA: Crypto Greeks CASH: Empirical Greeks The default is BS > Response Example Copy to Clipboard{ "code": "0", "data": [ { "assets": [ { "availEq": "2.92259509161", "borrowImr": "0", "borrowMmr": "0", "ccy": "BTC", "spotInUse": "0" }, { "availEq": "1", "borrowImr": "0", "borrowMmr": "0", "ccy": "ETH", "spotInUse": "0" }, { "availEq": "-76819.72721896428", "borrowImr": "9612.484308105535", "borrowMmr": "1920.4931804741072", "ccy": "USDT", "spotInUse": "0" }, { "availEq": "100.000001978", "borrowImr": "0", "borrowMmr": "0", "ccy": "OKB", "spotInUse": "0" }, { "availEq": "1.1618286584225905", "borrowImr": "0", "borrowMmr": "0", "ccy": "USDC", "spotInUse": "0" } ], "borrowMmr": "1919.9362374517698", "derivMmr": "61.63384859899599", "eq": "50503.83298678435", "marginRatio": "24.513003004865656", "riskUnitData": [ { "delta": "0.010000438961223", "gamma": "0", "imr": "79.93948582424999", "indexUsd": "0.99971", "mmr": "61.49191217249999", "mr1": "61.49191217249999", "mr1FinalResult": { "pnl": "-61.49191217249999", "spotShock": "-0.15", "volShock": "up" }, "mr1Scenarios": { "volSame": { "0": "0", "-0.05": "-20.497304057499974", "-0.1": "-40.99460811500002", "0.1": "40.99460811500002", "0.15": "61.49191217249999", "0.05": "20.497304057499974", "-0.15": "-61.49191217249999" }, "volShockDown": { "0": "0", "-0.05": "-20.497304057499974", "-0.1": "-40.99460811500002", "0.1": "40.99460811500002", "0.15": "61.49191217249999", "0.05": "20.497304057499974", "-0.15": "-61.49191217249999" }, "volShockUp": { "0": "0", "-0.05": "-20.497304057499974", "-0.1": "-40.99460811500002", "0.1": "40.99460811500002", "0.15": "61.49191217249999", "0.05": "20.497304057499974", "-0.15": "-61.49191217249999" } }, "mr2": "0", "mr3": "0", "mr4": "0", "mr5": "0", "mr6": "61.49191217249999", "mr6FinalResult": { "pnl": "-122.98382434499997", "spotShock": "-0.3" }, "mr7": "1.8448113495150003", "portfolios": [ { "amt": "10", "delta": "0.010000438961223", "gamma": "0", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "isRealPos": false, "notionalUsd": "409.968", "theta": "0", "vega": "0" } ], "riskUnit": "BTC-USDT", "theta": "0", "vega": "0" }, { "delta": "0.009998760367833", "gamma": "0", "imr": "0.1845173544448", "indexUsd": "0.99971", "mmr": "0.141936426496", "mr1": "0.141936426496", "mr1FinalResult": { "pnl": "-0.141936426496", "spotShock": "-0.2", "volShock": "volatility_shock_up" }, "mr1Scenarios": { "volSame": { "0": "0", "-0.07": "-0.0496777492736", "-0.2": "-0.141936426496", "0.07": "0.0496777492736", "0.2": "0.141936426496", "0.14": "0.0993554985472", "-0.14": "-0.0993554985472" }, "volShockDown": { "0": "0", "-0.07": "-0.0496777492736", "-0.2": "-0.141936426496", "0.07": "0.0496777492736", "0.2": "0.141936426496", "0.14": "0.0993554985472", "-0.14": "-0.0993554985472" }, "volShockUp": { "0": "0", "-0.07": "-0.0496777492736", "-0.2": "-0.141936426496", "0.07": "0.0496777492736", "0.2": "0.141936426496", "0.14": "0.0993554985472", "-0.14": "-0.0993554985472" } }, "mr2": "0", "mr3": "0", "mr4": "0", "mr5": "0", "mr6": "0.141936426496", "mr6FinalResult": { "pnl": "-0.283872852992", "spotShock": "-0.4" }, "mr7": "0.004967159106", "portfolios": [ { "amt": "10", "delta": "0.009998760367833", "gamma": "0", "instId": "LTC-USDT-SWAP", "instType": "SWAP", "isRealPos": false, "notionalUsd": "0.7098000000000001", "theta": "0", "vega": "0" } ], "riskUnit": "LTC-USDT", "theta": "0", "vega": "0" } ], "totalImr": "9689.820690834878", "totalMmr": "1981.5700860507657", "ts": "1705915813386" } ], "msg": "" } RESPONSE PARAMETERS Parameters Types Description eq String Adjusted equity (USD) for the account totalMmr String Total MMR (USD) for the account totalImr String Total IMR (USD) for the account borrowMmr String Borrow MMR (USD) for the account derivMmr String Derivatives MMR (USD) for the account marginRatio String Cross margin ratio for the account ts String Update time for the account, Unix timestamp format in milliseconds, e.g. 1597026383085 assets Array of object Asset info > ccy String Currency, e.g. BTC > availEq String Currency equity > spotInUse String Spot in use > borrowMmr String Borrowing MMR (USD) > borrowImr String Borrowing IMR (USD) riskUnitData Array of object Risk unit info > riskUnit String Risk unit, e.g. BTC-USDT > indexUsd String Risk unit index price (USD) > mmr String Risk unit MMR (USD) > imr String Risk unit IMR (USD) > mr1 String Stress testing value of spot and volatility (all derivatives, and spot trading in spot-derivatives risk offset mode) > mr2 String Stress testing value of time value of money (TVM) (for options) > mr3 String Stress testing value of volatility span (for options) > mr4 String Stress testing value of basis (for all derivatives) > mr5 String Stress testing value of interest rate risk (for options) > mr6 String Stress testing value of extremely volatile markets (for all derivatives, and spot trading in spot-derivatives risk offset mode) > mr7 String Stress testing value of position reduction cost (for all derivatives) > mr1Scenarios Object MR1 scenario analysis >> volShockDown Object When the volatility shock down, the P&L of stress tests under different price volatility ratios, format in {change: value,...} change: price volatility ratio (in percentage), e.g. 0.01 representing 1% value: P&L under stress tests, measured in USD e.g. {"-0.15":"-2333.23", ...} >> volSame Object When the volatility keep the same, the P&L of stress tests under different price volatility ratios, format in {change: value,...} change: price volatility ratio (in percentage), e.g. 0.01 representing 1% value: P&L under stress tests, measured in USD e.g. {"-0.15":"-2333.23", ...} >> volShockUp Object When the volatility shock up, the P&L of stress tests under different price volatility ratios, format in {change: value,...} change: price volatility ratio (in percentage), e.g. 0.01 representing 1% value: P&L under stress tests, measured in USD e.g. {"-0.15":"-2333.23", ...} > mr1FinalResult Object MR1 worst-case scenario >> pnl String MR1 stress P&L (USD) >> spotShock String MR1 worst-case scenario spot shock (in percentage), e.g. 0.01 representing 1% >> volShock String MR1 worst-case scenario volatility shock down: volatility shock down unchange: volatility unchanged up: volatility shock up > mr6FinalResult String MR6 scenario analysis >> pnl String MR6 stress P&L (USD) >> spotShock String MR6 worst-case scenario spot shock (in percentage), e.g. 0.01 representing 1% > delta String (Risk unit) The rate of change in the contract’s price with respect to changes in the underlying asset’s price. When the price of the underlying changes by x, the option’s price changes by delta multiplied by x. > gamma String (Risk unit) The rate of change in the delta with respect to changes in the underlying price. When the price of the underlying changes by x%, the option’s delta changes by gamma multiplied by x%. > theta String (Risk unit) The change in contract price each day closer to expiry. > vega String (Risk unit) The change of the option price when underlying volatility increases by 1%. > portfolios Array of object Portfolios info >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> instType String Instrument type SPOT SWAP FUTURES OPTION >> amt String When instType is SPOT, it represents spot in use. When instType is SWAP/FUTURES/OPTION, it represents position amount. >> notionalUsd String Notional in USD >> delta String When instType is SPOT, it represents asset amount. When instType is SWAP/FUTURES/OPTION, it represents the rate of change in the contract’s price with respect to changes in the underlying asset’s price (by Instrument ID). >> gamma String The rate of change in the delta with respect to changes in the underlying price (by Instrument ID). When instType is SPOT, it will returns "". >> theta String The change in contract price each day closer to expiry (by Instrument ID). When instType is SPOT, it will returns "". >> vega String The change of the option price when underlying volatility increases by 1% (by Instrument ID). When instType is SPOT, it will returns "". >> isRealPos Boolean Whether it is a real position If instType is SWAP/FUTURES/OPTION, it is a valid parameter, else it will returns false SET RISK OFFSET AMOUNT Set risk offset amount. This does not represent the actual spot risk offset amount. Only applicable to Portfolio Margin Mode. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-riskOffset-amt > Request Example Copy to Clipboard# Set spot risk offset amount POST /api/v5/account/set-riskOffset-amt { "ccy": "BTC", "clSpotInUseAmt": "0.5" } REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency clSpotInUseAmt String Yes Spot risk offset amount defined by users > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ccy": "BTC", "clSpotInUseAmt": "0.5" } ] } RESPONSE PARAMETERS Parameters Types Description ccy String Currency clSpotInUseAmt String Spot risk offset amount defined by users GET GREEKS Retrieve a greeks list of all assets in the account. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/account/greeks > Request Example Copy to Clipboard# Get the greeks of all assets in the account GET /api/v5/account/greeks # Get the greeks of BTC assets in the account GET /api/v5/account/greeks?ccy=BTC Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Retrieve a greeks list of all assets in the account result = accountAPI.get_greeks() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Single currency, e.g. BTC. > Response Example Copy to Clipboard{ "code":"0", "data":[ { "thetaBS": "", "thetaPA":"", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "vegaBS":"", "vegaPA":"", "ccy":"BTC", "ts":"1620282889345" } ], "msg":"" } RESPONSE PARAMETERS Parameters Types Description deltaBS String delta: Black-Scholes Greeks in dollars deltaPA String delta: Greeks in coins gammaBS String gamma: Black-Scholes Greeks in dollars, only applicable to OPTION gammaPA String gamma: Greeks in coins, only applicable to OPTION thetaBS String theta: Black-Scholes Greeks in dollars, only applicable to OPTION thetaPA String theta: Greeks in coins, only applicable to OPTION vegaBS String vega: Black-Scholes Greeks in dollars, only applicable to OPTION vegaPA String vega:Greeks in coins, only applicable to OPTION ccy String Currency ts String Time of getting Greeks, Unix timestamp format in milliseconds, e.g. 1597026383085 GET PM POSITION LIMITATION Retrieve cross position limitation of SWAP/FUTURES/OPTION under Portfolio margin mode. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/position-tiers > Request Example Copy to Clipboard# Query limitation of BTC-USDT GET /api/v5/account/position-tiers?instType=SWAP&uly=BTC-USDT Copy to Clipboardimport okx.Account as Account # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 accountAPI = Account.AccountAPI(apikey, secretkey, passphrase, False, flag) # Get PM position limitation result = accountAPI.get_account_position_tiers( instType="SWAP", uly="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SWAP FUTURES OPTION uly String Conditional Single underlying or multiple underlyings (no more than 3) separated with comma. Either uly or instFamily is required. If both are passed, instFamily will be used. instFamily String Conditional Single instrument family or instrument families (no more than 5) separated with comma. Either uly or instFamily is required. If both are passed, instFamily will be used. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "instFamily": "BTC-USDT", "maxSz": "10000", "posType": "", "uly": "BTC-USDT" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description uly String Underlying Applicable to FUTURES/SWAP/OPTION instFamily String Instrument family Applicable to FUTURES/SWAP/OPTION maxSz String Max number of positions posType String Limitation of position type, only applicable to cross OPTION under portfolio margin mode 1: Contracts of pending orders and open positions for all derivatives instruments. 2: Contracts of pending orders for all derivatives instruments. 3: Pending orders for all derivatives instruments. 4: Contracts of pending orders and open positions for all derivatives instruments on the same side. 5: Pending orders for one derivatives instrument. 6: Contracts of pending orders and open positions for one derivatives instrument. 7: Contracts of one pending order. SET RISK OFFSET TYPE Configure the risk offset type in portfolio margin mode. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-riskOffset-type > Request Example Copy to ClipboardPOST /api/v5/account/set-riskOffset-type body { "type":"1" } REQUEST PARAMETERS Parameter Type Required Description type String Yes Risk offset type 1: Spot-derivatives (USDT) risk offset 2: Spot-derivatives (Crypto) risk offset 3:Derivatives only mode 4: Spot-derivatives (USDC) risk offset > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "type": "1" }] } RESPONSE PARAMETERS Parameter Type Description type String Risk offset type 1: Spot-derivatives (USDT) risk offset 2: Spot-derivatives (Crypto) risk offset 3:Derivatives only mode 4: Spot-derivatives (USDC) risk offset ACTIVATE OPTION RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/activate-option > Request Example Copy to ClipboardPOST /api/v5/account/activate-option REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ts": "1600000000000" }] } RESPONSE PARAMETERS Parameter Type Description ts String Activation time SET AUTO LOAN Only applicable to Multi-currency margin and Portfolio margin RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-auto-loan > Request Example Copy to ClipboardPOST /api/v5/account/set-auto-loan body { "autoLoan":true, } REQUEST PARAMETERS Parameter Type Required Description autoLoan Boolean No Whether to automatically make loans Valid values are true, false The default is true > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "autoLoan": true }] } RESPONSE PARAMETERS Parameter Type Description autoLoan Boolean Whether to automatically make loans SET ACCOUNT MODE You need to set on the Web/App for the first set of every account mode. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/set-account-level > Request Example Copy to ClipboardPOST /api/v5/account/set-account-level body { "acctLv":"1" } REQUEST PARAMETERS Parameter Type Required Description acctLv String Yes Account mode 1: Spot mode 2: Spot and futures mode 3: Multi-currency margin code 4: Portfolio margin mode > Response Example Copy to Clipboard{ "code": "0", "data": [ { "acctLv": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description acctLv String Account mode RESET MMP STATUS You can unfreeze by this endpoint once MMP is triggered. Only applicable to Option in Portfolio Margin mode, and MMP privilege is required. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/mmp-reset > Request Example Copy to ClipboardPOST /api/v5/account/mmp-reset body { "instType":"OPTION", "instFamily":"BTC-USD" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type OPTION The default is `OPTION instFamily String Yes Instrument family > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "result":true } ] } RESPONSE PARAMETERS Parameter Type Description result Boolean Result of the request true, false SET MMP This endpoint is used to set MMP configure Only applicable to Option in Portfolio Margin mode, and MMP privilege is required. What is MMP? Market Maker Protection (MMP) is an automated mechanism for market makers to pull their quotes when their executions exceed a certain threshold(`qtyLimit`) within a certain time frame(`timeInterval`). Once mmp is triggered, any pre-existing mmp pending orders(`mmp` and `mmp_and_post_only` orders) will be automatically canceled, and new orders tagged as MMP will be rejected for a specific duration(`frozenInterval`), or until manual reset by makers. How to enable MMP? Please send an email to institutional@okx.com or contact your business development (BD) manager to apply for MMP. The initial threshold will be upon your request. RATE LIMIT: 2 REQUESTS PER 10 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/mmp-config > Request Example Copy to ClipboardPOST /api/v5/account/mmp-config body { "instFamily":"BTC-USD", "timeInterval":"5000", "frozenInterval":"2000", "qtyLimit": "100" } REQUEST PARAMETERS Parameter Type Required Description instFamily String Yes Instrument family timeInterval String Yes Time window (ms). MMP interval where monitoring is done "0" means disable MMP frozenInterval String Yes Frozen period (ms). "0" means the trade will remain frozen until you request "Reset MMP Status" to unfrozen qtyLimit String Yes Trade qty limit in number of contracts Must be > 0 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "frozenInterval":"2000", "instFamily":"BTC-USD", "qtyLimit": "100", "timeInterval":"5000" } ] } RESPONSE PARAMETERS Parameter Type Description instFamily String Instrument family timeInterval String Time window (ms). MMP interval where monitoring is done frozenInterval String Frozen period (ms). qtyLimit String Trade qty limit in number of contracts GET MMP CONFIG This endpoint is used to get MMP configure information Only applicable to Option in Portfolio Margin mode, and MMP privilege is required. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/mmp-config > Request Example Copy to ClipboardGET /api/v5/account/mmp-config?instFamily=BTC-USD REQUEST PARAMETERS Parameter Type Required Description instFamily String No Instrument Family > Response Example Copy to Clipboard{ "code": "0", "data": [ { "frozenInterval": "2000", "instFamily": "ETH-USD", "mmpFrozen": true, "mmpFrozenUntil": "2326882", "qtyLimit": "10", "timeInterval": "5000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instFamily String Instrument Family mmpFrozen Boolean Whether MMP is currently triggered. true or false mmpFrozenUntil String If frozenInterval is configured and mmpFrozen = True, it is the time interval (in ms) when MMP is no longer triggered, otherwise "". timeInterval String Time window (ms). MMP interval where monitoring is done frozenInterval String Frozen period (ms). "0" means the trade will remain frozen until manually reset qtyLimit String Trade qty limit in number of contracts WEBSOCKET ACCOUNT CHANNEL Retrieve account information. Data will be pushed when triggered by events such as placing order, canceling order, transaction execution, etc. It will also be pushed in regular interval according to subscription granularity. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "account", "ccy": "BTC" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "account", "extraParams": " { \"updateInterval\": \"0\" } " } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name account > ccy String No Currency > extraParams String No Additional configuration >> updateInterval int No 0: only push due to account events The data will be pushed both by events and regularly if this field is omitted or set to other values than 0. The following format should be strictly obeyed when using this field. "extraParams": " { \"updateInterval\": \"0\" } " > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "account", "ccy": "BTC" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "account" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"account\", \"ccy\" : \"BTC\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name account > ccy String No Currency code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "account", "uid": "44*********584" }, "data": [{ "adjEq": "55444.12216906034", "borrowFroz": "0", "details": [{ "availBal": "4734.371190691436", "availEq": "4734.371190691435", "borrowFroz": "0", "cashBal": "4750.426970691436", "ccy": "USDT", "coinUsdPrice": "0.99927", "crossLiab": "0", "disEq": "4889.379316336831", "eq": "4892.951170691435", "eqUsd": "4889.379316336831", "smtSyncEq": "0", "fixedBal": "0", "frozenBal": "158.57998", "imr": "", "interest": "0", "isoEq": "0", "isoLiab": "0", "isoUpl": "0", "liab": "0", "maxLoan": "0", "mgnRatio": "", "mmr": "", "notionalLever": "", "ordFrozen": "0", "rewardBal": "0", "spotInUseAmt": "", "clSpotInUseAmt": "", "maxSpotInUseAmt": "", "spotIsoBal": "0", "stgyEq": "150", "twap": "0", "uTime": "1705564213903", "upl": "-7.475800000000003", "uplLiab": "0", "spotBal": "", "openAvgPx": "", "accAvgPx": "", "spotUpl": "", "spotUplRatio": "", "totalPnl": "", "totalPnlRatio": "" }], "imr": "8.5737166146", "isoEq": "0", "mgnRatio": "143705.65988369548", "mmr": "0.342948664584", "notionalUsd": "85.737166146", "ordFroz": "0", "totalEq": "55868.06403501676", "uTime": "1705564223311", "upl": "-7.470342666000003" }] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier data Array Subscribed data > uTime String The latest time to get account information, millisecond format of Unix timestamp, e.g. 1597026383085 > totalEq String The total amount of equity in USD > isoEq String Isolated margin equity in USD Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > adjEq String Adjusted / Effective equity in USD The net fiat value of the assets in the account that can provide margins for spot, expiry futures, perpetual futures and options under the cross-margin mode. In multi-ccy or PM mode, the asset and margin requirement will all be converted to USD value to process the order check or liquidation. Due to the volatility of each currency market, our platform calculates the actual USD value of each currency based on discount rates to balance market risks. Applicable to Spot mode/Multi-currency margin/Portfolio margin > ordFroz String Margin frozen for pending cross orders in USD Only applicable to Spot mode/Multi-currency margin > imr String Initial margin requirement in USD The sum of initial margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin > mmr String Maintenance margin requirement in USD The sum of maintenance margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin > borrowFroz String Potential borrowing IMR of the account in USD Only applicable to Spot mode/Multi-currency margin/Portfolio margin. It is "" for other margin modes. > mgnRatio String Margin ratio in USD. Applicable to Spot mode/Multi-currency margin/Portfolio margin > notionalUsd String Notional value of positions in USD Applicable to Spot mode/Multi-currency margin/Portfolio margin > upl String Cross-margin info of unrealized profit and loss at the account level in USD Applicable to Multi-currency margin/Portfolio margin > details Array Detailed asset information in all currencies >> ccy String Currency >> eq String Equity of currency >> cashBal String Cash Balance >> uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 >> isoEq String Isolated margin equity of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin >> availEq String Available equity of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin >> disEq String Discount equity of currency in USD >> fixedBal String Frozen balance for Dip Sniper and Peak Sniper >> availBal String Available balance of currency >> frozenBal String Frozen balance of currency >> ordFrozen String Margin frozen for open orders Applicable to Spot mode/Spot and futures mode/Multi-currency margin >> liab String Liabilities of currency It is a positive value, e.g. 21625.64. Applicable to Spot mode/Multi-currency margin/Portfolio margin >> upl String The sum of the unrealized profit & loss of all margin and derivatives positions of currency. Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin >> uplLiab String Liabilities due to Unrealized loss of currency Applicable to Multi-currency margin/Portfolio margin >> crossLiab String Cross Liabilities of currency Applicable to Spot mode/Multi-currency margin/Portfolio margin >> isoLiab String Isolated Liabilities of currency Applicable to Multi-currency margin/Portfolio margin >> rewardBal String Trial fund balance >> mgnRatio String Cross margin ratio of currency The index for measuring the risk of a certain asset in the account. Applicable to Spot and futures mode and when there is cross position >> imr String Cross initial margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position >> mmr String Cross maintenance margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position >> interest String Interest of currency It is a positive value, e.g."9.01". Applicable to Spot mode/Multi-currency margin/Portfolio margin >> twap String System is forced repayment(TWAP) indicator Divided into multiple levels from 0 to 5, the larger the number, the more likely the auto repayment will be triggered. Applicable to Spot mode/Multi-currency margin/Portfolio margin >> maxLoan String Max loan of currency Applicable to cross of Spot mode/Multi-currency margin/Portfolio margin >> eqUsd String Equity USD of currency >> borrowFroz String Potential borrowing IMR of currency in USD Only applicable to Spot mode/Multi-currency margin/Portfolio margin. It is "" for other margin modes. >> notionalLever String Leverage of currency Applicable to Spot and futures mode >> coinUsdPrice String Price index USD of currency >> stgyEq String strategy equity >> isoUpl String Isolated unrealized profit and loss of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin >> spotInUseAmt String Spot in use amount Applicable to Portfolio margin >> clSpotInUseAmt String User-defined spot risk offset amount Applicable to Portfolio margin >> maxSpotInUseAmt String Max possible spot risk offset amount Applicable to Portfolio margin >> smtSyncEq String Smark sync equity The default is "0", only applicable to copy trader "" will be returned for inapplicable fields under the current account level. When multiple orders are being executed at the same time, the changes of account data will be aggregated into one as much as possible. Initial snapshot: Only currencies with non-zero balance will be pushed. Definition of non-zero balance: any value of eq, availEq, availBql parameters is not 0. If the data is too large to be sent in a single push message, it will be split into multiple messages. Data pushed in regular interval: Only currencies with non-zero balance will be pushed. Definition of non-zero balance: any value of eq, availEq, availBql parameters is not 0. For example, when subscribing to account channel without specifying ccy and there are 5 currencies are with non-zero balance, all 5 currencies data will be pushed in initial snapshot and in regular interval. Subsequently when there is change in balance or equity of an token, only the incremental data of that currency will be pushed triggered by this change. POSITIONS CHANNEL Retrieve position information. Initial snapshot will be pushed according to subscription granularity. Data will be pushed when triggered by events such as placing/canceling order, and will also be pushed in regular interval according to subscription granularity. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "positions", "instType": "FUTURES", "instFamily": "BTC-USD", "instId": "BTC-USD-200329" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "positions", "instType": "ANY", "extraParams": " { \"updateInterval\": \"0\" } " } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name positions > instType String Yes Instrument type MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > extraParams String No Additional configuration >> updateInterval int No 0: only push due to positions events 2000, 3000, 4000: push by events and regularly according to the time interval setting (ms) The data will be pushed both by events and around per 5 seconds regularly if this field is omitted or set to other values than the valid values above. The following format should be strictly followed when using this field. "extraParams": " { \"updateInterval\": \"0\" } " > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "positions", "instType": "FUTURES", "instFamily": "BTC-USD", "instId": "BTC-USD-200329" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "positions", "instType": "ANY" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"positions\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type OPTION FUTURES SWAP MARGIN ANY > instFamily String No Instrument family > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg":{ "channel":"positions", "uid": "77982378738415879", "instType":"FUTURES" }, "data":[ { "adl":"1", "availPos":"1", "avgPx":"2566.31", "cTime":"1619507758793", "ccy":"ETH", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "imr":"", "instId":"ETH-USD-210430", "instType":"FUTURES", "interest":"0", "idxPx":"2566.13", "last":"2566.22", "lever":"10", "liab":"", "liabCcy":"", "liqPx":"2352.8496681818233", "markPx":"2353.849", "margin":"0.0003896645377994", "mgnMode":"isolated", "mgnRatio":"11.731726509588816", "mmr":"0.0000311811092368", "notionalUsd":"2276.2546609009605", "optVal":"", "pTime":"1619507761462", "pendingCloseOrdLiabVal":"0.1", "pos":"1", "baseBorrowed": "", "baseInterest": "", "quoteBorrowed": "", "quoteInterest": "", "posCcy":"", "posId":"307173036051017730", "posSide":"long", "spotInUseAmt": "", "clSpotInUseAmt": "", "maxSpotInUseAmt": "", "bizRefId": "", "bizRefType": "", "spotInUseCcy": "", "thetaBS":"", "thetaPA":"", "tradeId":"109844", "uTime":"1619507761462", "upl":"-0.0000009932766034", "uplLastPx":"-0.0000009932766034", "uplRatio":"-0.0025490556801078", "uplRatioLastPx":"-0.0025490556801078", "vegaBS":"", "vegaPA":"", "realizedPnl":"0.001", "pnl":"0.0011", "fee":"-0.0001", "fundingFee":"0", "liqPenalty":"0", "closeOrderAlgo":[ { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.6" }, { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.4" } ] } ] } > Push Data Example Copy to Clipboard{ "arg": { "channel": "positions", "uid": "77982378738415879", "instType": "ANY" }, "data": [ { "adl":"1", "availPos":"1", "avgPx":"2566.31", "cTime":"1619507758793", "ccy":"ETH", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "imr":"", "instId":"ETH-USD-210430", "instType":"FUTURES", "interest":"0", "idxPx":"2566.13", "last":"2566.22", "usdPx":"", "bePx":"2353.949", "lever":"10", "liab":"", "liabCcy":"", "liqPx":"2352.8496681818233", "markPx":"2353.849", "margin":"0.0003896645377994", "mgnMode":"isolated", "mgnRatio":"11.731726509588816", "mmr":"0.0000311811092368", "notionalUsd":"2276.2546609009605", "optVal":"", "pTime":"1619507761462", "pendingCloseOrdLiabVal":"0.1", "pos":"1", "baseBorrowed": "", "baseInterest": "", "quoteBorrowed": "", "quoteInterest": "", "posCcy":"", "posId":"307173036051017730", "posSide":"long", "spotInUseAmt": "", "clSpotInUseAmt": "", "maxSpotInUseAmt": "", "spotInUseCcy": "", "bizRefId": "", "bizRefType": "", "thetaBS":"", "thetaPA":"", "tradeId":"109844", "uTime":"1619507761462", "upl":"-0.0000009932766034", "uplLastPx":"-0.0000009932766034", "uplRatio":"-0.0025490556801078", "uplRatioLastPx":"-0.0025490556801078", "vegaBS":"", "vegaPA":"", "realizedPnl":"0.001", "pnl":"0.0011", "fee":"-0.0001", "fundingFee":"0", "liqPenalty":"0", "closeOrderAlgo":[ { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.6" }, { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.4" } ] }, { "adl":"1", "availPos":"1", "avgPx":"2566.31", "cTime":"1619507758793", "ccy":"ETH", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "imr":"", "instId":"ETH-USD-SWAP", "instType":"SWAP", "interest":"0", "idxPx":"2566.13", "last":"2566.22", "usdPx":"", "bePx":"2353.949", "lever":"10", "liab":"", "liabCcy":"", "liqPx":"2352.8496681818233", "markPx":"2353.849", "margin":"0.0003896645377994", "mgnMode":"isolated", "mgnRatio":"11.731726509588816", "mmr":"0.0000311811092368", "notionalUsd":"2276.2546609009605", "optVal":"", "pTime":"1619507761462", "pendingCloseOrdLiabVal":"0.1", "pos":"1", "baseBorrowed": "", "baseInterest": "", "quoteBorrowed": "", "quoteInterest": "", "posCcy":"", "posId":"307173036051017730", "posSide":"long", "spotInUseAmt": "", "clSpotInUseAmt": "", "maxSpotInUseAmt": "", "spotInUseCcy": "", "bizRefId": "", "bizRefType": "", "thetaBS":"", "thetaPA":"", "tradeId":"109844", "uTime":"1619507761462", "upl":"-0.0000009932766034", "uplLastPx":"-0.0000009932766034", "uplRatio":"-0.0025490556801078", "uplRatioLastPx":"-0.0025490556801078", "vegaBS":"", "vegaPA":"", "realizedPnl":"0.001", "pnl":"0.0011", "fee":"-0.0001", "fundingFee":"0", "liqPenalty":"0", "closeOrderAlgo":[ { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.6" }, { "algoId":"123", "slTriggerPx":"123", "slTriggerPxType":"mark", "tpTriggerPx":"123", "tpTriggerPxType":"mark", "closeFraction":"0.4" } ] } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type > instFamily String Instrument family > instId String Instrument ID data Array Subscribed data > instType String Instrument type > mgnMode String Margin mode, cross isolated > posId String Position ID > posSide String Position side long short net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. MARGIN: posCcy being base currency means long position, posCcy being quote currency means short position.) > pos String Quantity of positions. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred > baseBal String Base currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > quoteBal String Quote currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > baseBorrowed String Base currency amount already borrowed, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > baseInterest String Base Interest, undeducted interest that has been incurred, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > quoteBorrowed String Quote currency amount already borrowed, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > quoteInterest String Quote Interest, undeducted interest that has been incurred, only applicable to MARGIN(Quick Margin Mode)(Deprecated) > posCcy String Position currency, only applicable to MARGIN positions > availPos String Position that can be closed Only applicable to MARGIN, FUTURES/SWAP in the long-short mode and OPTION. For Margin position, the rest of sz will be SPOT trading after the liability is repaid while closing the position. Please get the available reduce-only amount from "Get maximum available tradable amount" if you want to reduce the amount of SPOT trading as much as possible. > avgPx String Average open price > upl String Unrealized profit and loss calculated by mark price. > uplRatio String Unrealized profit and loss ratio calculated by mark price. > uplLastPx String Unrealized profit and loss calculated by last price. Main usage is showing, actual value is upl. > uplRatioLastPx String Unrealized profit and loss ratio calculated by last price. > instId String Instrument ID, e.g. BTC-USDT-SWAP > lever String Leverage, not applicable to OPTION seller > liqPx String Estimated liquidation price Not applicable to OPTION > markPx String Latest Mark price > imr String Initial margin requirement, only applicable to cross > margin String Margin, can be added or reduced. Only applicable to isolated Margin. > mgnRatio String Margin ratio > mmr String Maintenance margin requirement > liab String Liabilities, only applicable to MARGIN. > liabCcy String Liabilities currency, only applicable to MARGIN. > interest String Interest accrued that has not been settled. > tradeId String Last trade ID > notionalUsd String Notional value of positions in USD > optVal String Option Value, only applicable to OPTION. > pendingCloseOrdLiabVal String The amount of close orders of isolated margin liability. > adl String Auto decrease line, signal area Divided into 5 levels, from 1 to 5, the smaller the number, the weaker the adl intensity. > bizRefId String External business id, e.g. experience coupon id > bizRefType String External business type > ccy String Currency used for margin > last String Latest traded price > idxPx String Latest underlying index price > usdPx String Latest USD price of the ccy on the market, only applicable to OPTION > bePx String Breakeven price > deltaBS String delta: Black-Scholes Greeks in dollars, only applicable to OPTION > deltaPA String delta: Greeks in coins, only applicable to OPTION > gammaBS String gamma: Black-Scholes Greeks in dollars, only applicable to OPTION > gammaPA String gamma: Greeks in coins, only applicable to OPTION > thetaBS String theta: Black-Scholes Greeks in dollars, only applicable to OPTION > thetaPA String theta: Greeks in coins, only applicable to OPTION > vegaBS String vega: Black-Scholes Greeks in dollars, only applicable to OPTION > vegaPA String vega: Greeks in coins, only applicable to OPTION > spotInUseAmt String Spot in use amount Applicable to Portfolio margin > spotInUseCcy String Spot in use unit, e.g. BTC Applicable to Portfolio margin > clSpotInUseAmt String User-defined spot risk offset amount Applicable to Portfolio margin > maxSpotInUseAmt String Max possible spot risk offset amount Applicable to Portfolio margin > realizedPnl String Realized profit and loss Only applicable to FUTURES/SWAP/OPTION realizedPnl=pnl+fee+fundingFee+liqPenalty > pnl String Accumulated pnl of closing order(s) > fee String Accumulated fee Negative number represents the user transaction fee charged by the platform.Positive number represents rebate. > fundingFee String Accumulated funding fee > liqPenalty String Accumulated liquidation penalty. It is negative when there is a value. > closeOrderAlgo Array Close position algo orders attached to the position. This array will have values only after you request "Place algo order" with closeFraction=1. >> algoId String Algo ID >> slTriggerPx String Stop-loss trigger price. >> slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price >> tpTriggerPx String Take-profit trigger price. >> tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price >> closeFraction String Fraction of position to be closed when the algo order is triggered. > cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085. > uTime String Latest time position was adjusted, Unix timestamp format in milliseconds, e.g. 1597026383085. > pTime String Push time of positions information, Unix timestamp format in milliseconds, e.g. 1597026383085. When multiple orders are being executed at the same time, the changes of position data will be aggregated into one as much as possible. As for portfolio margin account, the IMR and MMR of the position are calculated in risk unit granularity, thus their values of the same risk unit cross positions are the same. In the position-by-position trading setting, it is an autonomous transfer mode. After the margin is transferred, positions with a position of 0 will be pushed Initial snapshot: Only position with non-zero position quantity will be pushed. Definition of non-zero quantity: value of pos parameter is not 0. If the data is too large to be sent in a single push message, it will be split into multiple messages. Data pushed in regular interval: Only position with non-zero position quantity will be pushed. Definition of non-zero quantity: value of pos parameter is not 0. For example, when subscribing to positions channel specifying an underlying and there are 20 positions are with non-zero quantity, all 20 positions data will be pushed in initial snapshot and in regular interval. Subsequently when there is change in pos of a position, only the data of that position will be pushed triggered by this change. BALANCE AND POSITION CHANNEL Retrieve account balance and position information. Data will be pushed when triggered by events such as filled order, funding transfer. This channel applies to getting the account cash balance and the change of position asset ASAP. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "balance_and_position" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name balance_and_position > Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "balance_and_position" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"balance_and_position\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No List of subscribed channels > channel String Yes Channel name balance_and_position code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "balance_and_position", "uid": "77982378738415879" }, "data": [{ "pTime": "1597026383085", "eventType": "snapshot", "balData": [{ "ccy": "BTC", "cashBal": "1", "uTime": "1597026383085" }], "posData": [{ "posId": "1111111111", "tradeId": "2", "instId": "BTC-USD-191018", "instType": "FUTURES", "mgnMode": "cross", "posSide": "long", "pos": "10", "ccy": "BTC", "posCcy": "", "avgPx": "3320", "uTIme": "1597026383085" }], "trades": [{ "instId": "BTC-USD-191018", "tradeId": "2", }] }] } PUSH DATA PARAMETERS Parameter Type Description arg Object Channel to subscribe to > channel String Channel name > uid String User Identifier data Array Subscribed data > pTime String Push time of both balance and position information, millisecond format of Unix timestamp, e.g. 1597026383085 > eventType String Event Type snapshot,delivered,exercised,transferred,filled,liquidation,claw_back,adl,funding_fee,adjust_margin,set_leverage,interest_deduction > balData String Balance data >> ccy String Currency >> cashBal String Cash Balance >> uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > posData String Position data >> posId String Position ID >> tradeId String Last trade ID >> instId String Instrument ID, e.g BTC-USD-180213 >> instType String Instrument type >> mgnMode String Margin mode isolated, cross >> avgPx String Average open price >> ccy String Currency used for margin >> posSide String Position side long, short, net >> pos String Quantity of positions. In the isolated margin mode, when doing manual transfers, a position with pos of 0 will be generated after the deposit is transferred >> baseBal String Base currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) >> quoteBal String Quote currency balance, only applicable to MARGIN(Quick Margin Mode)(Deprecated) >> posCcy String Position currency, only applicable to MARGIN positions. >> uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > trades Array Details of trade >> instId String Instrument ID, e.g. BTC-USDT >> tradeId String Trade ID Only balData will be pushed if only the account balance changes; only posData will be pushed if only the position changes. Initial snapshot: Only either position with non-zero position quantity or cash balance with non-zero quantity will be pushed. If the data is too large to be sent in a single push message, it will be split into multiple messages. For example, if you subscribe according to all currencies and the user has 5 currency balances that are not 0 and 20 positions, all 20 positions data and 5 currency balances data will be pushed in initial snapshot; Subsequently when there is change in pos of a position, only the data of that position will be pushed triggered by this change. POSITION RISK WARNING This push channel is only used as a risk warning, and is not recommended as a risk judgment for strategic trading In the case that the market is volatile, there may be the possibility that the position has been liquidated at the same time that this message is pushed. The warning is sent when a position is at risk of liquidation for isolated margin positions. The warning is sent when all the positions are at risk of liquidation for cross-margin positions. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "liquidation-warning", "instType": "ANY" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name liquidation-warning > instType String Yes Instrument type MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "liquidation-warning", "instType": "ANY" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"liquidation-warning\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type OPTION FUTURES SWAP MARGIN ANY > instFamily String No Instrument family > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"liquidation-warning", "uid": "77982378738415879", "instType":"FUTURES" }, "data":[ { "cTime":"1619507758793", "ccy":"ETH", "instId":"ETH-USD-210430", "instType":"FUTURES", "lever":"10", "markPx":"2353.849", "mgnMode":"isolated", "mgnRatio":"11.731726509588816", "pTime":"1619507761462", "pos":"1", "posCcy":"", "posId":"307173036051017730", "posSide":"long", "uTime":"1619507761462", } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type > instFamily String Instrument family > instId String Instrument ID data Array Subscribed data > instType String Instrument type > mgnMode String Margin mode, cross isolated > posId String Position ID > posSide String Position side long short net (FUTURES/SWAP/OPTION: positive pos means long position and negative pos means short position. MARGIN: posCcy being base currency means long position, posCcy being quote currency means short position.) > pos String Quantity of positions > posCcy String Position currency, only applicable to MARGIN positions > instId String Instrument ID, e.g. BTC-USDT-SWAP > lever String Leverage, not applicable to OPTION seller > markPx String Mark price > mgnRatio String Margin ratio > ccy String Currency used for margin > cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085. > uTime String Latest time position was adjusted, Unix timestamp format in milliseconds, e.g. 1597026383085. > pTime String Push time of positions information, Unix timestamp format in milliseconds, e.g. 1597026383085. Trigger push logic: the trigger logic of the liquidation warning and the liquidation message is the same ACCOUNT GREEKS CHANNEL Retrieve account greeks information. Data will be pushed when triggered by events such as increase/decrease positions or cash balance in account, and will also be pushed in regular interval according to subscription granularity. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "account-greeks", "ccy": "BTC" }] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "account-greeks" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name account-greeks > ccy String No Currency > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "account-greeks", "ccy": "BTC" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "account-greeks" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"account-greeks\", \"ccy\" : \"BTC\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name,account-greeks > ccy String No Currency code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg": { "channel": "account-greeks", "uid": "77982378738415879", "ccy": "BTC" }, "data": [ { "thetaBS": "", "thetaPA":"", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "vegaBS":"", "vegaPA":"", "ccy":"BTC", "ts":"1620282889345" } ] } > Push Data Example Copy to Clipboard{ "arg": { "channel": "account-greeks", "uid": "77982378738415879", "ccy": "BTC" }, "data": [ { "thetaBS": "", "thetaPA":"", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "vegaBS":"", "vegaPA":"", "ccy":"BTC", "ts":"1620282889345" }, { "thetaBS": "", "thetaPA":"", "deltaBS":"", "deltaPA":"", "gammaBS":"", "gammaPA":"", "vegaBS":"", "vegaPA":"", "ccy":"USDT", "ts":"1620282889345" } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier data Array Subscribed data > deltaBS String delta: Black-Scholes Greeks in dollars > deltaPA String delta: Greeks in coins > gammaBS String gamma: Black-Scholes Greeks in dollars, only applicable to OPTION > gammaPA String gamma: Greeks in coins, only applicable to OPTION > thetaBS String theta: Black-Scholes Greeks in dollars, only applicable to OPTION > thetaPA String theta: Greeks in coins, only applicable to OPTION > vegaBS String vega: Black-Scholes Greeks in dollars, only applicable to OPTION > vegaPA String vega: Greeks in coins, only applicable to OPTION > ccy String Currency > ts String Push time of account greeks, Unix timestamp format in milliseconds, e.g. 1597026383085 Initial snapshot: Only currencies in the account will be pushed. If the data is too large to be sent in a single push message, it will be split into multiple messages. Data pushed in regular interval: Only currencies in the account will be pushed. For example, when subscribing to account-greeks channel without specifying ccy and there are 5 currencies are with non-zero balance, all 5 currencies data will be pushed in initial snapshot and in regular interval. Subsequently when there is change in balance or equity of an token, only the incremental data of that currency will be pushed triggered by this change. ORDER BOOK TRADING TRADE All Trade API endpoints require authentication. POST / PLACE ORDER You can place an order only if you have sufficient funds. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. HTTP REQUEST POST /api/v5/trade/order > Request Example Copy to Clipboard place order for SPOT POST /api/v5/trade/order body { "instId":"BTC-USDT", "tdMode":"cash", "clOrdId":"b15", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Spot mode, limit order result = tradeAPI.place_order( instId="BTC-USDT", tdMode="cash", clOrdId="b15", side="buy", ordType="limit", px="2.15", sz="2" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT tdMode String Yes Trade mode Margin mode cross isolated Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading, tdMode should be spot_isolated for SPOT lead trading.) ccy String No Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. side String Yes Order side, buy sell posSide String Conditional Position side The default is net in the net mode It is required in the long/short mode, and can only be long or short. Only applicable to FUTURES/SWAP. ordType String Yes Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order (applicable only to Expiry Futures and Perpetual Futures). mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) sz String Yes Quantity to buy or sell px String Conditional Order price. Only applicable to limit,post_only,fok,ioc,mmp,mmp_and_post_only order. When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in pxUsd String Conditional Place options orders in USD Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in pxVol String Conditional Place options orders based on implied volatility, where 1 represents 100% Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in reduceOnly Boolean No Whether orders can only reduce in position size. Valid options: true or false. The default value is false. Only applicable to MARGIN orders, and FUTURES/SWAP orders in net mode Only applicable to Spot and futures mode and Multi-currency margin tgtCcy String No Whether the target currency uses the quote or base currency. base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell banAmend Boolean No Whether to disallow the system from amending the size of the SPOT Market Order. Valid options: true or false. The default value is false. If true, system will not amend and reject the market order if user does not have sufficient funds. Only applicable to SPOT Market Orders quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) stpId String No Self trade prevention ID. Orders from the same master account with the same ID will be prevented from self trade. Numerical integers defined by user in the range of 1<= x<= 999999999 (deprecated) stpMode String No Self trade prevention mode. Default to cancel maker cancel_maker,cancel_taker, cancel_both Cancel both does not support FOK. attachAlgoOrds Array of object No TP/SL information attached when placing order > attachAlgoClOrdId String No Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Conditional Take-profit trigger price For condition TP order, if you fill in this parameter, you should fill in the take-profit order price as well. > tpOrdPx String Conditional Take-profit order price For condition TP order, if you fill in this parameter, you should fill in the take-profit trigger price as well. For limit TP order, you need to fill in this parameter, take-profit trigger needn‘t to be filled. If the price is -1, take-profit will be executed at the market price. > tpOrdKind String No TP order kind condition limit The default is condition > slTriggerPx String Conditional Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slOrdPx String Conditional Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. > tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last > slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last > sz String Conditional Size. Only applicable to TP order of split TPs, and it is required for TP order of split TPs > amendPxOnTriggerType String No Whether to enable Cost-price SL. Only applicable to SL order of split TPs. Whether slTriggerPx will move to avgPx when the first TP order is triggered 0: disable, the default value 1: Enable > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "clOrdId": "oktswap6", "ordId": "312269865356374016", "tag": "", "ts":"1695190491421", "sCode": "0", "sMsg": "" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection or success message of event execution. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 tdMode Trade Mode, when placing an order, you need to specify the trade mode. Spot mode: - SPOT and OPTION buyer: cash Spot and futures mode: - Isolated MARGIN: isolated - Cross MARGIN: cross - SPOT: cash - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated Multi-currency margin mode: - Isolated MARGIN: isolated - Cross SPOT: cross - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated Portfolio margin: - Isolated MARGIN: isolated - Cross SPOT: cross - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among the clOrdIds of all pending orders. posSide Position side, this parameter is not mandatory in net mode. If you pass it through, the only valid value is net. In long/short mode, it is mandatory. Valid values are long or short. In long/short mode, side and posSide need to be specified in the combinations below: Open long: buy and open long (side: fill in buy; posSide: fill in long) Open short: sell and open short (side: fill in sell; posSide: fill in short) Close long: sell and close long (side: fill in sell; posSide: fill in long) Close short: buy and close short (side: fill in buy; posSide: fill in short) Portfolio margin mode: Expiry Futures and Perpetual Futures only support net mode ordType Order type. When creating a new order, you must specify the order type. The order type you specify will affect: 1) what order parameters are required, and 2) how the matching system executes your order. The following are valid order types: limit: Limit order, which requires specified sz and px. market: Market order. For SPOT and MARGIN, market order will be filled with market price (by swiping opposite order book). For Expiry Futures and Perpetual Futures, market order will be placed to order book with most aggressive price allowed by Price Limit Mechanism. For OPTION, market order is not supported yet. As the filled price for market orders cannot be determined in advance, OKX reserves/freezes your quote currency by an additional 5% for risk check. post_only: Post-only order, which the order can only provide liquidity to the market and be a maker. If the order would have executed on placement, it will be canceled instead. fok: Fill or kill order. If the order cannot be fully filled, the order will be canceled. The order would not be partially filled. ioc: Immediate or cancel order. Immediately execute the transaction at the order price, cancel the remaining unfilled quantity of the order, and the order quantity will not be displayed in the order book. optimal_limit_ioc: Market order with ioc (immediate or cancel). Immediately execute the transaction of this market order, cancel the remaining unfilled quantity of the order, and the order quantity will not be displayed in the order book. Only applicable to Expiry Futures and Perpetual Futures. sz Quantity to buy or sell. For SPOT/MARGIN Buy and Sell Limit Orders, it refers to the quantity in base currency. For MARGIN Buy Market Orders, it refers to the quantity in quote currency. For MARGIN Sell Market Orders, it refers to the quantity in base currency. For SPOT Market Orders, it is set by tgtCcy. For FUTURES/SWAP/OPTION orders, it refers to the number of contracts. reduceOnly When placing an order with this parameter set to true, it means that the order will reduce the size of the position only For the same MARGIN instrument, the coin quantity of all reverse direction pending orders adds `sz` of new `reduceOnly` order cannot exceed the position assets. After the debt is paid off, if there is a remaining size of orders, the position will not be opened in reverse, but will be traded in SPOT. For the same FUTURES/SWAP instrument, the sum of the current order size and all reverse direction reduce-only pending orders which’s price-time priority is higher than the current order, cannot exceed the contract quantity of position. Only applicable to `Spot and futures mode` and `Multi-currency margin` Only applicable to `MARGIN` orders, and `FUTURES`/`SWAP` orders in `net` mode Notice: Under long/short mode of Expiry Futures and Perpetual Futures, all closing orders apply the reduce-only feature which is not affected by this parameter. tgtCcy This parameter is used to specify the order quantity in the order request is denominated in the quantity of base or quote currency. This is applicable to SPOT Market Orders only. Base currency: base_ccy Quote currency: quote_ccy If you use the Base Currency quantity for buy market orders or the Quote Currency for sell market orders, please note: 1. If the quantity you enter is greater than what you can buy or sell, the system will execute the order according to your maximum buyable or sellable quantity. If you want to trade according to the specified quantity, you should use Limit orders. 2. When the market price is too volatile, the locked balance may not be sufficient to buy the Base Currency quantity or sell to receive the Quote Currency that you specified. We will change the quantity of the order to execute the order based on best effort principle based on your account balance. In addition, we will try to over lock a fraction of your balance to avoid changing the order quantity. 2.1 Example of base currency buy market order: Taking the market order to buy 10 LTCs as an example, and the user can buy 11 LTC. At this time, if 10 < 11, the order is accepted. When the LTC-USDT market price is 200, and the locked balance of the user is 3,000 USDT, as 200*10 < 3,000, the market order of 10 LTC is fully executed; If the market is too volatile and the LTC-USDT market price becomes 400, 400*10 > 3,000, the user's locked balance is not sufficient to buy using the specified amount of base currency, the user's maximum locked balance of 3,000 USDT will be used to settle the trade. Final transaction quantity becomes 3,000/400 = 7.5 LTC. 2.2 Example of quote currency sell market order: Taking the market order to sell 1,000 USDT as an example, and the user can sell 1,200 USDT, 1,000 < 1,200, the order is accepted. When the LTC-USDT market price is 200, and the locked balance of the user is 6 LTC, as 1,000/200 < 6, the market order of 1,000 USDT is fully executed; If the market is too volatile and the LTC-USDT market price becomes 100, 100*6 < 1,000, the user's locked balance is not sufficient to sell using the specified amount of quote currency, the user's maximum locked balance of 6 LTC will be used to settle the trade. Final transaction quantity becomes 6 * 100 = 600 USDT. px The value for px must be a multiple of tickSz for OPTION orders. If not, the system will apply the rounding rules below. Using tickSz 0.0005 as an example: The px will be rounded up to the nearest 0.0005 when the remainder of px to 0.0005 is more than 0.00025 or `px` is less than 0.0005. The px will be rounded down to the nearest 0.0005 when the remainder of px to 0.0005 is less than 0.00025 and `px` is more than 0.0005. For placing order with TP/Sl, TP/SL algo order will be generated only when this order is filled fully, or there is no TP/SL algo order generated. Lead trader can‘t use attachAlgoOrds (Array), advice to user previous method, more details can refer to https://www.okx.com/docs-v5/log_en/#2022-11-21 Attaching TP/SL is neither supported for market buy with tgtCcy is base_ccy or market sell with tgtCcy is quote_ccy Mandatory self trade prevention (STP) The trading platform imposes mandatory self trade prevention at master account level, which means the accounts under the same master account, including master account itself and all its affiliated sub-accounts, will be prevented from self trade. The default STP mode is `Cancel Maker`. Users can also utilize the stpMode request parameter of the placing order endpoint to determine the stpMode of a certain order. Mandatory self trade prevention will not lead to latency. There are three STP modes. The STP mode is always taken based on the configuration in the taker order. 1. Cancel Maker: This is the default STP mode, which cancels the maker order to prevent self-trading. Then, the taker order continues to match with the next order based on the order book priority. 2. Cancel Taker: The taker order is canceled to prevent self-trading. If the user's own maker order is lower in the order book priority, the taker order is partially filled and then canceled. FOK orders are always honored and canceled if they would result in self-trading. 3. Cancel Both: Both taker and maker orders are canceled to prevent self-trading. If the user's own maker order is lower in the order book priority, the taker order is partially filled. Then, the remaining quantity of the taker order and the first maker order are canceled. FOK orders are not supported in this mode. POST / PLACE MULTIPLE ORDERS Place orders in batches. Maximum 20 orders can be placed per request. Request parameters should be passed in the form of an array. Orders will be placed in turn RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Place order`. HTTP REQUEST POST /api/v5/trade/batch-orders > Request Example Copy to Clipboard batch place order for SPOT POST /api/v5/trade/batch-orders body [ { "instId":"BTC-USDT", "tdMode":"cash", "clOrdId":"b15", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" }, { "instId":"BTC-USDT", "tdMode":"cash", "clOrdId":"b16", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } ] Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Place multiple orders place_orders_without_clOrdId = [ {"instId": "BTC-USDT", "tdMode": "cash", "clOrdId": "b15", "side": "buy", "ordType": "limit", "px": "2.15", "sz": "2"}, {"instId": "BTC-USDT", "tdMode": "cash", "clOrdId": "b16", "side": "buy", "ordType": "limit", "px": "2.15", "sz": "2"} ] result = tradeAPI.place_multiple_orders(place_orders_without_clOrdId) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT tdMode String Yes Trade mode Margin mode cross isolated Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading, tdMode should be spot_isolated for SPOT lead trading.) ccy String No Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. side String Yes Order side buy sell posSide String Conditional Position side The default is net in the net mode It is required in the long/short mode, and can only be long or short. Only applicable to FUTURES/SWAP. ordType String Yes Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order (applicable only to Expiry Futures and Perpetual Futures). mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) sz String Yes Quantity to buy or sell px String Conditional Order price. Only applicable to limit,post_only,fok,ioc,mmp,mmp_and_post_only order. When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in pxUsd String Conditional Place options orders in USD Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in pxVol String Conditional Place options orders based on implied volatility, where 1 represents 100% Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in reduceOnly Boolean No Whether the order can only reduce position size. Valid options: true or false. The default value is false. Only applicable to MARGIN orders, and FUTURES/SWAP orders in net mode Only applicable to Spot and futures mode and Multi-currency margin tgtCcy String No Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell banAmend Boolean No Whether to disallow the system from amending the size of the SPOT Market Order. Valid options: true or false. The default value is false. If true, system will not amend and reject the market order if user does not have sufficient funds. Only applicable to SPOT Market Orders quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) stpId String No Self trade prevention ID. Orders from the same master account with the same ID will be prevented from self trade. Numerical integers defined by user in the range of 1<= x<= 999999999 (deprecated) stpMode String No Self trade prevention mode. Default to cancel maker cancel_maker,cancel_taker, cancel_both Cancel both does not support FOK. attachAlgoOrds Array of object No TP/SL information attached when placing order > attachAlgoClOrdId String No Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Conditional Take-profit trigger price For condition TP order, if you fill in this parameter, you should fill in the take-profit order price as well. > tpOrdPx String Conditional Take-profit order price For condition TP order, if you fill in this parameter, you should fill in the take-profit trigger price as well. For limit TP order, you need to fill in this parameter, take-profit trigger needn't to be filled. If the price is -1, take-profit will be executed at the market price. > tpOrdKind String No TP order kind condition limit The default is condition > slTriggerPx String Conditional Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slOrdPx String Conditional Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. > tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last > slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last > sz String Conditional Size. Only applicable to TP order of split TPs, and it is required for TP order of split TPs > amendPxOnTriggerType String No Whether to enable Cost-price SL. Only applicable to SL order of split TPs. Whether slTriggerPx will move to avgPx when the first TP order is triggered 0: disable, the default value 1: Enable > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"oktswap6", "ordId":"12345689", "tag":"", "ts":"1695190491421", "sCode":"0", "sMsg":"" }, { "clOrdId":"oktswap7", "ordId":"12344", "tag":"", "ts":"1695190491421", "sCode":"0", "sMsg":"" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection or success message of event execution. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 In the `Portfolio Margin` account mode, either all orders are accepted by the system successfully, or all orders are rejected by the system. clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among all pending orders and the current request. POST / CANCEL ORDER Cancel an incomplete order. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST POST /api/v5/trade/cancel-order > Request Example Copy to ClipboardPOST /api/v5/trade/cancel-order body { "ordId":"590908157585625111", "instId":"BTC-USD-190927" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Cancel order result = tradeAPI.cancel_order(instId="BTC-USDT", ordId="590908157585625111") print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT ordId String Conditional Order ID Either ordId or clOrdId is required. If both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"oktswap6", "ordId":"12345689", "ts":"1695190491421", "sCode":"0", "sMsg":"" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 Cancel order returns with sCode equal to 0. It is not strictly considered that the order has been canceled. It only means that your cancellation request has been accepted by the system server. The result of the cancellation is subject to the state pushed by the order channel or the get order state. POST / CANCEL MULTIPLE ORDERS Cancel incomplete orders in batches. Maximum 20 orders can be canceled per request. Request parameters should be passed in the form of an array. RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Cancel order`. HTTP REQUEST POST /api/v5/trade/cancel-batch-orders > Request Example Copy to ClipboardPOST /api/v5/trade/cancel-batch-orders body [ { "instId":"BTC-USDT", "ordId":"590908157585625111" }, { "instId":"BTC-USDT", "ordId":"590908544950571222" } ] Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Cancel multiple orders by ordId cancel_orders_with_orderId = [ {"instId": "BTC-USDT", "ordId": "590908157585625111"}, {"instId": "BTC-USDT", "ordId": "590908544950571222"} ] result = tradeAPI.cancel_multiple_orders(cancel_orders_with_orderId) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT ordId String Conditional Order ID Either ordId or clOrdId is required. If both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"oktswap6", "ordId":"12345689", "ts":"1695190491421", "sCode":"0", "sMsg":"" }, { "clOrdId":"oktswap7", "ordId":"12344", "ts":"1695190491421", "sCode":"0", "sMsg":"" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 POST / AMEND ORDER Amend an incomplete order. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. HTTP REQUEST POST /api/v5/trade/amend-order > Request Example Copy to ClipboardPOST /api/v5/trade/amend-order body { "ordId":"590909145319051111", "newSz":"2", "instId":"BTC-USDT" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Amend order result = tradeAPI.amend_order( instId="BTC-USDT", ordId="590909145319051111", newSz="2" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID cxlOnFail Boolean No Whether the order needs to be automatically canceled when the order amendment fails Valid options: false or true, the default is false. ordId String Conditional Order ID Either ordId or clOrdId is required. If both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. The response will include the corresponding reqId to help you identify the request if you provide it in the request. newSz String Conditional New quantity after amendment and it has to be larger than 0. When amending a partially-filled order, the newSz should include the amount that has been filled. newPx String Conditional New price after amendment. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. It must be consistent with parameters when placing orders. For example, if users placed the order using px, they should use newPx when modifying the order. newPxUsd String Conditional Modify options orders using USD prices Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. newPxVol String Conditional Modify options orders based on implied volatility, where 1 represents 100% Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. attachAlgoOrds Array of object No TP/SL information attached when placing order > attachAlgoId String Conditional The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Conditional Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > newTpTriggerPx String Conditional Take-profit trigger price. Either the take profit trigger price or order price is 0, it means that the take profit is deleted. > newTpOrdPx String Conditional Take-profit order price If the price is -1, take-profit will be executed at the market price. > newTpOrdKind String No TP order kind condition limit > newSlTriggerPx String Conditional Stop-loss trigger price Either the stop loss trigger price or order price is 0, it means that the stop loss is deleted. > newSlOrdPx String Conditional Stop-loss order price If the price is -1, stop-loss will be executed at the market price. > newTpTriggerPxType String Conditional Take-profit trigger price type last: last price index: index price mark: mark price Only applicable to FUTURES/SWAP If you want to add the take-profit, this parameter is required > newSlTriggerPxType String Conditional Stop-loss trigger price type last: last price index: index price mark: mark price Only applicable to FUTURES/SWAP If you want to add the stop-loss, this parameter is required > sz String Conditional New size. Only applicable to TP order of split TPs, and it is required for TP order of split TPs > amendPxOnTriggerType String No Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"", "ordId":"12344", "ts":"1695190491421", "reqId":"b12344", "sCode":"0", "sMsg":"" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > reqId String Client Request ID as assigned by the client for order amendment. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 newSz If the new quantity of the order is less than or equal to the filled quantity when you are amending a partially-filled order, the order status will be changed to filled. The amend order returns sCode equal to 0. It is not strictly considered that the order has been amended. It only means that your amend order request has been accepted by the system server. The result of the amend is subject to the status pushed by the order channel or the order status query POST / AMEND MULTIPLE ORDERS Amend incomplete orders in batches. Maximum 20 orders can be amended per request. Request parameters should be passed in the form of an array. RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Amend order`. HTTP REQUEST POST /api/v5/trade/amend-batch-orders > Request Example Copy to ClipboardPOST /api/v5/trade/amend-batch-orders body [ { "ordId":"590909308792049444", "newSz":"2", "instId":"BTC-USDT" }, { "ordId":"590909308792049555", "newSz":"2", "instId":"BTC-USDT" } ] Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Amend incomplete orders in batches by ordId amend_orders_with_orderId = [ {"instId": "BTC-USDT", "ordId": "590909308792049444","newSz":"2"}, {"instId": "BTC-USDT", "ordId": "590909308792049555","newSz":"2"} ] result = tradeAPI.amend_multiple_orders(amend_orders_with_orderId) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID cxlOnFail Boolean No Whether the order needs to be automatically canceled when the order amendment fails false true, the default is false. ordId String Conditional Order ID Either ordId or clOrdIdis required, if both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. The response will include the corresponding reqId to help you identify the request if you provide it in the request. newSz String Conditional New quantity after amendment and it has to be larger than 0. When amending a partially-filled order, the newSz should include the amount that has been filled. newPx String Conditional New price after amendment. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. It must be consistent with parameters when placing orders. For example, if users placed the order using px, they should use newPx when modifying the order. newPxUsd String Conditional Modify options orders using USD prices Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. newPxVol String Conditional Modify options orders based on implied volatility, where 1 represents 100% Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. attachAlgoOrds Array of object No TP/SL information attached when placing order > attachAlgoId String Conditional The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Conditional Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > newTpTriggerPx String Conditional Take-profit trigger price. Either the take profit trigger price or order price is 0, it means that the take profit is deleted. > newTpOrdPx String Conditional Take-profit order price If the price is -1, take-profit will be executed at the market price. > newTpOrdKind String No TP order kind condition limit > newSlTriggerPx String Conditional Stop-loss trigger price Either the stop loss trigger price or order price is 0, it means that the stop loss is deleted. > newSlOrdPx String Conditional Stop-loss order price If the price is -1, stop-loss will be executed at the market price. > newTpTriggerPxType String Conditional Take-profit trigger price type last: last price index: index price mark: mark price Only applicable to FUTURES/SWAP If you want to add the take-profit, this parameter is required > newSlTriggerPxType String Conditional Stop-loss trigger price type last: last price index: index price mark: mark price Only applicable to FUTURES/SWAP If you want to add the stop-loss, this parameter is required > sz String Conditional New size. Only applicable to TP order of split TPs, and it is required for TP order of split TPs > amendPxOnTriggerType String No Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"oktswap6", "ordId":"12345689", "ts":"1695190491421", "reqId":"b12344", "sCode":"0", "sMsg":"" }, { "clOrdId":"oktswap7", "ordId":"12344", "ts":"1695190491421", "reqId":"b12344", "sCode":"0", "sMsg":"" } ], "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data Array of objects Array of objects contains the response results > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > reqId String Client Request ID as assigned by the client for order amendment. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. inTime String Timestamp at REST gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 The time is recorded after authentication. outTime String Timestamp at REST gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 newSz If the new quantity of the order is less than or equal to the filled quantity when you are amending a partially-filled order, the order status will be changed to filled. POST / CLOSE POSITIONS Close the position of an instrument via a market order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST POST /api/v5/trade/close-position > Request Example Copy to ClipboardPOST /api/v5/trade/close-position body { "instId":"BTC-USDT-SWAP", "mgnMode":"cross" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Close the position of an instrument via a market order result = tradeAPI.close_positions( instId="BTC-USDT-SWAP", mgnMode="cross" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID posSide String Conditional Position side This parameter can be omitted in net mode, and the default value is net. You can only fill with net. This parameter must be filled in under the long/short mode. Fill in long for close-long and short for close-short. mgnMode String Yes Margin mode cross isolated ccy String Conditional Margin currency, required in the case of closing cross MARGIN position for Spot and futures mode. autoCxl Boolean No Whether any pending orders for closing out needs to be automatically canceled when close position via a market order. false or true, the default is false. clOrdId String No Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "clOrdId": "", "instId": "BTC-USDT-SWAP", "posSide": "long", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID posSide String Position side clOrdId String Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. if there are any pending orders for closing out and the orders do not need to be automatically canceled, it will return an error code and message to prompt users to cancel pending orders before closing the positions. GET / ORDER DETAILS Retrieve order details. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST GET /api/v5/trade/order > Request Example Copy to ClipboardGET /api/v5/trade/order?ordId=1753197687182819328&instId=BTC-USDT Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve order details by ordId result = tradeAPI.get_order( instId="BTC-USDT", ordId="680800019749904384" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT Only applicable to live instruments ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used clOrdId String Conditional Client Order ID as assigned by the client If the clOrdId is associated with multiple orders, only the latest one will be returned. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0.00192834", "algoClOrdId": "", "algoId": "", "attachAlgoClOrdId": "", "attachAlgoOrds": [], "avgPx": "51858", "cTime": "1708587373361", "cancelSource": "", "cancelSourceReason": "", "category": "normal", "ccy": "", "clOrdId": "", "fee": "-0.00000192834", "feeCcy": "BTC", "fillPx": "51858", "fillSz": "0.00192834", "fillTime": "1708587373361", "instId": "BTC-USDT", "instType": "SPOT", "isTpLimit": "false", "lever": "", "linkedAlgoOrd": { "algoId": "" }, "ordId": "680800019749904384", "ordType": "market", "pnl": "0", "posSide": "net", "px": "", "pxType": "", "pxUsd": "", "pxVol": "", "quickMgnType": "", "rebate": "0", "rebateCcy": "USDT", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "source": "", "state": "filled", "stpId": "", "stpMode": "", "sz": "100", "tag": "", "tdMode": "cash", "tgtCcy": "quote_ccy", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "tradeId": "744876980", "uTime": "1708587373362" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type SPOT MARGIN SWAP FUTURES OPTION instId String Instrument ID tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price For options, use coin as unit (e.g. BTC, ETH) pxUsd String Options price in USDOnly applicable to options; return "" for other instrument types pxVol String Implied volatility of the options orderOnly applicable to options; return "" for other instrument types pxType String Price type of options px: Place an order based on price, in the unit of coin (the unit for the request parameter px is BTC or ETH) pxVol: Place an order based on pxVol pxUsd: Place an order based on pxUsd, in the unit of USD (the unit for the request parameter px is USD) sz String Quantity to buy or sell pnl String Profit and loss, Applicable to orders which have a trade and aim to close position. It always is 0 in other conditions ordType String Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) side String Order side posSide String Position side tdMode String Trade mode accFillSz String Accumulated fill quantity The unit is base_ccy for SPOT and MARGIN, e.g. BTC-USDT, the unit is BTC; For market orders, the unit both is base_ccy when the tgtCcy is base_ccy or quote_ccy; The unit is contract for FUTURES/SWAP/OPTION fillPx String Last filled price. If none is filled, it will return "". tradeId String Last traded ID fillSz String Last filled quantity The unit is base_ccy for SPOT and MARGIN, e.g. BTC-USDT, the unit is BTC; For market orders, the unit both is base_ccy when the tgtCcy is base_ccy or quote_ccy; The unit is contract for FUTURES/SWAP/OPTION fillTime String Last filled time avgPx String Average filled price. If none is filled, it will return "". state String State canceled live partially_filled filled mmp_canceled stpId String Self trade prevention ID Return "" if self trade prevention is not applicable (deprecated) stpMode String Self trade prevention mode Return "" if self trade prevention is not applicable lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. attachAlgoOrds Array of object TP/SL information attached when placing order > attachAlgoId String The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpOrdKind String TP order kind condition limit > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price. > sz String Size. Only applicable to TP order of split TPs > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > failCode String The error code when failing to place TP/SL order, e.g. 51020 The default is "" > failReason String The error reason when failing to place TP/SL order. The default is "" linkedAlgoOrd Object Linked SL order detail, only applicable to the order that is placed by one-cancels-the-other (OCO) order that contains the TP limit order. > algoId Object Algo ID feeCcy String Fee currency fee String Fee and rebate For spot and margin, it is accumulated fee charged by the platform. It is always negative, e.g. -0.01. For Expiry Futures, Perpetual Futures and Options, it is accumulated fee and rebate rebateCcy String Rebate currency source String Order source 6: The normal order triggered by the trigger order 7:The normal order triggered by the TP/SL order 13: The normal order triggered by the algo order 25:The normal order triggered by the trailing stop order rebate String Rebate amount, only applicable to spot and margin, the reward of placing orders from the platform (rebate) given to user who has reached the specified trading level. If there is no rebate, this field is "". category String Category normal twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. isTpLimit String Whether it is TP limit order. true or false cancelSource String Code of the cancellation source. cancelSourceReason String Reason for the cancellation. quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay algoClOrdId String Client-supplied Algo ID. There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". algoId String Algo ID. There will be a value when algo order is triggered, or it will be "". uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / ORDER LIST Retrieve all incomplete orders under the current account. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/orders-pending > Request Example Copy to ClipboardGET /api/v5/trade/orders-pending?ordType=post_only,fok,ioc&instType=SPOT Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve all incomplete orders result = tradeAPI.get_order_list( instType="SPOT", ordType="post_only,fok,ioc" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION uly String No Underlying instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USD-200927 ordType String No Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) state String No State live partially_filled after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0", "algoClOrdId": "", "algoId": "", "attachAlgoClOrdId": "", "attachAlgoOrds": [], "avgPx": "", "cTime": "1724733617998", "cancelSource": "", "cancelSourceReason": "", "category": "normal", "ccy": "", "clOrdId": "", "fee": "0", "feeCcy": "BTC", "fillPx": "", "fillSz": "0", "fillTime": "", "instId": "BTC-USDT", "instType": "SPOT", "isTpLimit": "false", "lever": "", "linkedAlgoOrd": { "algoId": "" }, "ordId": "1752588852617379840", "ordType": "post_only", "pnl": "0", "posSide": "net", "px": "13013.5", "pxType": "", "pxUsd": "", "pxVol": "", "quickMgnType": "", "rebate": "0", "rebateCcy": "USDT", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "source": "", "state": "live", "stpId": "", "stpMode": "cancel_maker", "sz": "0.001", "tag": "", "tdMode": "cash", "tgtCcy": "", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "tradeId": "", "uTime": "1724733617998" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price For options, use coin as unit (e.g. BTC, ETH) pxUsd String Options price in USDOnly applicable to options; return "" for other instrument types pxVol String Implied volatility of the options orderOnly applicable to options; return "" for other instrument types pxType String Price type of options px: Place an order based on price, in the unit of coin (the unit for the request parameter px is BTC or ETH) pxVol: Place an order based on pxVol pxUsd: Place an order based on pxUsd, in the unit of USD (the unit for the request parameter px is USD) sz String Quantity to buy or sell pnl String Profit and loss, Applicable to orders which have a trade and aim to close position. It always is 0 in other conditions ordType String Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) side String Order side posSide String Position side tdMode String Trade mode accFillSz String Accumulated fill quantity fillPx String Last filled price tradeId String Last trade ID fillSz String Last filled quantity fillTime String Last filled time avgPx String Average filled price. If none is filled, it will return "". state String State live partially_filled lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. attachAlgoOrds Array of object TP/SL information attached when placing order > attachAlgoId String The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpOrdKind String TP order kind condition limit > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price. > sz String Size. Only applicable to TP order of split TPs > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > failCode String The error code when failing to place TP/SL order, e.g. 51020 The default is "" > failReason String The error reason when failing to place TP/SL order. The default is "" linkedAlgoOrd Object Linked SL order detail, only applicable to the order that is placed by one-cancels-the-other (OCO) order that contains the TP limit order. > algoId Object Algo ID stpId String Self trade prevention ID Return "" if self trade prevention is not applicable (deprecated) stpMode String Self trade prevention mode Return "" if self trade prevention is not applicable feeCcy String Fee currency fee String Fee and rebate For spot and margin, it is accumulated fee charged by the platform. It is always negative, e.g. -0.01. For Expiry Futures, Perpetual Futures and Options, it is accumulated fee and rebate rebateCcy String Rebate currency source String Order source 6: The normal order triggered by the trigger order 7:The normal order triggered by the TP/SL order 13: The normal order triggered by the algo order 25:The normal order triggered by the trailing stop order rebate String Rebate amount, only applicable to spot and margin, the reward of placing orders from the platform (rebate) given to user who has reached the specified trading level. If there is no rebate, this field is "". category String Category normal reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay algoClOrdId String Client-supplied Algo ID. There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". algoId String Algo ID. There will be a value when algo order is triggered, or it will be "". isTpLimit String Whether it is TP limit order. true or false uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 cancelSource String Code of the cancellation source. cancelSourceReason String Reason for the cancellation. GET / ORDER HISTORY (LAST 7 DAYS) Get completed orders which are placed in the last 7 days, including those placed 7 days ago but completed in the last 7 days. The incomplete orders that have been canceled are only reserved for 2 hours. RATE LIMIT: 40 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/orders-history > Request Example Copy to ClipboardGET /api/v5/trade/orders-history?ordType=post_only,fok,ioc&instType=SPOT Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get completed SPOT orders which are placed in the last 7 days # The incomplete orders that have been canceled are only reserved for 2 hours result = tradeAPI.get_orders_history( instType="SPOT", ordType="post_only,fok,ioc" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String yes Instrument type SPOT MARGIN SWAP FUTURES OPTION uly String No Underlying Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USDT ordType String No Order type market: market order limit: limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) state String No State canceled filled mmp_canceled: Order canceled automatically due to Market Maker Protection category String No Category twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId begin String No Filter with a begin timestamp cTime. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp cTime. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0.00192834", "algoClOrdId": "", "algoId": "", "attachAlgoClOrdId": "", "attachAlgoOrds": [], "avgPx": "51858", "cTime": "1708587373361", "cancelSource": "", "cancelSourceReason": "", "category": "normal", "ccy": "", "clOrdId": "", "fee": "-0.00000192834", "feeCcy": "BTC", "fillPx": "51858", "fillSz": "0.00192834", "fillTime": "1708587373361", "instId": "BTC-USDT", "instType": "SPOT", "lever": "", "linkedAlgoOrd": { "algoId": "" }, "ordId": "680800019749904384", "ordType": "market", "pnl": "0", "posSide": "", "px": "", "pxType": "", "pxUsd": "", "pxVol": "", "quickMgnType": "", "rebate": "0", "rebateCcy": "USDT", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "source": "", "state": "filled", "stpId": "", "stpMode": "", "sz": "100", "tag": "", "tdMode": "cash", "tgtCcy": "quote_ccy", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "tradeId": "744876980", "uTime": "1708587373362", "isTpLimit": "false" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price For options, use coin as unit (e.g. BTC, ETH) pxUsd String Options price in USDOnly applicable to options; return "" for other instrument types pxVol String Implied volatility of the options orderOnly applicable to options; return "" for other instrument types pxType String Price type of options px: Place an order based on price, in the unit of coin (the unit for the request parameter px is BTC or ETH) pxVol: Place an order based on pxVol pxUsd: Place an order based on pxUsd, in the unit of USD (the unit for the request parameter px is USD) sz String Quantity to buy or sell ordType String Order type market: market order limit: limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) side String Order side posSide String Position side tdMode String Trade mode accFillSz String Accumulated fill quantity fillPx String Last filled price. If none is filled, it will return "". tradeId String Last trade ID fillSz String Last filled quantity fillTime String Last filled time avgPx String Average filled price. If none is filled, it will return "". state String State canceled filled mmp_canceled lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. attachAlgoOrds Array of object TP/SL information attached when placing order > attachAlgoId String The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpOrdKind String TP order kind condition limit > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price. > sz String Size. Only applicable to TP order of split TPs > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > failCode String The error code when failing to place TP/SL order, e.g. 51020 The default is "" > failReason String The error reason when failing to place TP/SL order. The default is "" linkedAlgoOrd Object Linked SL order detail, only applicable to the order that is placed by one-cancels-the-other (OCO) order that contains the TP limit order. > algoId Object Algo ID stpId String Self trade prevention ID Return "" if self trade prevention is not applicable (deprecated) stpMode String Self trade prevention mode Return "" if self trade prevention is not applicable feeCcy String Fee currency fee String Fee and rebate For spot and margin, it is accumulated fee charged by the platform. It is always negative, e.g. -0.01. For Expiry Futures, Perpetual Futures and Options, it is accumulated fee and rebate rebateCcy String Rebate currency source String Order source 6: The normal order triggered by the trigger order 7:The normal order triggered by the TP/SL order 13: The normal order triggered by the algo order 25:The normal order triggered by the trailing stop order rebate String Rebate amount, only applicable to spot and margin, the reward of placing orders from the platform (rebate) given to user who has reached the specified trading level. If there is no rebate, this field is "". pnl String Profit and loss, Applicable to orders which have a trade and aim to close position. It always is 0 in other conditions category String Category normal twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. cancelSource String Code of the cancellation source. cancelSourceReason String Reason for the cancellation. algoClOrdId String Client-supplied Algo ID. There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". algoId String Algo ID. There will be a value when algo order is triggered, or it will be "". isTpLimit String Whether it is TP limit order. true or false uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / ORDER HISTORY (LAST 3 MONTHS) Get completed orders which are placed in the last 3 months, including those placed 3 months ago but completed in the last 3 months. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/orders-history-archive > Request Example Copy to ClipboardGET /api/v5/trade/orders-history-archive?ordType=post_only,fok,ioc&instType=SPOT Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get completed SPOT orders which are placed in the last 3 months result = tradeAPI.get_orders_history_archive( instType="SPOT", ordType="post_only,fok,ioc" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String yes Instrument type SPOT MARGIN SWAP FUTURES OPTION uly String No Underlying Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USD-200927 ordType String No Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) state String No State canceled filled mmp_canceled: Order canceled automatically due to Market Maker Protection category String No Category twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId begin String No Filter with a begin timestamp cTime. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp cTime. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0.00192834", "algoClOrdId": "", "algoId": "", "attachAlgoClOrdId": "", "attachAlgoOrds": [], "avgPx": "51858", "cTime": "1708587373361", "cancelSource": "", "cancelSourceReason": "", "category": "normal", "ccy": "", "clOrdId": "", "fee": "-0.00000192834", "feeCcy": "BTC", "fillPx": "51858", "fillSz": "0.00192834", "fillTime": "1708587373361", "instId": "BTC-USDT", "instType": "SPOT", "lever": "", "ordId": "680800019749904384", "ordType": "market", "pnl": "0", "posSide": "", "px": "", "pxType": "", "pxUsd": "", "pxVol": "", "quickMgnType": "", "rebate": "0", "rebateCcy": "USDT", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "source": "", "state": "filled", "stpId": "", "stpMode": "", "sz": "100", "tag": "", "tdMode": "cash", "tgtCcy": "quote_ccy", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "tradeId": "744876980", "uTime": "1708587373362", "isTpLimit": "false", "linkedAlgoOrd": { "algoId": "" } } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price For options, use coin as unit (e.g. BTC, ETH) pxUsd String Options price in USDOnly applicable to options; return "" for other instrument types pxVol String Implied volatility of the options orderOnly applicable to options; return "" for other instrument types pxType String Price type of options px: Place an order based on price, in the unit of coin (the unit for the request parameter px is BTC or ETH) pxVol: Place an order based on pxVol pxUsd: Place an order based on pxUsd, in the unit of USD (the unit for the request parameter px is USD) sz String Quantity to buy or sell ordType String Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) op_fok: Simple options (fok) side String Order side posSide String Position side tdMode String Trade mode accFillSz String Accumulated fill quantity fillPx String Last filled price. If none is filled, it will return "". tradeId String Last trade ID fillSz String Last filled quantity fillTime String Last filled time avgPx String Average filled price. If none is filled, it will return "". state String State canceled filled mmp_canceled lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. attachAlgoOrds Array of object TP/SL information attached when placing order > attachAlgoId String The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpOrdKind String TP order kind condition limit > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price. > sz String Size. Only applicable to TP order of split TPs > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > failCode String The error code when failing to place TP/SL order, e.g. 51020 The default is "" > failReason String The error reason when failing to place TP/SL order. The default is "" linkedAlgoOrd Object Linked SL order detail, only applicable to the order that is placed by one-cancels-the-other (OCO) order that contains the TP limit order. > algoId Object Algo ID stpId String Self trade prevention ID Return "" if self trade prevention is not applicable (deprecated) stpMode String Self trade prevention mode Return "" if self trade prevention is not applicable feeCcy String Fee currency fee String Fee and rebate For spot and margin, it is accumulated fee charged by the platform. It is always negative, e.g. -0.01. For Expiry Futures, Perpetual Futures and Options, it is accumulated fee and rebate source String Order source 6: The normal order triggered by the trigger order 7:The normal order triggered by the TP/SL order 13: The normal order triggered by the algo order 25:The normal order triggered by the trailing stop order rebateCcy String Rebate currency rebate String Rebate amount, only applicable to spot and margin, the reward of placing orders from the platform (rebate) given to user who has reached the specified trading level. If there is no rebate, this field is "". pnl String Profit and loss, Applicable to orders which have a trade and aim to close position. It always is 0 in other conditions category String Category normal twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. cancelSource String Code of the cancellation source. cancelSourceReason String Reason for the cancellation. algoClOrdId String Client-supplied Algo ID. There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". algoId String Algo ID. There will be a value when algo order is triggered, or it will be "". isTpLimit String Whether it is TP limit order. true or false uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 This interface does not contain the order data of the `Canceled orders without any fills` type, which can be obtained through the `Get Order History (last 7 days)` interface. As far as OPTION orders that are complete, pxVol and pxUsd will update in time for px order, pxVol will update in time for pxUsd order, pxUsd will update in time for pxVol order. GET / TRANSACTION DETAILS (LAST 3 DAYS) Retrieve recently-filled transaction details in the last 3 day. RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/fills > Request Example Copy to ClipboardGET /api/v5/trade/fills Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve recently-filled transaction details result = tradeAPI.get_fills() print(result) REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT MARGIN SWAP FUTURES OPTION uly String No Underlying Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USDT ordId String No Order ID subType String No Transaction type 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 110: Liquidation transfer in 111: Liquidation transfer out 118: System token conversion transfer in 119: System token conversion transfer out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL sell 212: Auto borrow of quick margin 213: Auto repay of quick margin 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 270: Spread trading buy 271: Spread trading sell 272: Spread trading open long 273: Spread trading open short 274: Spread trading close long 275: Spread trading close short after String No Pagination of data to return records earlier than the requested billId before String No Pagination of data to return records newer than the requested billId begin String No Filter with a begin timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "side": "buy", "fillSz": "0.00192834", "fillPx": "51858", "fillPxVol": "", "fillFwdPx": "", "fee": "-0.00000192834", "fillPnl": "0", "ordId": "680800019749904384", "feeRate": "-0.001", "instType": "SPOT", "fillPxUsd": "", "instId": "BTC-USDT", "clOrdId": "", "posSide": "net", "billId": "680800019754098688", "subType": "1", "fillMarkVol": "", "tag": "", "fillTime": "1708587373361", "execType": "T", "fillIdxPx": "", "tradeId": "744876980", "fillMarkPx": "", "feeCcy": "BTC", "ts": "1708587373362" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID tradeId String Last trade ID ordId String Order ID clOrdId String Client Order ID as assigned by the client billId String Bill ID subType String Transaction type tag String Order tag fillPx String Last filled price. It is the same as the px from "Get bills details". fillSz String Last filled quantity fillIdxPx String Index price at the moment of trade execution For cross currency spot pairs, it returns baseCcy-USDT index price. For example, for LTC-ETH, this field returns the index price of LTC-USDT. fillPnl String Last filled profit and loss, applicable to orders which have a trade and aim to close position. It always is 0 in other conditions fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types fillMarkPx String Mark price when filled Applicable to FUTURES, SWAP, OPTION side String Order side, buy sell posSide String Position side long short it returns net innet mode. execType String Liquidity taker or maker T: taker M: maker Not applicable to system orders such as ADL and liquidation feeCcy String Trading fee or rebate currency fee String The amount of trading fee or rebate. The trading fee deduction is negative, such as '-0.01'; the rebate is positive, such as '0.01'. ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. fillTime String Trade time which is the same as fillTime for the order channel. feeRate String Fee rate. This field is returned for SPOT and MARGIN only tradeId When the order category to which the transaction details belong is partial_liquidation, full_liquidation, or adl, this field will be assigned a negative value to distinguish it from other matching transaction scenarios. ordId Order ID, always "" for block trading. clOrdId Client-supplied order ID, always "" for block trading. GET / TRANSACTION DETAILS (LAST 3 MONTHS) Retrieve recently-filled transaction details in the last 3 months. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/fills-history > Request Example Copy to ClipboardGET /api/v5/trade/fills-history?instType=SPOT Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve SPOT transaction details in the last 3 months. result = tradeAPI.get_fills_history( instType="SPOT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String YES Instrument type SPOT MARGIN SWAP FUTURES OPTION uly String No Underlying Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USDT ordId String No Order ID subType String No Transaction type 1: Buy 2: Sell 3: Open long 4: Open short 5: Close long 6: Close short 100: Partial liquidation close long 101: Partial liquidation close short 102: Partial liquidation buy 103: Partial liquidation sell 104: Liquidation long 105: Liquidation short 106: Liquidation buy 107: Liquidation sell 110: Liquidation transfer in 111: Liquidation transfer out 118: System token conversion transfer in 119: System token conversion transfer out 125: ADL close long 126: ADL close short 127: ADL buy 128: ADL sell 212: Auto borrow of quick margin 213: Auto repay of quick margin 204: block trade buy 205: block trade sell 206: block trade open long 207: block trade open short 208: block trade close open 209: block trade close short 270: Spread trading buy 271: Spread trading sell 272: Spread trading open long 273: Spread trading open short 274: Spread trading close long 275: Spread trading close short after String No Pagination of data to return records earlier than the requested billId before String No Pagination of data to return records newer than the requested billId begin String No Filter with a begin timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp ts. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "side": "buy", "fillSz": "0.00192834", "fillPx": "51858", "fillPxVol": "", "fillFwdPx": "", "fee": "-0.00000192834", "fillPnl": "0", "ordId": "680800019749904384", "feeRate": "-0.001", "instType": "SPOT", "fillPxUsd": "", "instId": "BTC-USDT", "clOrdId": "", "posSide": "net", "billId": "680800019754098688", "subType": "1", "fillMarkVol": "", "tag": "", "fillTime": "1708587373361", "execType": "T", "fillIdxPx": "", "tradeId": "744876980", "fillMarkPx": "", "feeCcy": "BTC", "ts": "1708587373362" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID tradeId String Last trade ID ordId String Order ID clOrdId String Client Order ID as assigned by the client billId String Bill ID subType String Transaction type tag String Order tag fillPx String Last filled price fillSz String Last filled quantity fillIdxPx String Index price at the moment of trade execution For cross currency spot pairs, it returns baseCcy-USDT index price. For example, for LTC-ETH, this field returns the index price of LTC-USDT. fillPnl String Last filled profit and loss, applicable to orders which have a trade and aim to close position. It always is 0 in other conditions fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types fillMarkPx String Mark price when filled Applicable to FUTURES, SWAP, OPTION side String Order side buy sell posSide String Position side long short it returns net innet mode. execType String Liquidity taker or maker T: taker M: maker Not applicable to system orders such as ADL and liquidation feeCcy String Trading fee or rebate currency fee String The amount of trading fee or rebate. The trading fee deduction is negative, such as '-0.01'; the rebate is positive, such as '0.01'. ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. fillTime String Trade time which is the same as fillTime for the order channel. feeRate String Fee rate. This field is returned for SPOT and MARGIN only tradeId When the order category to which the transaction details belong is partial_liquidation, full_liquidation, or adl, this field will be assigned a negative value to distinguish it from other matching transaction scenarios. ordId Order ID, always "" for block trading. clOrdId Client-supplied order ID, always "" for block trading. We advise you to use Get Transaction details (last 3 days)when you request data for recent 3 days. GET / EASY CONVERT CURRENCY LIST Get list of small convertibles and mainstream currencies. Only applicable to the crypto balance less than $10. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/easy-convert-currency-list > Request Example Copy to ClipboardGET /api/v5/trade/easy-convert-currency-list Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get list of small convertibles and mainstream currencies result = tradeAPI.get_easy_convert_currency_list() print(result) REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fromData": [ { "fromAmt": "6.580712708344864", "fromCcy": "ADA" }, { "fromAmt": "2.9970000013055097", "fromCcy": "USDC" } ], "toCcy": [ "USDT", "BTC", "ETH", "OKB" ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description fromData Array Currently owned and convertible small currency list > fromCcy String Type of small payment currency convert from, e.g. BTC > fromAmt String Amount of small payment currency convert from toCcy Array Type of mainstream currency convert to, e.g. USDT POST / PLACE EASY CONVERT Convert small currencies to mainstream currencies. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/trade/easy-convert > Request Example Copy to ClipboardPOST /api/v5/trade/easy-convert body { "fromCcy": ["ADA","USDC"], //Seperated by commas "toCcy": "OKB" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Convert small currencies to mainstream currencies result = tradeAPI.easy_convert( fromCcy=["ADA", "USDC"], toCcy="OKB" ) print(result) REQUEST PARAMETERS Parameter Type Required Description fromCcy Array Yes Type of small payment currency convert from Maximum 5 currencies can be selected in one order. If there are multiple currencies, separate them with commas. toCcy String Yes Type of mainstream currency convert to Only one receiving currency type can be selected in one order and cannot be the same as the small payment currencies. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fillFromSz": "6.5807127", "fillToSz": "0.17171580105126", "fromCcy": "ADA", "status": "running", "toCcy": "OKB", "uTime": "1661419684687" }, { "fillFromSz": "2.997", "fillToSz": "0.1683755161661844", "fromCcy": "USDC", "status": "running", "toCcy": "OKB", "uTime": "1661419684687" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description status String Current status of easy convert running: Running filled: Filled failed: Failed fromCcy String Type of small payment currency convert from toCcy String Type of mainstream currency convert to fillFromSz String Filled amount of small payment currency convert from fillToSz String Filled amount of mainstream currency convert to uTime String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / EASY CONVERT HISTORY Get the history and status of easy convert trades in the past 7 days. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/easy-convert-history > Request Example Copy to ClipboardGET /api/v5/trade/easy-convert-history Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get the history of easy convert trades result = tradeAPI.get_easy_convert_history() print(result) REQUEST PARAMETERS Parameter Type Required Description after String No Pagination of data to return records earlier than the requested time (exclude), Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested time (exclude), Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fillFromSz": "0.1761712511667539", "fillToSz": "6.7342205900000000", "fromCcy": "OKB", "status": "filled", "toCcy": "ADA", "acct": "18", "uTime": "1661313307979" }, { "fillFromSz": "0.1722106121112177", "fillToSz": "2.9971018300000000", "fromCcy": "OKB", "status": "filled", "toCcy": "USDC", "acct": "18", "uTime": "1661313307979" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description fromCcy String Type of small payment currency convert from fillFromSz String Amount of small payment currency convert from toCcy String Type of mainstream currency convert to fillToSz String Amount of mainstream currency convert to acct String The account where the mainstream currency is located 6: Funding account 18: Trading account status String Current status of easy convert running: Running filled: Filled failed: Failed uTime String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / ONE-CLICK REPAY CURRENCY LIST Get list of debt currency data and repay currencies. Debt currencies include both cross and isolated debts. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/one-click-repay-currency-list > Request Example Copy to ClipboardGET /api/v5/trade/one-click-repay-currency-list Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get list of debt currency data and repay currencies result = tradeAPI.get_oneclick_repay_list() print(result) REQUEST PARAMETERS Parameter Type Required Description debtType String No Debt type cross: cross isolated: isolated > Response Example Copy to Clipboard{ "code": "0", "data": [ { "debtData": [ { "debtAmt": "29.653478", "debtCcy": "LTC" }, { "debtAmt": "237803.6828295906051002", "debtCcy": "USDT" } ], "debtType": "cross", "repayData": [ { "repayAmt": "0.4978335419825104", "repayCcy": "ETH" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description debtData Array Debt currency data list > debtCcy String Debt currency type > debtAmt String Debt currency amount Including principal and interest debtType String Debt type cross: cross isolated: isolated repayData Array Repay currency data list > repayCcy String Repay currency type > repayAmt String Repay currency's available balance amount POST / TRADE ONE-CLICK REPAY Trade one-click repay to repay cross debts. Isolated debts are not applicable. The maximum repayment amount is based on the remaining available balance of funding and trading accounts. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/trade/one-click-repay > Request Example Copy to ClipboardPOST /api/v5/trade/one-click-repay body { "debtCcy": ["ETH","BTC"], "repayCcy": "USDT" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Trade one-click repay to repay cross debts result = tradeAPI.oneclick_repay( debtCcy=["ETH", "BTC"], repayCcy="USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description debtCcy Array Yes Debt currency type Maximum 5 currencies can be selected in one order. If there are multiple currencies, separate them with commas. repayCcy String Yes Repay currency type Only one receiving currency type can be selected in one order and cannot be the same as the small payment currencies. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "debtCcy": "ETH", "fillDebtSz": "0.01023052", "fillRepaySz": "30", "repayCcy": "USDT", "status": "filled", "uTime": "1646188520338" }, { "debtCcy": "BTC", "fillFromSz": "3", "fillToSz": "60,221.15910001", "repayCcy": "USDT", "status": "filled", "uTime": "1646188520338" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description status String Current status of one-click repay running: Running filled: Filled failed: Failed debtCcy String Debt currency type repayCcy String Repay currency type fillDebtSz String Filled amount of debt currency fillRepaySz String Filled amount of repay currency uTime String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / ONE-CLICK REPAY HISTORY Get the history and status of one-click repay trades in the past 7 days. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/one-click-repay-history > Request Example Copy to ClipboardGET /api/v5/trade/one-click-repay-history Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Get the history of one-click repay trades result = tradeAPI.oneclick_repay_history() print(result) REQUEST PARAMETERS Parameter Type Required Description after String No Pagination of data to return records earlier than the requested time, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested time, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "debtCcy": "USDC", "fillDebtSz": "6950.4865447900000000", "fillRepaySz": "4.3067975995094930", "repayCcy": "ETH", "status": "filled", "uTime": "1661256148746" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description debtCcy String Debt currency type fillDebtSz String Amount of debt currency transacted repayCcy String Repay currency type fillRepaySz String Amount of repay currency transacted status String Current status of one-click repay running: Running filled: Filled failed: Failed uTime String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 POST / MASS CANCEL ORDER Cancel all the MMP pending orders of an instrument family. Only applicable to Option in Portfolio Margin mode, and MMP privilege is required. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/trade/mass-cancel > Request Example Copy to ClipboardPOST /api/v5/trade/mass-cancel body { "instType":"OPTION", "instFamily":"BTC-USD" } REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type OPTION instFamily String Yes Instrument family lockInterval String No Lock interval(ms) The range should be [0, 10 000] The default is 0. You can set it as "0" if you want to unlock it immediately. Error 54008 will be thorwn when placing order duiring lock interval, it is different from 51034 which is thrown when MMP is triggered > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "result":true } ] } RESPONSE PARAMETERS Parameter Type Description result Boolean Result of the request true, false POST / CANCEL ALL AFTER Cancel all pending orders after the countdown timeout. Applicable to all trading symbols through order book (except Spread trading) RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/trade/cancel-all-after > Request Example Copy to ClipboardPOST /api/v5/trade/cancel-all-after { "timeOut":"60" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Set cancel all after result = tradeAPI.cancel_all_after( timeOut="10" ) print(result) REQUEST PARAMETERS Parameter Type Required Description timeOut String Yes The countdown for order cancellation, with second as the unit. Range of value can be 0, [10, 120]. Setting timeOut to 0 disables Cancel All After. tag String No CAA order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "triggerTime":"1587971460", "tag":"", "ts":"1587971400" } ] } RESPONSE PARAMETERS Parameter Type Description triggerTime String The time the cancellation is triggered. triggerTime=0 means Cancel All After is disabled. tag String CAA order tag ts String The time the request is received. Users are recommended to send heartbeat to the exchange every second. When the cancel all after is triggered, the trading engine will cancel orders on behalf of the client one by one and this operation may take up to a few seconds. This feature is intended as a protection mechanism for clients only and clients should not use this feature as part of their trading strategies. Please note that tag level CAA does not apply to `mmp` and `mmp_and_post _only` order types. To use tag level CAA, first, users need to set tags for their orders using the `tag` request parameter in the placing orders endpoint. When calling the CAA endpoint, if the `tag` request parameter is not provided, the default will be to set CAA at the account level. In this case, all pending orders for all order book trading symbols under that sub-account will be cancelled when CAA triggers, consistent with the existing logic. If the `tag` request parameter is provided, CAA will be set at the order tag level. When triggered, only pending orders of order book trading symbols with the specified tag will be canceled, while orders with other tags or no tags will remain unaffected. Users can run a maximum of 20 tag level CAAs simultaneously under the same sub-account. The system will only count live tag level CAAs. CAAs that have been triggered or revoked by the user will not be counted. The user will receive error code 51071 when exceeding the limit. GET / ACCOUNT RATE LIMIT Get account rate limit related information. Only new order requests and amendment order requests will be counted towards this limit. For batch order requests consisting of multiple orders, each order will be counted individually. For details, please refer to Fill ratio based sub-account rate limit RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/trade/account-rate-limit > Request Example Copy to Clipboard# Get the account rate limit GET /api/v5/trade/account-rate-limit REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code":"0", "data":[ { "accRateLimit":"2000", "fillRatio":"0.1234", "mainFillRatio":"0.1234", "nextAccRateLimit":"2000", "ts":"123456789000" } ], "msg":"" } RESPONSE PARAMETERS Parameter Type Description fillRatio String Sub account fill ratio during the monitoring period Applicable for users with trading fee level >= VIP 5 and return "" for others For accounts with no trading volume during the monitoring period, return "0". For accounts with trading volume but no order count due to our counting logic, return "9999". mainFillRatio String Master account aggregated fill ratio during the monitoring period Applicable for users with trading fee level >= VIP 5 and return "" for others For accounts with no trading volume during the monitoring period, return "0" accRateLimit String Current sub-account rate limit per two seconds nextAccRateLimit String Expected sub-account rate limit (per two seconds) in the next period Applicable for users with trading fee level >= VIP 5 and return "" for others ts String Data update time For users with trading fee level >= VIP 5, the data will be generated at 08:00 am (UTC) For users with trading fee level < VIP 5, return the current timestamp POST / ORDER PRECHECK This endpoint is used to precheck the account information before and after placing the order. Only applicable to Multi-currency margin mode, and Portfolio margin mode. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/trade/order-precheck > Request Example Copy to Clipboard place order for SPOT `POST /api/v5/trade/order-precheck` body { "instId":"BTC-USDT", "tdMode":"cash", "clOrdId":"b15", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT tdMode String Yes Trade mode Margin mode cross isolated Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading, tdMode should be spot_isolated for SPOT lead trading.) side String Yes Order side, buy sell posSide String Conditional Position side The default is net in the net mode It is required in the long/short mode, and can only be long or short. Only applicable to FUTURES/SWAP. ordType String Yes Order type market: Market order limit: Limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order (applicable only to Expiry Futures and Perpetual Futures). sz String Yes Quantity to buy or sell px String Conditional Order price. Only applicable to limit,post_only,fok,ioc,mmp,mmp_and_post_only order. reduceOnly Boolean No Whether orders can only reduce in position size. Valid options: true or false. The default value is false. Only applicable to MARGIN orders, and FUTURES/SWAP orders in net mode Only applicable to Spot and futures mode and Multi-currency margin tgtCcy String No Whether the target currency uses the quote or base currency. base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell attachAlgoOrds Array of object No TP/SL information attached when placing order > attachAlgoClOrdId String No Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Conditional Take-profit trigger price For condition TP order, if you fill in this parameter, you should fill in the take-profit order price as well. > tpOrdPx String Conditional Take-profit order price For condition TP order, if you fill in this parameter, you should fill in the take-profit trigger price as well. For limit TP order, you need to fill in this parameter, take-profit trigger needn‘t to be filled. If the price is -1, take-profit will be executed at the market price. > tpOrdKind String No TP order kind condition limit The default is condition > slTriggerPx String Conditional Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slOrdPx String Conditional Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. > tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last > slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last > sz String Conditional Size. Only applicable to TP order of split TPs, and it is required for TP order of split TPs > Response Example Copy to Clipboard{ "code": "0", "data": [ { "adjEq": "41.94347460746277", "adjEqChg": "-226.05616481626", "availBal": "0", "availBalChg": "0", "imr": "0", "imrChg": "57.74709688430927", "liab": "0", "liabChg": "0", "liabChgCcy": "", "liqPx": "6764.8556232031115", "liqPxDiff": "-57693.044376796888536773622035980224609375", "liqPxDiffRatio": "-0.8950500152315991", "mgnRatio": "0", "mgnRatioChg": "0", "mmr": "0", "mmrChg": "0", "posBal": "", "posBalChg": "", "type": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description adjEq String Current adjusted / Effective equity in USD adjEqChg String After placing order, changed quantity of adjusted / Effective equity in USD imr String Current initial margin requirement in USD imrChg String After placing order, changed quantity of initial margin requirement in USD mmr String Current Maintenance margin requirement in USD mmrChg String After placing order, changed quantity of maintenance margin requirement in USD mgnRatio String Current margin ratio in USD mgnRatioChg String After placing order, changed quantity of margin ratio in USD availBal String Current available balance in margin coin currency, only applicable to turn auto borrow off availBalChg String After placing order, changed quantity of available balance after placing order, only applicable to turn auto borrow off liqPx String Current estimated liquidation price liqPxDiff String After placing order, the distance between estimated liquidation price and mark price liqPxDiffRatio String After placing order, the distance rate between estimated liquidation price and mark price posBal String Current positive asset, only applicable to margin isolated position posBalChg String After placing order, positive asset of margin isolated, only applicable to margin isolated position liab String Current liabilities of currency For cross, it is cross liabilities For isolated position, it is isolated liabilities liabChg String After placing order, changed quantity of liabilities For cross, it is cross liabilities For isolated position, it is isolated liabilities liabChgCcy String After placing order, the unit of changed liabilities quantity only applicable cross and in auto borrow type String Unit type of positive asset, only applicable to margin isolated position 1: it is both base currency before and after placing order 2: before plaing order, it is base currency. after placing order, it is quota currency. 3: before plaing order, it is quota currency. after placing order, it is base currency 4: it is both quota currency before and after placing order WS / ORDER CHANNEL Retrieve order information. Data will not be pushed when first subscribed. Data will only be pushed when there are order updates. Concurrent connection to this channel will be restricted by the following rules: WebSocket connection count limit. URL PATH /ws/v5/private (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "orders", "instType": "FUTURES", "instFamily": "BTC-USD", "instId": "BTC-USD-200329" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "orders", "instType": "FUTURES", "instFamily": "BTC-USD" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name orders > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders", "instType": "FUTURES", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders", "instType": "FUTURES", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"orders\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES OPTION ANY > instFamily String No Instrument family > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg": { "channel": "orders", "instType": "SPOT", "instId": "BTC-USDT", "uid": "614488474791936" }, "data": [ { "accFillSz": "0.001", "algoClOrdId": "", "algoId": "", "amendResult": "", "amendSource": "", "avgPx": "31527.1", "cancelSource": "", "category": "normal", "ccy": "", "clOrdId": "", "code": "0", "cTime": "1654084334977", "execType": "M", "fee": "-0.02522168", "feeCcy": "USDT", "fillFee": "-0.02522168", "fillFeeCcy": "USDT", "fillNotionalUsd": "31.50818374", "fillPx": "31527.1", "fillSz": "0.001", "fillPnl": "0.01", "fillTime": "1654084353263", "fillPxVol": "", "fillPxUsd": "", "fillMarkVol": "", "fillFwdPx": "", "fillMarkPx": "", "instId": "BTC-USDT", "instType": "SPOT", "lever": "0", "msg": "", "notionalUsd": "31.50818374", "ordId": "452197707845865472", "ordType": "limit", "pnl": "0", "posSide": "", "px": "31527.1", "pxUsd":"", "pxVol":"", "pxType":"", "quickMgnType": "", "rebate": "0", "rebateCcy": "BTC", "reduceOnly": "false", "reqId": "", "side": "sell", "attachAlgoClOrdId": "", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "last", "source": "", "state": "filled", "stpId": "", "stpMode": "", "sz": "0.001", "tag": "", "tdMode": "cash", "tgtCcy": "", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "last", "attachAlgoOrds": [], "tradeId": "242589207", "lastPx": "38892.2", "uTime": "1654084353264", "isTpLimit": "false", "linkedAlgoOrd": { "algoId": "" } } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type > instFamily String Instrument family > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID > tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market orders. Default is quote_ccy for buy, base_ccy for sell > ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > px String Price For options, use coin as unit (e.g. BTC, ETH) > pxUsd String Options price in USDOnly applicable to options; return "" for other instrument types > pxVol String Implied volatility of the options orderOnly applicable to options; return "" for other instrument types > pxType String Price type of options px: Place an order based on price, in the unit of coin (the unit for the request parameter px is BTC or ETH) pxVol: Place an order based on pxVol pxUsd: Place an order based on pxUsd, in the unit of USD (the unit for the request parameter px is USD) > sz String The original order quantity, SPOT/MARGIN, in the unit of currency; FUTURES/SWAP/OPTION, in the unit of contract > notionalUsd String Estimated national value in USD of order > ordType String Order type market: market order limit: limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order (applicable only to Expiry Futures and Perpetual Futures) mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode). op_fok: Simple options (fok) > side String Order side, buy sell > posSide String Position side net long or short Only applicable to FUTURES/SWAP > tdMode String Trade mode, cross: cross isolated: isolated cash: cash > fillPx String Last filled price > tradeId String Last trade ID > fillSz String Last filled quantity The unit is base_ccy for SPOT and MARGIN, e.g. BTC-USDT, the unit is BTC; For market orders, the unit both is base_ccy when the tgtCcy is base_ccy or quote_ccy; The unit is contract for FUTURES/SWAP/OPTION > fillPnl String Last filled profit and loss, applicable to orders which have a trade and aim to close position. It always is 0 in other conditions > fillTime String Last filled time > fillFee String last filled fee amount or rebate amount: Negative number represents the user transaction fee charged by the platform; Positive number represents rebate > fillFeeCcy String last filled fee currency or rebate currency. It is fee currency when fillFee is less than 0; It is rebate currency when fillFee>=0. > fillPxVol String Implied volatility when filled Only applicable to options; return "" for other instrument types > fillPxUsd String Options price when filled, in the unit of USD Only applicable to options; return "" for other instrument types > fillMarkVol String Mark volatility when filled Only applicable to options; return "" for other instrument types > fillFwdPx String Forward price when filled Only applicable to options; return "" for other instrument types > fillMarkPx String Mark price when filled Applicable to FUTURES, SWAP, OPTION > execType String Liquidity taker or maker of the last filled, T: taker M: maker > accFillSz String Accumulated fill quantity The unit is base_ccy for SPOT and MARGIN, e.g. BTC-USDT, the unit is BTC; For market orders, the unit both is base_ccy when the tgtCcy is base_ccy or quote_ccy; The unit is contract for FUTURES/SWAP/OPTION > fillNotionalUsd String Filled notional value in USD of order > avgPx String Average filled price. If none is filled, it will return 0. > state String Order state canceled live partially_filled filled mmp_canceled > lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. > tpTriggerPx String Take-profit trigger price, it > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price, it > slTriggerPx String Stop-loss trigger price, it > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price, it > attachAlgoOrds Array of object TP/SL information attached when placing order >> attachAlgoId String The order ID of attached TP/SL order. It can be used to identity the TP/SL order when amending. It will not be posted to algoId when placing TP/SL order after the general order is filled completely. >> attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. >> tpOrdKind String TP order kind condition limit >> tpTriggerPx String Take-profit trigger price. >> tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price >> tpOrdPx String Take-profit order price. >> slTriggerPx String Stop-loss trigger price. >> slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price >> slOrdPx String Stop-loss order price. >> sz String Size. Only applicable to TP order of split TPs >> amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > linkedAlgoOrd Object Linked SL order detail, only applicable to TP limit order of one-cancels-the-other order(oco) >> algoId Object Algo ID > stpId String Self trade prevention ID Return "" if self trade prevention is not applicable (deprecated) > stpMode String Self trade prevention mode Return "" if self trade prevention is not applicable > feeCcy String Fee currency SPOT/MARGIN: If you buy, you will receive base currency; if you sell, you will receive quota currency FUTURES/SWAP/OPTION What is charged is the margin > fee String Fee and rebate For spot and margin, it is accumulated fee charged by the platform. It is always negative, e.g. -0.01. For Expiry Futures, Perpetual Futures and Options, it is accumulated fee and rebate > rebateCcy String Rebate currency, if there is no rebate, this field is "". > rebate String Rebate accumulated amount, only applicable to spot and margin, the reward of placing orders from the platform (rebate) given to user who has reached the specified trading level. If there is no rebate, this field is "". > pnl String Profit and loss, applicable to orders which have a trade and aim to close position. It always is 0 in other conditions. For liquidation under cross margin mode, it will include liquidation penalties. > source String Order source 6: The normal order triggered by the trigger order 7:The normal order triggered by the TP/SL order 13: The normal order triggered by the algo order 25:The normal order triggered by the trailing stop order > cancelSource String Source of the order cancellation. Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 2: Order canceled: Pre reduce-only order canceled, due to insufficient margin in user position 3: Order canceled: Risk cancellation was triggered. Pending order was canceled due to insufficient margin ratio and forced-liquidation risk. 4: Order canceled: Borrowings of crypto reached hard cap, order was canceled by system. 6: Order canceled: ADL order cancellation was triggered. Pending order was canceled due to a low margin ratio and forced-liquidation risk. 7: Order canceled: Futures contract delivery. 9: Order canceled: Insufficient balance after funding fees deducted. 13: Order canceled: FOK order was canceled due to incompletely filled. 14: Order canceled: IOC order was partially canceled due to incompletely filled. 15: Order canceled: The order price is beyond the limit 17: Order canceled: Close order was canceled, due to the position was already closed at market price. 20: Cancel all after triggered 21: Order canceled: The TP/SL order was canceled because the position had been closed 22, 23: Order canceled: Reduce-only orders only allow reducing your current position. System has already canceled this order. 27: Order canceled: Price limit verification failed because the price difference between counterparties exceeds 5% 31: The post-only order will take liquidity in taker orders 32: Self trade prevention 33: The order exceeds the maximum number of order matches per taker order 36: Your TP limit order was canceled because the corresponding SL order was triggered. 37: Your TP limit order was canceled because the corresponding SL order was canceled. 38: You have canceled market maker protection (MMP) orders. 39: Your order was canceled because market maker protection (MMP) was triggered. > amendSource String Source of the order amendation. 1: Order amended by user 2: Order amended by user, but the order quantity is overriden by system due to reduce-only 3: New order placed by user, but the order quantity is overriden by system due to reduce-only 4: Order amended by system due to other pending orders 5: Order modification due to changes in options px, pxVol, or pxUsd as a result of following variations. For example, when iv = 60, USD and px are anchored at iv = 60, the changes in USD or px lead to modification. > category String Category normal twap adl full_liquidation partial_liquidation delivery ddh: Delta dynamic hedge > isTpLimit String Whether it is TP limit order. true or false > uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 > reqId String Client Request ID as assigned by the client for order amendment. "" will be returned if there is no order amendment. > amendResult String The result of amending the order -1: failure 0: success 1: Automatic cancel (amendment request returned success but amendment subsequently failed then automatically canceled by the system) 2: Automatic amendation successfully, only applicable to pxVol and pxUsd orders of Option. When amending the order through API and cxlOnFail is set to true in the order amendment request but the amendment is rejected, "" is returned. When amending the order through API, the order amendment acknowledgement returns success and the amendment subsequently failed, -1 will be returned if cxlOnFail is set to false, 1 will be returned if cxlOnFail is set to true. When amending the order through Web/APP and the amendment failed, -1 will be returned. > reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. > quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay > algoClOrdId String Client-supplied Algo ID. There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". > algoId String Algo ID. There will be a value when algo order is triggered, or it will be "". > lastPx String Last price > code String Error Code, the default is 0 > msg String Error Message, The default is "" For market orders, it's likely the orders channel will show order state as "filled" while showing the "last filled quantity (fillSz)" as 0. When OPTION contract is exercised, related pending orders will be deleted directly, so channel orders push nothing WS / FILLS CHANNEL Retrieve transaction information. Data will not be pushed when first subscribed. Data will only be pushed when there are order book fill events, where tradeId > 0. URL PATH /ws/v5/private (required login) > Request Example: single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "fills", "instId": "BTC-USDT-SWAP" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "fills" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name fills > instId String No Instrument ID > Successful Response Example: single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "fills", "instId": "BTC-USDT-SWAP" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "fills" }, "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg": { "channel": "fills", "instId": "BTC-USDT-SWAP", "uid": "614488474791111" }, "data":[ { "instId": "BTC-USDT-SWAP", "fillSz": "100", "fillPx": "70000", "side": "buy", "ts": "1705449605015", "ordId": "680800019749904384", "tradeId": "12345", "execType": "T", "count": "10" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instId String Instrument ID data Array Subscribed data > instId String Instrument ID > fillSz String Filled quantity > fillPx String Last filled price > side String Trade direction buy sell > ts String Filled time, Unix timestamp format in milliseconds, e.g. 1597026383085 > ordId String Order ID > tradeId String The last trade ID in the trades aggregation > execType String Liquidity taker or maker, T: taker M: maker > count String The count of trades aggregated - The channel is exclusively available to users with trading fee tier VIP5 or above. Others will receive error code 60029 when subscribing to it. - The channel only pushes partial information of the orders channel. Fill events of block trading, nitro spread, liquidation, ADL, and some other non order book events will not be pushed through this channel. Users should also subscribe to the orders channel for order confirmation. - When a fill event is received by this channel, the account balance, margin, and position information might not have changed yet. - Taker orders will be aggregated based on different fill prices. When aggregation occurs, the count field indicates the number of orders matched, and the tradeId represents the tradeId of the last trade in the aggregation. Maker orders will not be aggregated. - In the future, connection limits will be imposed on this channel. The maximum number of connections subscribing to this channel per subaccount will be 20. We recommend users always use this channel within this limit to avoid any impact on their strategies when the limit is enforced. WS / PLACE ORDER You can place an order only if you have sufficient funds. URL PATH /ws/v5/private (required login) RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Rate limit is shared with the `Place order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1512", "op": "order", "args": [ { "side": "buy", "instId": "BTC-USDT", "tdMode": "isolated", "ordType": "market", "sz": "100" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation order args Array Yes Request parameters > instId String Yes Instrument ID, e.g. BTC-USDT > tdMode String Yes Trade mode Margin mode isolated cross Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading, tdMode should be spot_isolated for SPOT lead trading.) > ccy String No Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. > clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > side String Yes Order side, buy sell > posSide String Conditional Position side The default is net in the net mode It is required in the long/short mode, and can only be long or short. Only applicable to FUTURES/SWAP. > ordType String Yes Order type market: market order limit: limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode) > sz String Yes Quantity to buy or sell. > px String Conditional Order price. Only applicable to limit,post_only,fok,ioc,mmp,mmp_and_post_only order. When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > pxUsd String Conditional Place options orders in USD Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > pxVol String Conditional Place options orders based on implied volatility, where 1 represents 100% Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > reduceOnly Boolean No Whether the order can only reduce the position size. Valid options: true or false. The default value is false. Only applicable to MARGIN orders, and FUTURES/SWAP orders in net mode Only applicable to Spot and futures mode and Multi-currency margin > tgtCcy String No Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell > banAmend Boolean No Whether to disallow the system from amending the size of the SPOT Market Order. Valid options: true or false. The default value is false. If true, system will not amend and reject the market order if user does not have sufficient funds. Only applicable to SPOT Market Orders > quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) > stpId String No Self trade prevention ID. Orders from the same master account with the same ID will be prevented from self trade. Numerical integers defined by user in the range of 1<= x<= 999999999 (deprecated) > stpMode String No Self trade prevention mode. Default to cancel maker cancel_maker,cancel_taker, cancel_both Cancel both does not support FOK. expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 > Successful Response Example Copy to Clipboard{ "id": "1512", "op": "order", "data": [ { "clOrdId": "", "ordId": "12345689", "tag": "", "ts":"1695190491421", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Failure Response Example Copy to Clipboard{ "id": "1512", "op": "order", "data": [ { "clOrdId": "", "ordId": "", "tag": "", "ts":"1695190491421", "sCode": "5XXXX", "sMsg": "not exist" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "order", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String Order status code, 0 means success > sMsg String Rejection or success message of event execution. inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 tdMode Trade Mode, when placing an order, you need to specify the trade mode. Spot mode: - SPOT and OPTION buyer: cash Spot and futures mode: - Isolated MARGIN: isolated - Cross MARGIN: cross - SPOT: cash - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated Multi-currency margin: - Isolated MARGIN: isolated - Cross SPOT: cross - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated Portfolio margin: - Isolated MARGIN: isolated - Cross SPOT: cross - Cross FUTURES/SWAP/OPTION: cross - Isolated FUTURES/SWAP/OPTION: isolated clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among the clOrdIds of all pending orders. posSide Position side, this parameter is not mandatory in net mode. If you pass it through, the only valid value is net. In long/short mode, it is mandatory. Valid values are long or short. In long/short mode, side and posSide need to be specified in the combinations below: Open long: buy and open long (side: fill in buy; posSide: fill in long) Open short: sell and open short (side: fill in sell; posSide: fill in short) Close long: sell and close long (side: fill in sell; posSide: fill in long) Close short: buy and close short (side: fill in buy; posSide: fill in short) Portfolio margin mode: Expiry Futures and Perpetual Futures only support net mode ordType Order type. When creating a new order, you must specify the order type. The order type you specify will affect: 1) what order parameters are required, and 2) how the matching system executes your order. The following are valid order types: limit: Limit order, which requires specified sz and px. market: Market order. For SPOT and MARGIN, market order will be filled with market price (by swiping opposite order book). For Expiry Futures and Perpetual Futures, market order will be placed to order book with most aggressive price allowed by Price Limit Mechanism. For OPTION, market order is not supported yet. As the filled price for market orders cannot be determined in advance, OKX reserves/freezes your quote currency by an additional 5% for risk check. post_only: Post-only order, which the order can only provide liquidity to the market and be a maker. If the order would have executed on placement, it will be canceled instead. fok: Fill or kill order. If the order cannot be fully filled, the order will be canceled. The order would not be partially filled. ioc: Immediate or cancel order. Immediately execute the transaction at the order price, cancel the remaining unfilled quantity of the order, and the order quantity will not be displayed in the order book. optimal_limit_ioc: Market order with ioc (immediate or cancel). Immediately execute the transaction of this market order, cancel the remaining unfilled quantity of the order, and the order quantity will not be displayed in the order book. Only applicable to Expiry Futures and Perpetual Futures. sz Quantity to buy or sell. For SPOT/MARGIN Buy and Sell Limit Orders, it refers to the quantity in base currency. For MARGIN Buy Market Orders, it refers to the quantity in quote currency. For MARGIN Sell Market Orders, it refers to the quantity in base currency. For SPOT Market Orders, it is set by tgtCcy. For FUTURES/SWAP/OPTION orders, it refers to the number of contracts. reduceOnly When placing an order with this parameter set to true, it means that the order will reduce the size of the position only For the same MARGIN instrument, the coin quantity of all reverse direction pending orders adds `sz` of new `reduceOnly` order cannot exceed the position assets. After the debt is paid off, if there is a remaining size of orders, the position will not be opened in reverse, but will be traded in SPOT. For the same FUTURES/SWAP instrument, the sum of the current order size and all reverse direction reduce-only pending orders which's price-time priority is higher than the current order, cannot exceed the contract quantity of position. Only applicable to `Spot and futures mode` and `Multi-currency margin` Only applicable to `MARGIN` orders, and `FUTURES`/`SWAP` orders in `net` mode Notice: Under long/short mode of Expiry Futures and Perpetual Futures, all closing orders apply the reduce-only feature which is not affected by this parameter. tgtCcy This parameter is used to specify the order quantity in the order request is denominated in the quantity of base or quote currency. This is applicable to SPOT Market Orders only. Base currency: base_ccy Quote currency: quote_ccy If you use the Base Currency quantity for buy market orders or the Quote Currency for sell market orders, please note: 1. If the quantity you enter is greater than what you can buy or sell, the system will execute the order according to your maximum buyable or sellable quantity. If you want to trade according to the specified quantity, you should use Limit orders. 2. When the market price is too volatile, the locked balance may not be sufficient to buy the Base Currency quantity or sell to receive the Quote Currency that you specified. We will change the quantity of the order to execute the order based on best effort principle based on your account balance. In addition, we will try to over lock a fraction of your balance to avoid changing the order quantity. 2.1 Example of base currency buy market order: Taking the market order to buy 10 LTCs as an example, and the user can buy 11 LTC. At this time, if 10 < 11, the order is accepted. When the LTC-USDT market price is 200, and the locked balance of the user is 3,000 USDT, as 200*10 < 3,000, the market order of 10 LTC is fully executed; If the market is too volatile and the LTC-USDT market price becomes 400, 400*10 > 3,000, the user's locked balance is not sufficient to buy using the specified amount of base currency, the user's maximum locked balance of 3,000 USDT will be used to settle the trade. Final transaction quantity becomes 3,000/400 = 7.5 LTC. 2.2 Example of quote currency sell market order: Taking the market order to sell 1,000 USDT as an example, and the user can sell 1,200 USDT, 1,000 < 1,200, the order is accepted. When the LTC-USDT market price is 200, and the locked balance of the user is 6 LTC, as 1,000/200 < 6, the market order of 1,000 USDT is fully executed; If the market is too volatile and the LTC-USDT market price becomes 100, 100*6 < 1,000, the user's locked balance is not sufficient to sell using the specified amount of quote currency, the user's maximum locked balance of 6 LTC will be used to settle the trade. Final transaction quantity becomes 6 * 100 = 600 USDT. px The value for px must be a multiple of tickSz for OPTION orders. If not, the system will apply the rounding rules below. Using tickSz 0.0005 as an example: The px will be rounded up to the nearest 0.0005 when the remainder of px to 0.0005 is more than 0.00025 or `px` is less than 0.0005. The px will be rounded down to the nearest 0.0005 when the remainder of px to 0.0005 is less than 0.00025 and `px` is more than 0.0005. Mandatory self trade prevention (STP) The trading platform imposes mandatory self trade prevention at master account level, which means the accounts under the same master account, including master account itself and all its affiliated sub-accounts, will be prevented from self trade. The default STP mode is `Cancel Maker`. Users can also utilize the stpMode request parameter of the placing order endpoint to determine the stpMode of a certain order. Mandatory self trade prevention will not lead to latency. There are three STP modes. The STP mode is always taken based on the configuration in the taker order. 1. Cancel Maker: This is the default STP mode, which cancels the maker order to prevent self-trading. Then, the taker order continues to match with the next order based on the order book priority. 2. Cancel Taker: The taker order is canceled to prevent self-trading. If the user's own maker order is lower in the order book priority, the taker order is partially filled and then canceled. FOK orders are always honored and canceled if they would result in self-trading. 3. Cancel Both: Both taker and maker orders are canceled to prevent self-trading. If the user's own maker order is lower in the order book priority, the taker order is partially filled. Then, the remaining quantity of the taker order and the first maker order are canceled. FOK orders are not supported in this mode. WS / PLACE MULTIPLE ORDERS Place orders in a batch. Maximum 20 orders can be placed per request URL PATH /ws/v5/private (required login) RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Place order`. Rate limit is shared with the `Place multiple orders` REST API endpoints > Request Example Copy to Clipboard{ "id": "1513", "op": "batch-orders", "args": [ { "side": "buy", "instId": "BTC-USDT", "tdMode": "cash", "ordType": "market", "sz": "100" }, { "side": "buy", "instId": "LTC-USDT", "tdMode": "cash", "ordType": "market", "sz": "1" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation batch-orders args Array Yes Request Parameters > instId String Yes Instrument ID, e.g. BTC-USDT > tdMode String Yes Trade mode Margin mode isolated cross Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading, tdMode should be spot_isolated for SPOT lead trading.) > ccy String No Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. > clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > side String Yes Order side, buy sell > posSide String Conditional Position side The default net in the net mode It is required in the long/short mode, and only be long or short. Only applicable to FUTURES/SWAP. > ordType String Yes Order type market: market order limit: limit order post_only: Post-only order fok: Fill-or-kill order ioc: Immediate-or-cancel order optimal_limit_ioc: Market order with immediate-or-cancel order (applicable only to Expiry Futures and Perpetual Futures) mmp: Market Maker Protection (only applicable to Option in Portfolio Margin mode) mmp_and_post_only: Market Maker Protection and Post-only order(only applicable to Option in Portfolio Margin mode). > sz String Yes Quantity to buy or sell. > px String Conditional Order price. Only applicable to limit,post_only,fok,ioc,mmp,mmp_and_post_only order. When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > pxUsd String Conditional Place options orders in USD Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > pxVol String Conditional Place options orders based on implied volatility, where 1 represents 100% Only applicable to options When placing an option order, one of px/pxUsd/pxVol must be filled in, and only one can be filled in > reduceOnly Boolean No Whether the order can only reduce the position size. Valid options: true or false. The default value is false. Only applicable to MARGIN orders, and FUTURES/SWAP orders in net mode Only applicable to Spot and futures mode and Multi-currency margin > tgtCcy String No Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell > banAmend Boolean No Whether to disallow the system from amending the size of the SPOT Market Order. Valid options: true or false. The default value is false. If true, system will not amend and reject the market order if user does not have sufficient funds. Only applicable to SPOT Market Orders > quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) > stpId String No Self trade prevention ID. Orders from the same master account with the same ID will be prevented from self trade. Numerical integers defined by user in the range of 1<= x<= 999999999 (deprecated) > stpMode String No Self trade prevention mode. Default to cancel maker cancel_maker,cancel_taker, cancel_both Cancel both does not support FOK. expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 > Response Example When All Succeed Copy to Clipboard{ "id": "1513", "op": "batch-orders", "data": [ { "clOrdId": "", "ordId": "12345689", "tag": "", "ts": "1695190491421", "sCode": "0", "sMsg": "" }, { "clOrdId": "", "ordId": "12344", "tag": "", "ts": "1695190491421", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Partially Successful Copy to Clipboard{ "id": "1513", "op": "batch-orders", "data": [ { "clOrdId": "", "ordId": "12345689", "tag": "", "ts": "1695190491421", "sCode": "0", "sMsg": "" }, { "clOrdId": "", "ordId": "", "tag": "", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "Insufficient margin" } ], "code": "2", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When All Failed Copy to Clipboard{ "id": "1513", "op": "batch-orders", "data": [ { "clOrdId": "oktswap6", "ordId": "", "tag": "", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "Insufficient margin" }, { "clOrdId": "oktswap7", "ordId": "", "tag": "", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "Insufficient margin" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1513", "op": "batch-orders", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String Order status code, 0 means success > sMsg String Rejection or success message of event execution. inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 In the `Portfolio Margin` account mode, either all orders are accepted by the system successfully, or all orders are rejected by the system. clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among all pending orders and the current request. WS / CANCEL ORDER Cancel an incomplete order URL PATH /ws/v5/private (required login) RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit is shared with the `Cancel order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1514", "op": "cancel-order", "args": [ { "instId": "BTC-USDT", "ordId": "2510789768709120" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation cancel-order args Array Yes Request Parameters > instId String Yes Instrument ID > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used > clOrdId String Conditional Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Successful Response Example Copy to Clipboard{ "id": "1514", "op": "cancel-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "ts": "1695190491421", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Failure Response Example Copy to Clipboard{ "id": "1514", "op": "cancel-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "Order not exist" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1514", "op": "cancel-order", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String Order status code, 0 means success > sMsg String Order status message inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 Cancel order returns with sCode equal to 0. It is not strictly considered that the order has been canceled. It only means that your cancellation request has been accepted by the system server. The result of the cancellation is subject to the state pushed by the order channel or the get order state. WS / CANCEL MULTIPLE ORDERS Cancel incomplete orders in batches. Maximum 20 orders can be canceled per request. URL PATH /ws/v5/private (required login) RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Cancel order`. Rate limit is shared with the `Cancel multiple orders` REST API endpoints > Request Example Copy to Clipboard{ "id": "1515", "op": "batch-cancel-orders", "args": [ { "instId": "BTC-USDT", "ordId": "2517748157541376" }, { "instId": "LTC-USDT", "ordId": "2517748155771904" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation batch-cancel-orders args Array Yes Request Parameters > instId String Yes Instrument ID > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used > clOrdId String Conditional Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Response Example When All Succeed Copy to Clipboard{ "id": "1515", "op": "batch-cancel-orders", "data": [ { "clOrdId": "oktswap6", "ordId": "2517748157541376", "ts": "1695190491421", "sCode": "0", "sMsg": "" }, { "clOrdId": "oktswap7", "ordId": "2517748155771904", "ts": "1695190491421", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When partially successfully Copy to Clipboard{ "id": "1515", "op": "batch-cancel-orders", "data": [ { "clOrdId": "oktswap6", "ordId": "2517748157541376", "ts": "1695190491421", "sCode": "0", "sMsg": "" }, { "clOrdId": "oktswap7", "ordId": "2517748155771904", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "2", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When All Failed Copy to Clipboard{ "id": "1515", "op": "batch-cancel-orders", "data": [ { "clOrdId": "oktswap6", "ordId": "2517748157541376", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "order not exist" }, { "clOrdId": "oktswap7", "ordId": "2517748155771904", "ts": "1695190491421", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1515", "op": "batch-cancel-orders", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > sCode String Order status code, 0 means success > sMsg String Order status message inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 WS / AMEND ORDER Amend an incomplete order. URL PATH /ws/v5/private (required login) RATE LIMIT: 60 REQUESTS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Rate limit is shared with the `Amend order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1512", "op": "amend-order", "args": [ { "instId": "BTC-USDT", "ordId": "2510789768709120", "newSz": "2" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation amend-order args Array Yes Request Parameters > instId String Yes Instrument ID > cxlOnFail Boolean No Whether the order needs to be automatically canceled when the order amendment fails Valid options: false or true, the default is false. > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used. > clOrdId String Conditional Client Order ID as assigned by the client > reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > newSz String Conditional New quantity after amendment and it has to be larger than 0. Either newSz or newPx is required. When amending a partially-filled order, the newSz should include the amount that has been filled. > newPx String Conditional New price after amendment. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. It must be consistent with parameters when placing orders. For example, if users placed the order using px, they should use newPx when modifying the order. > newPxUsd String Conditional Modify options orders using USD prices Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. > newPxVol String Conditional Modify options orders based on implied volatility, where 1 represents 100% Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 > Successful Response Example Copy to Clipboard{ "id": "1512", "op": "amend-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "ts": "1695190491421", "reqId": "b12344", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Failure Response Example Copy to Clipboard{ "id": "1512", "op": "amend-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "ts": "1695190491421", "reqId": "b12344", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "amend-order", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > reqId String Client Request ID as assigned by the client for order amendment > sCode String Order status code, 0 means success > sMsg String Order status message inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 newSz If the new quantity of the order is less than or equal to the filled quantity when you are amending a partially-filled order, the order status will be changed to filled. The amend order returns sCode equal to 0. It is not strictly considered that the order has been amended. It only means that your amend order request has been accepted by the system server. The result of the amend is subject to the status pushed by the order channel or the order status query WS / AMEND MULTIPLE ORDERS Amend incomplete orders in batches. Maximum 20 orders can be amended per request. URL PATH /ws/v5/private (required login) RATE LIMIT: 300 ORDERS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 4 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY Rate limit of this endpoint will also be affected by the rules Sub-account rate limit and Fill ratio based sub-account rate limit. Unlike other endpoints, the rate limit of this endpoint is determined by the number of orders. If there is only one order in the request, it will consume the rate limit of `Amend order`. Rate limit is shared with the `Amend multiple orders` REST API endpoints > Request Example Copy to Clipboard{ "id": "1513", "op": "batch-amend-orders", "args": [ { "instId": "BTC-USDT", "ordId": "12345689", "newSz": "2" }, { "instId": "BTC-USDT", "ordId": "12344", "newSz": "2" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation batch-amend-orders args Array Yes Request Parameters > instId String Yes Instrument ID > cxlOnFail Boolean No Whether the order needs to be automatically canceled when the order amendment fails Valid options: false or true, the default is false. > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used. > clOrdId String Conditional Client Order ID as assigned by the client > reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > newSz String Conditional New quantity after amendment and it has to be larger than 0. Either newSz or newPx is required. When amending a partially-filled order, the newSz should include the amount that has been filled. > newPx String Conditional New price after amendment. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. It must be consistent with parameters when placing orders. For example, if users placed the order using px, they should use newPx when modifying the order. > newPxUsd String Conditional Modify options orders using USD prices Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. > newPxVol String Conditional Modify options orders based on implied volatility, where 1 represents 100% Only applicable to options. When modifying options orders, users can only fill in one of the following: newPx, newPxUsd, or newPxVol. expTime String No Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085 > Response Example When All Succeed Copy to Clipboard{ "id": "1513", "op": "batch-amend-orders", "data": [ { "clOrdId": "oktswap6", "ordId": "12345689", "ts": "1695190491421", "reqId": "b12344", "sCode": "0", "sMsg": "" }, { "clOrdId": "oktswap7", "ordId": "12344", "ts": "1695190491421", "reqId": "b12344", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When All Failed Copy to Clipboard{ "id": "1513", "op": "batch-amend-orders", "data": [ { "clOrdId": "", "ordId": "12345689", "ts": "1695190491421", "reqId": "b12344", "sCode": "5XXXX", "sMsg": "order not exist" }, { "clOrdId": "oktswap7", "ordId": "", "ts": "1695190491421", "reqId": "b12344", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "1", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Partially Successful Copy to Clipboard{ "id": "1513", "op": "batch-amend-orders", "data": [ { "clOrdId": "", "ordId": "12345689", "ts": "1695190491421", "reqId": "b12344", "sCode": "0", "sMsg": "" }, { "clOrdId": "oktswap7", "ordId": "", "ts": "1695190491421", "reqId": "b12344", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "2", "msg": "", "inTime": "1695190491421339", "outTime": "1695190491423240" } > Response Example When Format Error Copy to Clipboard{ "id": "1513", "op": "batch-amend-orders", "data": [], "code": "60013", "msg": "Invalid args", "inTime": "1695190491421339", "outTime": "1695190491423240" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > ts String Timestamp when the order request processing is finished by our system, Unix timestamp format in milliseconds, e.g. 1597026383085 > reqId String Client Request ID as assigned by the client for order amendment If the user provides reqId in the request, the corresponding reqId will be returned > sCode String Order status code, 0 means success > sMsg String Order status message inTime String Timestamp at Websocket gateway when the request is received, Unix timestamp format in microseconds, e.g. 1597026383085123 outTime String Timestamp at Websocket gateway when the response is sent, Unix timestamp format in microseconds, e.g. 1597026383085123 newSz If the new quantity of the order is less than or equal to the filled quantity when you are amending a partially-filled order, the order status will be changed to filled. WS / MASS CANCEL ORDER Cancel all the MMP pending orders of an instrument family. Only applicable to Option in Portfolio Margin mode, and MMP privilege is required. URL PATH /ws/v5/private (required login) RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID Rate limit is shared with the `Mass Cancel Order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1512", "op": "mass-cancel", "args": [{ "instType":"OPTION", "instFamily":"BTC-USD" }] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message Provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation mass-cancel args Array Yes Request parameters > instType String Yes Instrument type OPTION > instFamily String Yes Instrument family > lockInterval String No Lock interval(ms) The range should be [0, 10 000] The default is 0. You can set it as "0" if you want to unlock it immediately. Error 54008 will be thorwn when placing order duiring lock interval, it is different from 51034 which is thrown when MMP is triggered > SUCCESSFUL RESPONSE EXAMPLE Copy to Clipboard{ "id": "1512", "op": "mass-cancel", "data": [ { "result": true } ], "code": "0", "msg": "" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "order", "data": [], "code": "60013", "msg": "Invalid args" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > result Boolean Result of the request true, false ALGO TRADING POST / PLACE ALGO ORDER The algo order includes trigger order, oco order, conditional order, twap order and trailing order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT OF LEAD INSTRUMENTS FOR COPY TRADING: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST POST /api/v5/trade/order-algo > Request Example Copy to Clipboard# Place Take Profit / Stop Loss Order POST /api/v5/trade/order-algo body { "instId":"BTC-USDT", "tdMode":"cross", "side":"buy", "ordType":"conditional", "sz":"2", "tpTriggerPx":"15", "tpOrdPx":"18" } # Place Trigger Order POST /api/v5/trade/order-algo body { "instId": "BTC-USDT-SWAP", "side": "buy", "tdMode": "cross", "posSide": "net", "sz": "1", "ordType": "trigger", "triggerPx": "25920", "triggerPxType": "last", "orderPx": "-1", "attachAlgoOrds": [{ "attachAlgoClOrdId": "", "slTriggerPx": "100", "slOrdPx": "600", "tpTriggerPx": "25921", "tpOrdPx": "2001" }] } # Place Trailing Stop Order POST /api/v5/trade/order-algo body { "instId": "BTC-USDT-SWAP", "tdMode": "cross", "side": "buy", "ordType": "move_order_stop", "sz": "10", "posSide": "net", "callbackRatio": "0.05", "reduceOnly": true } # Place TWAP Order POST /api/v5/trade/order-algo body { "instId": "BTC-USDT-SWAP", "tdMode": "cross", "side": "buy", "ordType": "twap", "sz": "10", "posSide": "net", "szLimit": "10", "pxLimit": "100", "timeInterval": "10", "pxSpread": "10" } Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # One-way stop order result = tradeAPI.place_algo_order( instId="BTC-USDT", tdMode="cross", side="buy", ordType="conditional", sz="2", tpTriggerPx="15", tpOrdPx="18" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT tdMode String Yes Trade mode Margin mode cross isolated Non-Margin mode cash spot_isolated (only applicable to SPOT lead trading) ccy String No Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. side String Yes Order side, buy sell posSide String Conditional Position side Required in long/short mode and only be long or short ordType String Yes Order type conditional: One-way stop order oco: One-cancels-the-other order trigger: Trigger order move_order_stop: Trailing order twap: TWAP order sz String Conditional Quantity to buy or sell Either sz or closeFraction is required. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. tgtCcy String No Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT traded with Market buy conditional order Default is quote_ccy for buy, base_ccy for sell algoClOrdId String No Client-supplied Algo ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. closeFraction String Conditional Fraction of position to be closed when the algo order is triggered. Currently the system supports fully closing the position only so the only accepted value is 1. For the same position, only one TPSL pending order for fully closing the position is supported. This is only applicable to FUTURES or SWAP instruments. If posSide is net, reduceOnly must be true. This is only applicable if ordType is conditional or oco. This is only applicable if the stop loss and take profit order is executed as market order. This is not supported in Portfolio Margin mode. Either sz or closeFraction is required. Take Profit / Stop Loss Order Predefine the price you want the order to trigger a market order to execute immediately or it will place a limit order. This type of order will not freeze your free margin in advance. learn more about Take Profit / Stop Loss Order Parameter Type Required Description tpTriggerPx String No Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last tpOrdPx String No Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. tpOrdKind String No TP order kind condition limit The default is condition slTriggerPx String No Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last slOrdPx String No Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. cxlOnClosePos Boolean No Whether the TP/SL order placed by the user is associated with the corresponding position of the instrument. If it is associated, the TP/SL order will be canceled when the position is fully closed; if it is not, the TP/SL order will not be affected when the position is fully closed. Valid values: true: Place a TP/SL order associated with the position false: Place a TP/SL order that is not associated with the position The default value is false. If true is passed in, users must pass reduceOnly = true as well, indicating that when placing a TP/SL order associated with a position, it must be a reduceOnly order. Only applicable to Spot and futures mode and Multi-currency margin. reduceOnly Boolean No Whether the order can only reduce the position size. Valid options: true or false. The default value is false. quickMgnType String No Quick Margin type Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) Take Profit / Stop Loss Order When placing net TP/SL order (ordType=conditional) and both take-profit and stop-loss parameters are sent, only stop-loss logic will be performed and take-profit logic will be ignored. Trigger Order Use a trigger order to place a market or limit order when a specific price level is crossed. When a Trigger Order is triggered, if your account balance is lower than the order amount, the system will automatically place the order based on your current balance. Trigger orders do not freeze assets when placed. Only applicable to SPOT/FUTURES/SWAP learn more about Trigger Order Parameter Type Required Description triggerPx String Yes Trigger price orderPx String Yes Order Price If the price is -1, the order will be executed at the market price. triggerPxType String No Trigger price type last: last price index: index price mark: mark price The default is last quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) attachAlgoOrds Array of object No Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > attachAlgoClOrdId String No Client-supplied Algo ID when placing order attaching TP/SL. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String No Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. > tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last > tpOrdPx String No Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. > slTriggerPx String No Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last > slOrdPx String No Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. Trailing Stop Order A trailing stop order is a stop order that tracks the market price. Its trigger price changes with the market price. Once the trigger price is reached, a market order is placed. Actual trigger price for sell orders and short positions = Highest price after order placement – Trail variance (Var.), or Highest price after placement × (1 – Trail variance) (Ratio). Actual trigger price for buy orders and long positions = Lowest price after order placement + Trail variance, or Lowest price after order placement × (1 + Trail variance). You can use the activation price to set the activation condition for a trailing stop order. learn more about Trailing Stop Order Parameter Type Required Description callbackRatio String Conditional Callback price ratio, e.g. 0.01 represents 1% Either callbackRatio or callbackSpread is allowed to be passed. callbackSpread String Conditional Callback price variance activePx String No Active price The system will only start tracking the market and calculating your trigger price after the activation price is reached. If you don’t set a price, your order will be activated as soon as it’s placed. quickMgnType String No Quick Margin type. Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay The default value is manual(Deprecated) reduceOnly Boolean No Whether the order can only reduce the position size. Valid options: true or false. The default value is false. This parameter is only valid in the FUTRUES/SWAP net mode, and is ignored in the long/short mode. TWAP Order Time-weighted average price (TWAP) strategy splits your order and places smaller orders at regular time intervals. It is a strategy that will attempt to execute an order which trades in slices of order quantity at regular intervals of time as specified by users. learn more about TWAP Order Parameter Type Required Description pxVar String Conditional Price variance by percentage, range between [0.0001 ~ 0.01], e.g. 0.01 represents 1% Take buy orders as an example. When the market price is lower than the limit price, small buy orders will be placed above the best bid price within a certain range. This parameter determines the range by percentage. Either pxVar or pxSpread is allowed to be passed. pxSpread String Conditional Price variance by constant, should be no less then 0 (no upper limit) Take buy orders as an example. When the market price is lower than the limit price, small buy orders will be placed above the best bid price within a certain range. This parameter determines the range by constant. szLimit String Yes Average amount Take buy orders as an example. When the market price is lower than the limit price, a certain amount of buy orders will be placed above the best bid price within a certain range. This parameter determines the amount. pxLimit String Yes Price Limit, should be no less then 0 (no upper limit) Take buy orders as an example. When the market price is lower than the limit price, small buy orders will be placed above the best bid price within a certain range. This parameter represents the limit price. timeInterval String Yes Time interval in unit of second ake buy orders as an example. When the market price is lower than the limit price, small buy orders will be placed above the best bid price within a certain range based on the time cycle. This parameter represents the time cycle. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "order1234", "algoId": "1836487817828872192", "clOrdId": "", "sCode": "0", "sMsg": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID clOrdId String Client Order ID as assigned by the client(Deprecated) algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. tag String Order tag POST / CANCEL ALGO ORDER Cancel unfilled algo orders. A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST POST /api/v5/trade/cancel-algos > Request Example Copy to ClipboardPOST /api/v5/trade/cancel-algos body [ { "algoId":"590919993110396111", "instId":"BTC-USDT" }, { "algoId":"590920138287841222", "instId":"BTC-USDT" } ] Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Cancel unfilled algo orders (not including Iceberg order, TWAP order, Trailing Stop order) algo_orders = [ {"instId": "BTC-USDT", "algoId": "590919993110396111"}, {"instId": "BTC-USDT", "algoId": "590920138287841222"} ] result = tradeAPI.cancel_algo_order(algo_orders) print(result) REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID, e.g. BTC-USDT > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "1836489397437468672", "clOrdId": "", "sCode": "0", "sMsg": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. clOrdId String Client Order ID as assigned by the client(Deprecated) algoClOrdId String Client-supplied Algo ID(Deprecated) tag String Order tag (Deprecated) POST / AMEND ALGO ORDER Amend unfilled algo orders (Support Stop order and Trigger order only, not including Move_order_stop order, Iceberg order, TWAP order, Trailing Stop order). RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID + INSTRUMENT ID HTTP REQUEST POST /api/v5/trade/amend-algos > Request Example Copy to ClipboardPOST /api/v5/trade/amend-algos body { "algoId":"2510789768709120", "newSz":"2", "instId":"BTC-USDT" } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID algoId String Conditional Algo ID Either algoId or algoClOrdId is required. If both are passed, algoId will be used. algoClOrdId String Conditional Client-supplied Algo ID Either algoId or algoClOrdId is required. If both are passed, algoId will be used. cxlOnFail Boolean No Whether the order needs to be automatically canceled when the order amendment fails Valid options: false or true, the default is false. reqId String Conditional Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. The response will include the corresponding reqId to help you identify the request if you provide it in the request. newSz String Conditional New quantity after amendment and it has to be larger than 0. Take Profit / Stop Loss Order Parameter Type Required Description newTpTriggerPx String Conditional Take-profit trigger price. Either the take-profit trigger price or order price is 0, it means that the take-profit is deleted newTpOrdPx String Conditional Take-profit order price If the price is -1, take-profit will be executed at the market price. newSlTriggerPx String Conditional Stop-loss trigger price. Either the stop-loss trigger price or order price is 0, it means that the stop-loss is deleted newSlOrdPx String Conditional Stop-loss order price If the price is -1, stop-loss will be executed at the market price. newTpTriggerPxType String Conditional Take-profit trigger price type last: last price index: index price mark: mark price newSlTriggerPxType String Conditional Stop-loss trigger price type last: last price index: index price mark: mark price Trigger Order Parameter Type Required Description newTriggerPx String Yes New trigger price after amendment newOrdPx String Yes New order price after amendment If the price is -1, the order will be executed at the market price. newTriggerPxType String No New trigger price type after amendment last: last price index: index price mark: mark price The default is last attachAlgoOrds Array of object No Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > newTpTriggerPx String No Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. > newTpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price The default is last > newTpOrdPx String No Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. > newSlTriggerPx String No Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > newSlTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price The default is last > newSlOrdPx String No Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoClOrdId":"algo_01", "algoId":"2510789768709120", "reqId":"po103ux", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID reqId String Client Request ID as assigned by the client for order amendment. sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. POST / CANCEL ADVANCE ALGO ORDER This endpoint will be offline soon, please use Cancel algo order Cancel unfilled algo orders (including Iceberg order, TWAP order, Trailing Stop order). A maximum of 10 orders can be canceled per request. Request parameters should be passed in the form of an array. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE (EXCEPT OPTIONS): USERID + INSTRUMENT ID RATE LIMIT RULE (OPTIONS ONLY): USERID + INSTRUMENT FAMILY HTTP REQUEST POST /api/v5/trade/cancel-advance-algos > Request Example Copy to ClipboardPOST /api/v5/trade/cancel-advance-algos body [ { "algoId":"590920768125665111", "instId":"BTC-USDT" }, { "algoId":"590920799650058222", "instId":"BTC-USDT" } ] Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Cancel unfilled algo orders (including Iceberg order, TWAP order, Trailing Stop order) algo_orders_advance = [ {"instId": "BTC-USDT", "algoId": "590920768125665111"}, {"instId": "BTC-USDT", "algoId": "590920799650058222"} ] result = tradeAPI.cancel_advance_algos(algo_orders_advance) print(result) REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID, e.g. BTC-USDT > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoId":"1234", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Order ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. GET / ALGO ORDER DETAILS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/order-algo > Request Example Copy to ClipboardGET /api/v5/trade/order-algo?algoId=1753184812254216192 REQUEST PARAMETERS Parameter Type Required Description algoId String Conditional Algo ID Either algoId or algoClOrdId is required.If both are passed, algoId will be used. algoClOrdId String Conditional Client-supplied Algo ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "activePx": "", "actualPx": "", "actualSide": "", "actualSz": "", "algoClOrdId": "", "algoId": "681187161907138560", "amendPxOnTriggerType": "", "attachAlgoOrds": [], "cTime": "1708679675244", "uTime": "1708679675245", "callbackRatio": "0.05", "callbackSpread": "", "ccy": "", "clOrdId": "", "closeFraction": "", "failCode": "", "instId": "BTC-USDT", "instType": "SPOT", "last": "50962.7", "lever": "", "linkedOrd": { "ordId": "" }, "moveTriggerPx": "53423.160", "ordId": "", "ordIdList": [], "ordPx": "", "ordType": "move_order_stop", "posSide": "net", "pxLimit": "", "pxSpread": "", "pxVar": "", "quickMgnType": "", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "state": "live", "sz": "10", "szLimit": "", "tag": "", "tdMode": "cash", "tgtCcy": "", "timeInterval": "", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "triggerPx": "", "triggerPxType": "", "triggerTime": "", "isTradeBorrowMode": "true" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Latest order ID. It will be deprecated soon ordIdList Array Order ID list. There will be multiple order IDs when there is TP/SL splitting order. algoId String Algo ID clOrdId String Client Order ID as assigned by the client sz String Quantity to buy or sell closeFraction String Fraction of position to be closed when the algo order is triggered ordType String Order type side String Order side posSide String Position side tdMode String Trade mode tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell state String State live pause partially_effective effective canceled order_failed partially_failed lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. triggerPx String trigger price. triggerPxType String trigger price type. last: last price index: index price mark: mark price ordPx String Order price for the trigger order actualSz String Actual order quantity actualPx String Actual order price tag String Order tag actualSide String Actual trigger side, tp: take profit sl: stop loss Only applicable to oco order and conditional order triggerTime String Trigger time, Unix timestamp format in milliseconds, e.g. 1597026383085 pxVar String Price ratio Only applicable to iceberg order or twap order pxSpread String Price variance Only applicable to iceberg order or twap order szLimit String Average amount Only applicable to iceberg order or twap order pxLimit String Price Limit Only applicable to iceberg order or twap order timeInterval String Time interval Only applicable to twap order callbackRatio String Callback price ratio Only applicable to move_order_stop order callbackSpread String Callback price variance Only applicable to move_order_stop order activePx String Active price Only applicable to move_order_stop order moveTriggerPx String Trigger price Only applicable to move_order_stop order reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay last String Last filled price while placing failCode String It represents that the reason that algo order fails to trigger. It is "" when the state is effective/canceled. There will be value when the state is order_failed, e.g. 51008; Only applicable to Stop Order, Trailing Stop Order, Trigger order. algoClOrdId String Client-supplied Algo ID amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable attachAlgoOrds Array of object Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. > tpTriggerPxType String Take-profit trigger price type last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. > slTriggerPx String Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slTriggerPxType String Stop-loss trigger price type last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. linkedOrd Object Linked TP order detail, only applicable to SL order that comes from the one-cancels-the-other (OCO) order that contains the TP limit order. > ordId String Order ID cTime String Creation time Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 isTradeBorrowMode String 是否自动借币 true:自动借币 false:不自动借币 仅适用于计划委托、移动止盈止损和 时间加权策略 GET / ALGO ORDER LIST Retrieve a list of untriggered Algo orders under the current account. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/orders-algo-pending > Request Example Copy to ClipboardGET /api/v5/trade/orders-algo-pending?ordType=conditional Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve a list of untriggered one-way stop orders result = tradeAPI.order_algos_list( ordType="conditional" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ordType String Yes Order type conditional: One-way stop order oco: One-cancels-the-other order trigger: Trigger order move_order_stop: Trailing order iceberg: Iceberg order twap: TWAP order For every request, unlike other ordType which only can use one type, conditional and oco both can be used and separated with comma. algoId String No Algo ID algoClOrdId String No Client-supplied Algo ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. instType String No Instrument type SPOT SWAP FUTURES MARGIN instId String No Instrument ID, e.g. BTC-USDT after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "activePx": "", "actualPx": "", "actualSide": "buy", "actualSz": "0", "algoClOrdId": "", "algoId": "681096944655273984", "amendPxOnTriggerType": "", "attachAlgoOrds": [], "cTime": "1708658165774", "uTime": "1708679675245", "callbackRatio": "", "callbackSpread": "", "ccy": "", "clOrdId": "", "closeFraction": "", "failCode": "", "instId": "BTC-USDT", "instType": "SPOT", "last": "51014.6", "lever": "", "moveTriggerPx": "", "ordId": "", "ordIdList": [], "ordPx": "-1", "ordType": "trigger", "posSide": "net", "pxLimit": "", "pxSpread": "", "pxVar": "", "quickMgnType": "", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "state": "live", "sz": "10", "szLimit": "", "tag": "", "tdMode": "cash", "tgtCcy": "", "timeInterval": "", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "triggerPx": "100", "triggerPxType": "last", "triggerTime": "0", "linkedOrd":{ "ordId":"98192973880283", }, "isTradeBorrowMode": "true" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Latest order ID. It will be deprecated soon ordIdList Array Order ID list. There will be multiple order IDs when there is TP/SL splitting order. algoId String Algo ID clOrdId String Client Order ID as assigned by the client sz String Quantity to buy or sell closeFraction String Fraction of position to be closed when the algo order is triggered ordType String Order type side String Order side posSide String Position side tdMode String Trade mode tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT traded with Market order state String State live pause lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP tpTriggerPx String Take-profit trigger price tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price slTriggerPx String Stop-loss trigger price slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price triggerPx String Trigger price triggerPxType String Trigger price type. last: last price index: index price mark: mark price ordPx String Order price for the trigger order actualSz String Actual order quantity tag String Order tag actualPx String Actual order price actualSide String Actual trigger side tp: take profit sl: stop loss Only applicable to oco order and conditional order triggerTime String Trigger time, Unix timestamp format in milliseconds, e.g. 1597026383085 pxVar String Price ratio Only applicable to iceberg order or twap order pxSpread String Price variance Only applicable to iceberg order or twap order szLimit String Average amount Only applicable to iceberg order or twap order pxLimit String Price Limit Only applicable to iceberg order or twap order timeInterval String Time interval Only applicable to twap order callbackRatio String Callback price ratio Only applicable to move_order_stop order callbackSpread String Callback price variance Only applicable to move_order_stop order activePx String Active price Only applicable to move_order_stop order moveTriggerPx String Trigger price Only applicable to move_order_stop order reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay last String Last filled price while placing failCode String It represents that the reason that algo order fails to trigger. There will be value when the state is order_failed, e.g. 51008; For this endpoint, it always is "". algoClOrdId String Client-supplied Algo ID amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable attachAlgoOrds Array of object Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. > tpTriggerPxType String Take-profit trigger price type last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. > slTriggerPx String Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slTriggerPxType String Stop-loss trigger price type last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. linkedOrd Object Linked TP order detail, only applicable to SL order that comes from the one-cancels-the-other (OCO) order that contains the TP limit order. > ordId String Order ID cTime String Creation time Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 isTradeBorrowMode String 是否自动借币 true:自动借币 false:不自动借币 仅适用于计划委托、移动止盈止损和 时间加权策略 GET / ALGO ORDER HISTORY Retrieve a list of all algo orders under the current account in the last 3 months. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/trade/orders-algo-history > Request Example Copy to ClipboardGET /api/v5/trade/orders-algo-history?ordType=conditional&state=effective Copy to Clipboardimport okx.Trade as Trade # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 tradeAPI = Trade.TradeAPI(apikey, secretkey, passphrase, False, flag) # Retrieve a list of all one-way stop algo orders result = tradeAPI.order_algos_history( state="effective", ordType="conditional" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ordType String Yes Order type conditional: One-way stop order oco: One-cancels-the-other order trigger: Trigger order move_order_stop: Trailing order iceberg: Iceberg order twap: TWAP order For every request, unlike other ordType which only can use one type, conditional and oco both can be used and separated with comma. state String Conditional State effective canceled order_failed Either state or algoId is required algoId String Conditional Algo ID Either state or algoId is required. instType String No Instrument type SPOT SWAP FUTURES MARGIN instId String No Instrument ID, e.g. BTC-USDT after String No Pagination of data to return records earlier than the requested algoId before String No Pagination of data to return records new than the requested algoId limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "activePx": "", "actualPx": "", "actualSide": "buy", "actualSz": "0", "algoClOrdId": "", "algoId": "681096944655273984", "amendPxOnTriggerType": "", "attachAlgoOrds": [], "cTime": "1708658165774", "uTime": "1708679675245", "callbackRatio": "", "callbackSpread": "", "ccy": "", "clOrdId": "", "closeFraction": "", "failCode": "", "instId": "BTC-USDT", "instType": "SPOT", "last": "51014.6", "lever": "", "moveTriggerPx": "", "ordId": "", "ordIdList": [], "ordPx": "-1", "ordType": "trigger", "posSide": "net", "pxLimit": "", "pxSpread": "", "pxVar": "", "quickMgnType": "", "reduceOnly": "false", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "state": "canceled", "sz": "10", "szLimit": "", "tag": "", "tdMode": "cash", "tgtCcy": "", "timeInterval": "", "tpOrdPx": "", "tpTriggerPx": "", "tpTriggerPxType": "", "triggerPx": "100", "triggerPxType": "last", "triggerTime": "", "linkedOrd":{ "ordId":"98192973880283", }, "isTradeBorrowMode": "true" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordId String Latest order ID. It will be deprecated soon ordIdList Array Order ID list. There will be multiple order IDs when there is TP/SL splitting order. algoId String Algo ID clOrdId String Client Order ID as assigned by the client sz String Quantity to buy or sell closeFraction String Fraction of position to be closed when the algo order is triggered ordType String Order type side String Order side posSide String Position side tdMode String Trade mode tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell state String State effective canceled order_failed partially_failed lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP tpTriggerPx String Take-profit trigger price. tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price tpOrdPx String Take-profit order price. slTriggerPx String Stop-loss trigger price. slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price slOrdPx String Stop-loss order price. triggerPx String trigger price. triggerPxType String trigger price type. last: last price index: index price mark: mark price ordPx String Order price for the trigger order actualSz String Actual order quantity actualPx String Actual order price tag String Order tag actualSide String Actual trigger side, tp: take profit sl: stop loss Only applicable to oco order and conditional order triggerTime String Trigger time, Unix timestamp format in milliseconds, e.g. 1597026383085 pxVar String Price ratio Only applicable to iceberg order or twap order pxSpread String Price variance Only applicable to iceberg order or twap order szLimit String Average amount Only applicable to iceberg order or twap order pxLimit String Price Limit Only applicable to iceberg order or twap order timeInterval String Time interval Only applicable to twap order callbackRatio String Callback price ratio Only applicable to move_order_stop order callbackSpread String Callback price variance Only applicable to move_order_stop order activePx String Active price Only applicable to move_order_stop order moveTriggerPx String Trigger price Only applicable to move_order_stop order reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. quickMgnType String Quick Margin type, Only applicable to Quick Margin Mode of isolated margin manual, auto_borrow, auto_repay last String Last filled price while placing failCode String It represents that the reason that algo order fails to trigger. It is "" when the state is effective/canceled. There will be value when the state is order_failed, e.g. 51008; Only applicable to Stop Order, Trailing Stop Order, Trigger order. algoClOrdId String Client Algo Order ID as assigned by the client. amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable attachAlgoOrds Array of object Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. > tpTriggerPx String Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. > tpTriggerPxType String Take-profit trigger price type last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. > slTriggerPx String Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. > slTriggerPxType String Stop-loss trigger price type last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. linkedOrd Object Linked TP order detail, only applicable to SL order that comes from the one-cancels-the-other (OCO) order that contains the TP limit order. > ordId String Order ID cTime String Creation time Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 isTradeBorrowMode String 是否自动借币 true:自动借币 false:不自动借币 仅适用于计划委托、移动止盈止损和 时间加权策略 WS / ALGO ORDERS CHANNEL Retrieve algo orders (includes trigger order, oco order, conditional order). Data will not be pushed when first subscribed. Data will only be pushed when there are order updates. URL PATH /ws/v5/business (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "orders-algo", "instType": "FUTURES", "instFamily": "BTC-USD", "instId": "BTC-USD-200329" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "orders-algo", "instType": "FUTURES", "instFamily": "BTC-USD" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name orders-algo > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders-algo", "instType": "FUTURES", "instFamily": "BTC-USD", "instId": "BTC-USD-200329" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders-algo", "instType": "FUTURES", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"orders-algo\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES ANY > instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg": { "channel": "orders-algo", "uid": "77982378738415879", "instType": "FUTURES", "instId": "BTC-USD-200329" }, "data": [{ "actualPx": "0", "actualSide": "", "actualSz": "0", "algoClOrdId": "", "algoId": "581878926302093312", "attachAlgoOrds": [], "amendResult": "", "cTime": "1685002746818", "uTime": "1708679675245", "ccy": "", "clOrdId": "", "closeFraction": "", "failCode": "", "instId": "BTC-USDC", "instType": "SPOT", "last": "26174.8", "lever": "0", "notionalUsd": "11.0", "ordId": "", "ordIdList": [], "ordPx": "", "ordType": "conditional", "posSide": "", "quickMgnType": "", "reduceOnly": "false", "reqId": "", "side": "buy", "slOrdPx": "", "slTriggerPx": "", "slTriggerPxType": "", "state": "live", "sz": "11", "tag": "", "tdMode": "cross", "tgtCcy": "quote_ccy", "tpOrdPx": "-1", "tpTriggerPx": "1", "tpTriggerPxType": "last", "triggerPx": "", "triggerTime": "", "amendPxOnTriggerType": "0", "linkedOrd":{ "ordId":"98192973880283" }, "isTradeBorrowMode": "" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type > instFamily String Instrument family > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID > ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. > ordId String Latest order ID, the order ID associated with the algo order. It will be deprecated soon > ordIdList Array Order ID list. There will be multiple order IDs when there is TP/SL splitting order. > algoId String Algo ID > clOrdId String Client Order ID as assigned by the client > sz String Quantity to buy or sell. SPOT/MARGIN: in the unit of currency. FUTURES/SWAP/OPTION: in the unit of contract. > ordType String Order type conditional: One-way stop order oco: One-cancels-the-other order trigger: Trigger order > side String Order side buy sell > posSide String Position side net long or short Only applicable to FUTURES/SWAP > tdMode String Trade mode cross: cross isolated: isolated cash: cash > tgtCcy String Order quantity unit setting for sz base_ccy: Base currency quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell > lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP > state String Order status live: to be effective effective: effective canceled: canceled order_failed: order failed partially_failed: partially failed > tpTriggerPx String Take-profit trigger price. > tpTriggerPxType String Take-profit trigger price type. last: last price index: index price mark: mark price > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slTriggerPxType String Stop-loss trigger price type. last: last price index: index price mark: mark price > slOrdPx String Stop-loss order price. > triggerPx String Trigger price > triggerPxType String Trigger price type. last: last price index: index price mark: mark price > ordPx String Order price for the trigger order > last String Last filled price while placing > actualSz String Actual order quantity > actualPx String Actual order price > notionalUsd String Estimated national value in USD of order > tag String Order tag > actualSide String Actual trigger side Only applicable to oco order and conditional order > triggerTime String Trigger time, Unix timestamp format in milliseconds, e.g. 1597026383085 > reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. > failCode String It represents that the reason that algo order fails to trigger. It is "" when the state is effective/canceled. There will be value when the state is order_failed, e.g. 51008; Only applicable to Stop Order, Trailing Stop Order, Trigger order. > algoClOrdId String Client Algo Order ID as assigned by the client. > reqId String Client Request ID as assigned by the client for order amendment. "" will be returned if there is no order amendment. > amendResult String The result of amending the order -1: failure 0: success > amendPxOnTriggerType String Whether to enable Cost-price SL. Only applicable to SL order of split TPs. 0: disable, the default value 1: Enable > attachAlgoOrds Array of object Attached SL/TP orders info Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin >> attachAlgoClOrdId String Client-supplied Algo ID when placing order attaching TP/SL. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. It will be posted to algoClOrdId when placing TP/SL order once the general order is filled completely. >> tpTriggerPx String Take-profit trigger price If you fill in this parameter, you should fill in the take-profit order price as well. >> tpTriggerPxType String Take-profit trigger price type last: last price index: index price mark: mark price >> tpOrdPx String Take-profit order price If you fill in this parameter, you should fill in the take-profit trigger price as well. If the price is -1, take-profit will be executed at the market price. >> slTriggerPx String Stop-loss trigger price If you fill in this parameter, you should fill in the stop-loss order price. >> slTriggerPxType String Stop-loss trigger price type last: last price index: index price mark: mark price >> slOrdPx String Stop-loss order price If you fill in this parameter, you should fill in the stop-loss trigger price. If the price is -1, stop-loss will be executed at the market price. > linkedOrd Object Linked TP order detail, only applicable to SL order that comes from the one-cancels-the-other (OCO) order that contains the TP limit order. >> ordId String Order ID > cTime String Creation time Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > isTradeBorrowMode String Whether borrowing currency automatically true false Only applicable to trigger order, trailing order and twap order WS / ADVANCE ALGO ORDERS CHANNEL Retrieve advance algo orders (including Iceberg order, TWAP order, Trailing order). Data will be pushed when first subscribed. Data will be pushed when triggered by events such as placing/canceling order. URL PATH /ws/v5/business (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "algo-advance", "instType": "SPOT", "instId": "BTC-USDT" } ] } > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "algo-advance", "instType": "SPOT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name algo-advance > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES ANY > instId String No Instrument ID > algoId String No Algo Order ID > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "algo-advance", "instType": "SPOT", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "algo-advance", "instType": "SPOT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"algo-advance\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES ANY > instId String No Instrument ID > algoId String No Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg":{ "channel":"algo-advance", "uid": "77982378738415879", "instType":"SPOT", "instId":"BTC-USDT" }, "data":[ { "actualPx":"", "actualSide":"", "actualSz":"0", "algoId":"355056228680335360", "cTime":"1630924001545", "ccy":"", "clOrdId": "", "count":"1", "instId":"BTC-USDT", "instType":"SPOT", "lever":"0", "notionalUsd":"", "ordPx":"", "ordType":"iceberg", "pTime":"1630924295204", "posSide":"net", "pxLimit":"10", "pxSpread":"1", "pxVar":"", "side":"buy", "slOrdPx":"", "slTriggerPx":"", "state":"pause", "sz":"0.1", "szLimit":"0.1", "tdMode":"cash", "timeInterval":"", "tpOrdPx":"", "tpTriggerPx":"", "tag": "adadadadad", "triggerPx":"", "triggerTime":"", "callbackRatio":"", "callbackSpread":"", "activePx":"", "moveTriggerPx":"", "failCode": "", "algoClOrdId": "", "reduceOnly": "", "isTradeBorrowMode": true } ] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type > instId String Instrument ID > algoId String Algo Order ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID > ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. > ordId String Order ID, the order ID associated with the algo order. > algoId String Algo ID > clOrdId String Client Order ID as assigned by the client > sz String Quantity to buy or sell. SPOT/MARGIN: in the unit of currency. FUTURES/SWAP/OPTION: in the unit of contract. > ordType String Order type iceberg: Iceberg order twap: TWAP order move_order_stop: Trailing order > side String Order side, buy sell > posSide String Position side net long or short Only applicable to FUTURES/SWAP > tdMode String Trade mode, cross: cross isolated: isolated cash: cash > tgtCcy String Order quantity unit setting for sz base_ccy: Base currency ,quote_ccy: Quote currency Only applicable to SPOT Market Orders Default is quote_ccy for buy, base_ccy for sell > lever String Leverage, from 0.01 to 125. Only applicable to MARGIN/FUTURES/SWAP > state String Order status live: to be effective effective: effective partially_effective: partially effective canceled: canceled order_failed: order failed > tpTriggerPx String Take-profit trigger price. > tpOrdPx String Take-profit order price. > slTriggerPx String Stop-loss trigger price. > slOrdPx String Stop-loss order price. > triggerPx String Trigger price > ordPx String Order price > actualSz String Actual order quantity > actualPx String Actual order price > notionalUsd String Estimated national value in USD of order > tag String Order tag > actualSide String Actual trigger side > triggerTime String Trigger time, Unix timestamp format in milliseconds, e.g. 1597026383085 > cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 > pxVar String Price ratio Only applicable to iceberg order or twap order > pxSpread String Price variance Only applicable to iceberg order or twap order > szLimit String Average amount Only applicable to iceberg order or twap order > pxLimit String Price limit Only applicable to iceberg order or twap order > timeInterval String Time interval Only applicable to twap order > count String Algo Order count Only applicable to iceberg order or twap order > callbackRatio String Callback price ratio Only applicable to move_order_stop order > callbackSpread String Callback price variance Only applicable to move_order_stop order > activePx String Active price Only applicable to move_order_stop order > moveTriggerPx String Trigger price Only applicable to move_order_stop order > failCode String It represents that the reason that algo order fails to trigger. It is "" when the state is effective/canceled. There will be value when the state is order_failed, e.g. 51008; Only applicable to Stop Order, Trailing Stop Order, Trigger order. > algoClOrdId String Client Algo Order ID as assigned by the client. > reduceOnly String Whether the order can only reduce the position size. Valid options: true or false. > pTime String Push time of algo order information, millisecond format of Unix timestamp, e.g. 1597026383085 > isTradeBorrowMode Boolean Whether borrowing currency automatically true false Only applicable to trigger order, trailing order and twap order GRID TRADING Grid trading works by the simple strategy of buy low and sell high. After you set the parameters, the system automatically places orders at incrementally increasing or decreasing prices. Overall, the grid bot seeks to capitalize on normal price volatility by placing buy and sell orders at certain regular intervals above and below a predefined base price. The API endpoints of Grid Trading require authentication. POST / PLACE GRID ALGO ORDER RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID + INSTRUMENT ID HTTP REQUEST POST /api/v5/tradingBot/grid/order-algo > Request Example Copy to Clipboard# Place spot grid algo order POST /api/v5/tradingBot/grid/order-algo body { "instId": "BTC-USDT", "algoOrdType": "grid", "maxPx": "5000", "minPx": "400", "gridNum": "10", "runType": "1", "quoteSz": "25", "triggerParams":[ { "triggerAction":"stop", "triggerStrategy":"price", "triggerPx":"1000" } ] } # Place contract grid algo order POST /api/v5/tradingBot/grid/order-algo body { "instId": "BTC-USDT-SWAP", "algoOrdType": "contract_grid", "maxPx": "5000", "minPx": "400", "gridNum": "10", "runType": "1", "sz": "200", "direction": "long", "lever": "2", "triggerParams":[ { "triggerAction":"start", "triggerStrategy":"rsi", "timeframe":"30M", "thold":"10", "triggerCond":"cross", "timePeriod":"14" }, { "triggerAction":"stop", "triggerStrategy":"price", "triggerPx":"1000", "stopType":"2" } ] } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT-SWAP algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid maxPx String Yes Upper price of price range minPx String Yes Lower price of price range gridNum String Yes Grid quantity runType String No Grid type 1: Arithmetic, 2: Geometric Default is Arithmetic tpTriggerPx String No TP tigger price Applicable to Spot grid/Contract grid slTriggerPx String No SL tigger price Applicable to Spot grid/Contract grid algoClOrdId String No Client-supplied Algo ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag profitSharingRatio String No Profit sharing ratio, it only supports these values 0,0.1,0.2,0.3 0.1 represents 10% triggerParams Array of object No Trigger Parameters Applicable to Spot grid/Contract grid > triggerAction String Yes Trigger action start stop > triggerStrategy String Yes Trigger strategy instant price rsi Default is instant > delaySeconds String No Delay seconds after action triggered > timeframe String No K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi > thold String No Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi > triggerCond String No Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi > timePeriod String No Time Period 14 This field is only valid when triggerStrategy is rsi > triggerPx String No Trigger Price This field is only valid when triggerStrategy is price > stopType String No Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop Spot Grid Order Parameter Type Required Description quoteSz String Conditional Invest amount for quote currency Either quoteSz or baseSz is required baseSz String Conditional Invest amount for base currency Either quoteSz or baseSz is required Contract Grid Order Parameter Type Required Description sz String Yes Used margin based on USDT direction String Yes Contract grid type long,short,neutral lever String Yes Leverage basePos Boolean No Whether or not open a position when the strategy activates Default is false Neutral contract grid should omit the parameter tpRatio String No Take profit ratio, 0.1 represents 10% slRatio String No Stop loss ratio, 0.1 represents 10% > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "447053782921515008", "sCode": "0", "sMsg": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. tag String Order tag POST / AMEND GRID ALGO ORDER RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/amend-order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/amend-order-algo body { "algoId":"448965992920907776", "instId":"BTC-USDT-SWAP", "slTriggerPx":"1200", "tpTriggerPx":"" } POST /api/v5/tradingBot/grid/amend-order-algo body { "algoId":"578963447615062016", "instId":"BTC-USDT", "triggerParams":[ { "triggerAction":"stop", "triggerStrategy":"price", "triggerPx":"1000" } ] } POST /api/v5/tradingBot/grid/amend-order-algo body { "algoId":"578963447615062016", "instId":"BTC-USDT-SWAP", "triggerParams":[ { "triggerAction":"stop", "triggerStrategy":"instant", "stopType":"1" } ] } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID, e.g. BTC-USDT-SWAP slTriggerPx String No New stop-loss trigger price if slTriggerPx is set "" means stop-loss trigger price is canceled. Either slTriggerPx or tpTriggerPx is required. tpTriggerPx String No New take-profit trigger price if tpTriggerPx is set "" means take-profit trigger price is canceled. tpRatio String No Take profit ratio, 0.1 represents 10%, only applicable to contract grid if it is set "" means take-profit ratio is canceled. slRatio String No Stop loss ratio, 0.1 represents 10%, only applicable to contract grid` if it is set "" means stop-loss ratio is canceled. triggerParams Array of object No Trigger Parameters > triggerAction String Yes Trigger action start stop > triggerStrategy String Yes Trigger strategy instant price rsi > triggerPx String No Trigger Price This field is only valid when triggerStrategy is price > stopType String No Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoClOrdId": "", "algoId":"448965992920907776", "sCode":"0", "sMsg":"", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. tag String Order tag POST / STOP GRID ALGO ORDER A maximum of 10 orders can be stopped per request. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/stop-order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/stop-order-algo body [ { "algoId":"448965992920907776", "instId":"BTC-USDT", "stopType":"1", "algoOrdType":"grid" } ] REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID, e.g. BTC-USDT algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid stopType String Yes Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "448965992920907776", "sCode": "0", "sMsg": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. tag String Order tag POST / CLOSE POSITION FOR CONTRACT GRID Close position when the contract grid stop type is 'keep position'. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/close-position > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/close-position body { "algoId":"448965992920907776", "mktClose":true } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID mktClose Boolean Yes Market close all the positions or not true: Market close all position, false: Close part of position sz String Conditional Close position amount, with unit of contract If mktClose is false, the parameter is required. px String Conditional Close position price If mktClose is false, the parameter is required. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "448965992920907776", "ordId": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID ordId String Close position order ID If mktClose is true, the parameter will return "". algoClOrdId String Client-supplied Algo ID tag String Order tag POST / CANCEL CLOSE POSITION ORDER FOR CONTRACT GRID RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/cancel-close-order > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/cancel-close-order body { "algoId":"448965992920907776", "ordId":"570627699870375936" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID ordId String Yes Close position order ID > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoClOrdId": "", "algoId": "448965992920907776", "ordId": "570627699870375936", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID ordId String Close position order ID algoClOrdId String Client-supplied Algo ID tag String Order tag POST / INSTANT TRIGGER GRID ALGO ORDER RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID + INSTRUMENT ID HTTP REQUEST POST /api/v5/tradingBot/grid/order-instant-trigger > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/order-instant-trigger body { "algoId":"561564133246894080" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "561564133246894080" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID GET / GRID ALGO ORDER LIST RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/grid/orders-algo-pending > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/orders-algo-pending?algoOrdType=grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid algoId String No Algo ID instId String No Instrument ID, e.g. BTC-USDT instType String No Instrument type SPOT MARGIN FUTURES SWAP after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "actualLever": "", "algoClOrdId": "", "algoId": "56802********64032", "algoOrdType": "grid", "arbitrageNum": "0", "availEq": "", "basePos": false, "baseSz": "0", "cTime": "1681700496249", "cancelType": "0", "direction": "", "floatProfit": "0", "gridNum": "10", "gridProfit": "0", "instFamily": "", "instId": "BTC-USDT", "instType": "SPOT", "investment": "25", "lever": "", "liqPx": "", "maxPx": "5000", "minPx": "400", "ordFrozen": "", "pnlRatio": "0", "quoteSz": "25", "rebateTrans": [ { "rebate": "0", "rebateCcy": "BTC" }, { "rebate": "0", "rebateCcy": "USDT" } ], "runType": "1", "slTriggerPx": "", "state": "running", "stopType": "", "sz": "", "tag": "", "totalPnl": "0", "tpTriggerPx": "", "triggerParams": [ { "triggerAction": "start", "delaySeconds": "0", "triggerStrategy": "instant", "triggerType": "auto", "triggerTime": "" }, { "triggerAction": "stop", "delaySeconds": "0", "triggerStrategy": "instant", "stopType": "1", "triggerType": "manual", "triggerTime": "" } ], "uTime": "1682062564350", "uly": "BTC-USDT", "profitSharingRatio": "", "copyType": "0", "tpRatio": "", "slRatio": "", "fee": "", "fundingFee": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instId String Instrument ID cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid state String Algo order state starting running stopping no_close_position: stopped algo order but have not closed position yet rebateTrans Array of object Rebate transfer info > rebate String Rebate amount > rebateCcy String Rebate currency triggerParams Array of object Trigger Parameters > triggerAction String Trigger action start stop > triggerStrategy String Trigger strategy instant price rsi > delaySeconds String Delay seconds after action triggered > triggerTime String Actual action triggered time, unix timestamp format in milliseconds, e.g. 1597026383085 > triggerType String Actual action triggered type manual auto > timeframe String K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi > thold String Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi > triggerCond String Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi > timePeriod String Time Period 14 This field is only valid when triggerStrategy is rsi > triggerPx String Trigger Price This field is only valid when triggerStrategy is price > stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop maxPx String Upper price of price range minPx String Lower price of price range gridNum String Grid quantity runType String Grid type 1: Arithmetic, 2: Geometric tpTriggerPx String Take-profit trigger price slTriggerPx String Stop-loss trigger price arbitrageNum String The number of arbitrages executed totalPnl String Total P&L pnlRatio String P&L ratio investment String Accumulated investment amount Spot grid investment amount calculated on quote currency gridProfit String Grid profit floatProfit String Variable P&L cancelType String Algo order stop reason 0: None 1: Manual stop 2: Take profit 3: Stop loss 4: Risk control 5: Delivery 6: Signal stopType String Actual Stop type Spot 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions quoteSz String Quote currency investment amount Only applicable to Spot grid baseSz String Base currency investment amount Only applicable to Spot grid direction String Contract grid type long,short,neutral Only applicable to contract grid basePos Boolean Whether or not to open a position when the strategy is activated Only applicable to contract grid sz String Used margin based on USDT Only applicable to contract grid lever String Leverage Only applicable to contract grid actualLever String Actual Leverage Only applicable to contract grid liqPx String Estimated liquidation price Only applicable to contract grid uly String Underlying Only applicable to contract grid instFamily String Instrument family Only applicable to FUTURES/SWAP/OPTION Only applicable to contract grid ordFrozen String Margin used by pending orders Only applicable to contract grid availEq String Available margin Only applicable to contract grid tag String Order tag profitSharingRatio String Profit sharing ratio Value range [0, 0.3] If it is a normal order (neither copy order nor lead order), this field returns "" copyType String Profit sharing order type 0: Normal order 1: Copy order without profit sharing 2: Copy order with profit sharing 3: Lead order tpRatio String Take profit ratio, 0.1 represents 10% slRatio String Stop loss ratio, 0.1 represents 10% fee String Accumulated fee. Only applicable to contract grid, or it will be "" fundingFee String Accumulated funding fee. Only applicable to contract grid, or it will be "" GET / GRID ALGO ORDER HISTORY RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/grid/orders-algo-history > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/orders-algo-history?algoOrdType=grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid algoId String No Algo ID instId String No Instrument ID, e.g. BTC-USDT instType String No Instrument type SPOT MARGIN FUTURES SWAP after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "actualLever": "", "algoClOrdId": "", "algoId": "565849588675117056", "algoOrdType": "grid", "arbitrageNum": "0", "availEq": "", "basePos": false, "baseSz": "0", "cTime": "1681181054927", "cancelType": "1", "direction": "", "floatProfit": "0", "gridNum": "10", "gridProfit": "0", "instFamily": "", "instId": "BTC-USDT", "instType": "SPOT", "investment": "25", "lever": "0", "liqPx": "", "maxPx": "5000", "minPx": "400", "ordFrozen": "", "pnlRatio": "0", "quoteSz": "25", "rebateTrans": [ { "rebate": "0", "rebateCcy": "BTC" }, { "rebate": "0", "rebateCcy": "USDT" } ], "runType": "1", "slTriggerPx": "0", "state": "stopped", "stopResult": "0", "stopType": "1", "sz": "", "tag": "", "totalPnl": "0", "tpTriggerPx": "0", "triggerParams": [ { "triggerAction": "start", "delaySeconds": "0", "triggerStrategy": "instant", "triggerType": "auto", "triggerTime": "" }, { "triggerAction": "stop", "delaySeconds": "0", "triggerStrategy": "instant", "stopType": "1", "triggerType": "manual", "triggerTime": "1681181186484" } ], "uTime": "1681181186496", "uly": "BTC-USDT", "profitSharingRatio": "", "copyType": "0", "tpRatio": "", "slRatio": "", "fee": "", "fundingFee": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instId String Instrument ID cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid state String Algo order state stopped rebateTrans Array of object Rebate transfer info > rebate String Rebate amount > rebateCcy String Rebate currency triggerParams Array of object Trigger Parameters > triggerAction String Trigger action start stop > triggerStrategy String Trigger strategy instant price rsi > delaySeconds String Delay seconds after action triggered > triggerTime String Actual action triggered time, unix timestamp format in milliseconds, e.g. 1597026383085 > triggerType String Actual action triggered type manual auto > timeframe String K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi > thold String Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi > triggerCond String Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi > timePeriod String Time Period 14 This field is only valid when triggerStrategy is rsi > triggerPx String Trigger Price This field is only valid when triggerStrategy is price > stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop maxPx String Upper price of price range minPx String Lower price of price range gridNum String Grid quantity runType String Grid type 1: Arithmetic, 2: Geometric tpTriggerPx String Take-profit trigger price slTriggerPx String Stop-loss trigger price arbitrageNum String The number of arbitrages executed totalPnl String Total P&L pnlRatio String P&L ratio investment String Accumulated investment amount Spot grid investment amount calculated on quote currency gridProfit String Grid profit floatProfit String Variable P&L cancelType String Algo order stop reason 0: None 1: Manual stop 2: Take profit 3: Stop loss 4: Risk control 5: Delivery 6: Signal stopType String Actual Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions quoteSz String Quote currency investment amount Only applicable to Spot grid baseSz String Base currency investment amount Only applicable to Spot grid direction String Contract grid type long,short,neutral Only applicable to contract grid basePos Boolean Whether or not to open a position when the strategy is activated Only applicable to contract grid sz String Used margin based on USDT Only applicable to contract grid lever String Leverage Only applicable to contract grid actualLever String Actual Leverage Only applicable to contract grid liqPx String Estimated liquidation price Only applicable to contract grid uly String Underlying Only applicable to contract grid instFamily String Instrument family Only applicable to FUTURES/SWAP/OPTION Only applicable to contract grid ordFrozen String Margin used by pending orders Only applicable to contract grid availEq String Available margin Only applicable to contract grid tag String Order tag profitSharingRatio String Profit sharing ratio Value range [0, 0.3] If it is a normal order (neither copy order nor lead order), this field returns "" copyType String Profit sharing order type 0: Normal order 1: Copy order without profit sharing 2: Copy order with profit sharing 3: Lead order tpRatio String Take profit ratio, 0.1 represents 10% slRatio String Stop loss ratio, 0.1 represents 10% fee String Accumulated fee. Only applicable to contract grid, or it will be "" fundingFee String Accumulated funding fee. Only applicable to contract grid, or it will be "" GET / GRID ALGO ORDER DETAILS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/grid/orders-algo-details > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/orders-algo-details?algoId=448965992920907776&algoOrdType=grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "actualLever": "", "activeOrdNum": "0", "algoClOrdId": "", "algoId": "448965992920907776", "algoOrdType": "grid", "annualizedRate": "0", "arbitrageNum": "0", "availEq": "", "basePos": false, "baseSz": "0", "cTime": "1681181054927", "cancelType": "1", "curBaseSz": "0", "curQuoteSz": "0", "direction": "", "eq": "", "floatProfit": "0", "gridNum": "10", "gridProfit": "0", "instFamily": "", "instId": "BTC-USDT", "instType": "SPOT", "investment": "25", "lever": "0", "liqPx": "", "maxPx": "5000", "minPx": "400", "ordFrozen": "", "perMaxProfitRate": "1.14570215", "perMinProfitRate": "0.0991200440528634356837", "pnlRatio": "0", "profit": "0.00000000", "quoteSz": "25", "rebateTrans": [ { "rebate": "0", "rebateCcy": "BTC" }, { "rebate": "0", "rebateCcy": "USDT" } ], "runType": "1", "runPx": "30089.7", "singleAmt": "0.00101214", "slTriggerPx": "0", "state": "stopped", "stopResult": "0", "stopType": "1", "sz": "", "tag": "", "totalAnnualizedRate": "0", "totalPnl": "0", "tpTriggerPx": "0", "tradeNum": "0", "triggerParams": [ { "triggerAction": "start", "delaySeconds": "0", "triggerStrategy": "instant", "triggerType": "auto", "triggerTime": "" }, { "triggerAction": "stop", "delaySeconds": "0", "triggerStrategy": "instant", "stopType": "1", "triggerType": "manual", "triggerTime": "1681181186484" } ], "uTime": "1681181186496", "uly": "", "profitSharingRatio": "", "copyType": "0", "tpRatio": "", "slRatio": "", "fee": "", "fundingFee": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instId String Instrument ID cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid state String Algo order state starting running stopping no_close_position: stopped algo order but have not closed position yet stopped rebateTrans Array of object Rebate transfer info > rebate String Rebate amount > rebateCcy String Rebate currency triggerParams Array of object Trigger Parameters > triggerAction String Trigger action start stop > triggerStrategy String Trigger strategy instant price rsi > delaySeconds String Delay seconds after action triggered > triggerTime String Actual action triggered time, unix timestamp format in milliseconds, e.g. 1597026383085 > triggerType String Actual action triggered type manual auto > timeframe String K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi > thold String Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi > triggerCond String Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi > timePeriod String Time Period 14 This field is only valid when triggerStrategy is rsi > triggerPx String Trigger Price This field is only valid when triggerStrategy is price > stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop maxPx String Upper price of price range minPx String Lower price of price range gridNum String Grid quantity runType String Grid type 1: Arithmetic, 2: Geometric tpTriggerPx String Take-profit trigger price slTriggerPx String Stop-loss trigger price tradeNum String The number of trades executed arbitrageNum String The number of arbitrages executed singleAmt String Amount per grid perMinProfitRate String Estimated minimum Profit margin per grid perMaxProfitRate String Estimated maximum Profit margin per grid runPx String Price at launch totalPnl String Total P&L pnlRatio String P&L ratio investment String Accumulated investment amount Spot grid investment amount calculated on quote currency gridProfit String Grid profit floatProfit String Variable P&L totalAnnualizedRate String Total annualized rate annualizedRate String Grid annualized rate cancelType String Algo order stop reason 0: None 1: Manual stop 2: Take profit 3: Stop loss 4: Risk control 5: Delivery 6: Signal stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions activeOrdNum String Total count of pending sub orders quoteSz String Quote currency investment amount Only applicable to Spot grid baseSz String Base currency investment amount Only applicable to Spot grid curQuoteSz String Assets of quote currency currently held Only applicable to Spot grid curBaseSz String Assets of base currency currently held Only applicable to Spot grid profit String Current available profit based on quote currency Only applicable to Spot grid stopResult String Stop result 0: default, 1: Successful selling of currency at market price, -1: Failed to sell currency at market price Only applicable to Spot grid direction String Contract grid type long,short,neutral Only applicable to contract grid basePos Boolean Whether or not to open a position when the strategy is activated Only applicable to contract grid sz String Used margin based on USDT Only applicable to contract grid lever String Leverage Only applicable to contract grid actualLever String Actual Leverage Only applicable to contract grid liqPx String Estimated liquidation price Only applicable to contract grid uly String Underlying Only applicable to contract grid instFamily String Instrument family Only applicable to FUTURES/SWAP/OPTION Only applicable to contract grid ordFrozen String Margin used by pending orders Only applicable to contract grid availEq String Available margin Only applicable to contract grid eq String Total equity of strategy account Only applicable to contract grid tag String Order tag profitSharingRatio String Profit sharing ratio Value range [0, 0.3] If it is a normal order (neither copy order nor lead order), this field returns "" copyType String Profit sharing order type 0: Normal order 1: Copy order without profit sharing 2: Copy order with profit sharing 3: Lead order tpRatio String Take profit ratio, 0.1 represents 10% slRatio String Stop loss ratio, 0.1 represents 10% fee String Accumulated fee. Only applicable to contract grid, or it will be "" fundingFee String Accumulated funding fee. Only applicable to contract grid, or it will be "" GET / GRID ALGO SUB ORDERS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/grid/sub-orders > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/sub-orders?algoId=123456&type=live&algoOrdType=grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid algoId String Yes Algo ID type String Yes Sub order state live filled groupId String No Group ID after String No Pagination of data to return records earlier than the requested ordId. before String No Pagination of data to return records newer than the requested ordId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0", "algoClOrdId": "", "algoId": "448965992920907776", "algoOrdType": "grid", "avgPx": "0", "cTime": "1653347949771", "ccy": "", "ctVal": "", "fee": "0", "feeCcy": "USDC", "groupId": "3", "instId": "BTC-USDC", "instType": "SPOT", "lever": "0", "ordId": "449109084439187456", "ordType": "limit", "pnl": "0", "posSide": "net", "px": "30404.3", "rebate": "0", "rebateCcy": "USDT", "side": "sell", "state": "live", "sz": "0.00059213", "tag": "", "tdMode": "cash", "uTime": "1653347949831" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instId String Instrument ID algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid groupId String Group ID ordId String Sub order ID cTime String Sub order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Sub order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 tdMode String Sub order trade mode Margin mode: cross/isolated Non-Margin mode: cash ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordType String Sub order type market: Market order limit: Limit order ioc: Immediate-or-cancel order sz String Sub order quantity to buy or sell state String Sub order state canceled live partially_filled filled cancelling side String Sub order side buy sell px String Sub order price fee String Sub order fee amount feeCcy String Sub order fee currency rebate String Sub order rebate amount rebateCcy String Sub order rebate currency avgPx String Sub order average filled price accFillSz String Sub order accumulated fill quantity posSide String Sub order position side net pnl String Sub order profit and loss ctVal String Contract value Only applicable to FUTURES/SWAP lever String Leverage tag String Order tag GET / GRID ALGO ORDER POSITIONS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/grid/positions > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/positions?algoId=448965992920907776&algoOrdType=contract_grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type contract_grid: Contract grid algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "adl": "1", "algoClOrdId": "", "algoId": "449327675342323712", "avgPx": "29215.0142857142857149", "cTime": "1653400065917", "ccy": "USDT", "imr": "2045.386", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "last": "29206.7", "lever": "5", "liqPx": "661.1684795867162", "markPx": "29213.9", "mgnMode": "cross", "mgnRatio": "217.19370606167573", "mmr": "40.907720000000005", "notionalUsd": "10216.70307", "pos": "35", "posSide": "net", "uTime": "1653400066938", "upl": "1.674999999999818", "uplRatio": "0.0008190504784478" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instId String Instrument ID, e.g. BTC-USDT-SWAP cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 avgPx String Average open price ccy String Margin currency lever String Leverage liqPx String Estimated liquidation price posSide String Position side net pos String Quantity of positions mgnMode String Margin mode cross isolated mgnRatio String Margin ratio imr String Initial margin requirement mmr String Maintenance margin requirement upl String Unrealized profit and loss uplRatio String Unrealized profit and loss ratio last String Latest traded price notionalUsd String Notional value of positions in USD adl String Auto decrease line, signal area Divided into 5 levels, from 1 to 5, the smaller the number, the weaker the adl intensity. markPx String Mark price POST / SPOT GRID WITHDRAW INCOME RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/withdraw-income > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/withdraw-income body { "algoId":"448965992920907776" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoClOrdId": "", "algoId":"448965992920907776", "profit":"100" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID profit String Withdraw profit POST / COMPUTE MARGIN BALANCE RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/compute-margin-balance > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/compute-margin-balance body { "algoId":"123456", "type":"add", "amt":"10" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID type String Yes Adjust margin balance type add reduce amt String No Adjust margin balance amount Default is zero. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "lever": "0.3877200981166066", "maxAmt": "1.8309562403342999" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description maxAmt String Maximum adjustable margin balance amount lever String Leverage after adjustment of margin balance POST / ADJUST MARGIN BALANCE RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/margin-balance > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/margin-balance body { "algoId":"123456", "type":"add", "amt":"10" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID type String Yes Adjust margin balance type add reduce amt String Conditional Adjust margin balance amount Either amt or percent is required. percent String Conditional Adjust margin balance percentage > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "123456" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID POST / ADD INVESTMENT It is used to add investment and only applicable to contract gird. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/grid/adjust-investment > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/adjust-investment body { "algoId":"448965992920907776", "amt":"12" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID amt String Yes The amount is going to be added > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "448965992920907776" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID GET / GRID AI PARAMETER (PUBLIC) Authentication is not required for this public endpoint. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/tradingBot/grid/ai-param > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/ai-param?instId=BTC-USDT&algoOrdType=grid REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid instId String Yes Instrument ID, e.g. BTC-USDT direction String Conditional Contract grid type long,short,neutral Required in the case of contract_grid duration String No Back testing duration 7D: 7 Days, 30D: 30 Days, 180D: 180 Days The default is 7D for Spot grid Only 7D is available for Contract grid > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoOrdType": "grid", "annualizedRate": "1.5849", "ccy": "USDT", "direction": "", "duration": "7D", "gridNum": "5", "instId": "BTC-USDT", "lever": "0", "maxPx": "21373.3", "minInvestment": "0.89557758", "minPx": "15544.2", "perMaxProfitRate": "0.0733865364573281", "perMinProfitRate": "0.0561101403446263", "runType": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid duration String Back testing duration 7D: 7 Days, 30D: 30 Days, 180D: 180 Days gridNum String Grid quantity maxPx String Upper price of price range minPx String Lower price of price range perMaxProfitRate String Estimated maximum Profit margin per grid perMinProfitRate String Estimated minimum Profit margin per grid annualizedRate String Grid annualized rate minInvestment String The minimum invest amount ccy String The invest currency runType String Grid type 1: Arithmetic, 2: Geometric direction String Contract grid type long,short,neutral Only applicable to contract grid lever String Leverage Only applicable to contract grid POST / COMPUTE MIN INVESTMENT (PUBLIC) Authentication is not required for this public endpoint. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST POST /api/v5/tradingBot/grid/min-investment > Request Example Copy to ClipboardPOST /api/v5/tradingBot/grid/min-investment body { "instId": "ETH-USDT", "algoOrdType":"grid", "gridNum": "50", "maxPx":"5000", "minPx":"3000", "runType":"1", "investmentData":[ { "amt":"0.01", "ccy":"ETH" }, { "amt":"100", "ccy":"USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT-SWAP algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid maxPx String Yes Upper price of price range minPx String Yes Lower price of price range gridNum String Yes Grid quantity runType String Yes Grid type 1: Arithmetic, 2: Geometric direction String Conditional Contract grid type long,short,neutral Only applicable to contract grid lever String Conditional Leverage Only applicable to contract grid basePos Boolean No Whether or not open a position when the strategy activates Default is false Neutral contract grid should omit the parameter Only applicable to contract grid investmentType String No Investment type, only applicable to grid quote base dual triggerStrategy String No Trigger stragety, instant price rsi investmentData Array of object No Invest Data > amt String Yes Invest amount > ccy String Yes Invest currency > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "minInvestmentData": [ { "amt":"0.1", "ccy":"ETH" }, { "amt":"100", "ccy":"USDT" } ], "singleAmt":"10" } ] } RESPONSE PARAMETERS Parameter Type Description minInvestmentData Array of object Minimum invest Data > amt String Minimum invest amount > ccy String Minimum Invest currency singleAmt String Single grid trading amount In terms of spot grid, the unit is quote currency In terms of contract grid, the unit is contract GET / RSI BACK TESTING (PUBLIC) Authentication is not required for this public endpoint. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/tradingBot/public/rsi-back-testing > Request Example Copy to ClipboardGET /api/v5/tradingBot/public/rsi-back-testing?instId=BTC-USDT&thold=30&timeframe=3m&timePeriod=14 REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT Only applicable to SPOT timeframe String Yes K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) thold String Yes Threshold The value should be an integer between 1 to 100 timePeriod String Yes Time Period 14 triggerCond String No Trigger condition cross_up cross_down above below cross Default is cross_down duration String No Back testing duration 1M (M: month) Default is 1M > Response Example Copy to Clipboard{ "code": "0", "data": [ { "triggerNum": "164" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description triggerNum String Trigger number GET / MAX GRID QUANTITY (PUBLIC) Authentication is not required for this public endpoint. Maximum grid quantity can be retrieved from this endpoint. Minimum grid quantity always is 2. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/tradingBot/grid/grid-quantity > Request Example Copy to ClipboardGET /api/v5/tradingBot/grid/grid-quantity?instId=BTC-USDT-SWAP&runType=1&algoOrdType=contract_grid&maxPx=70000&minPx=50000&lever=5 REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT runType String Yes Grid type 1: Arithmetic 2: Geometric algoOrdType String Yes Algo order type grid: Spot grid contract_grid: Contract grid maxPx String Yes Upper price of price range minPx String Yes Lower price of price range lever String Conditional Leverage, it is required for contract grid > Response Example Copy to Clipboard{ "code": "0", "data": [ { "maxGridQty": "285" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description maxGridQty String Maximum grid quantity WS / SPOT GRID ALGO ORDERS CHANNEL Retrieve spot grid algo orders. Data will be pushed when triggered by events such as placing/canceling order. It will also be pushed in regular interval according to subscription granularity. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "grid-orders-spot", "instType": "SPOT" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name grid-orders-spot > instType String Yes Instrument type SPOT ANY > instId String No Instrument ID > algoId String No Algo Order ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "grid-orders-spot", "instType": "ANY" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"grid-orders-spot\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type > instId String No Instrument ID > algoId String No Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "grid-orders-spot", "instType": "ANY", "uid": "44705892343619584" }, "data": [{ "algoClOrdId": "", "algoId": "568028283477164032", "activeOrdNum" : "10", "algoOrdType": "grid", "annualizedRate": "0", "arbitrageNum": "0", "baseSz": "0", "cTime": "1681700496249", "cancelType": "0", "curBaseSz": "0", "curQuoteSz": "25", "floatProfit": "0", "gridNum": "10", "gridProfit": "0", "instId": "BTC-USDT", "instType": "SPOT", "investment": "25", "maxPx": "5000", "minPx": "400", "pTime": "1682416738467", "perMaxProfitRate": "1.14570215", "perMinProfitRate": "0.0991200440528634356837", "pnlRatio": "0", "profit": "0", "quoteSz": "25", "rebateTrans": [{ "rebate": "0", "rebateCcy": "BTC" }, { "rebate": "0", "rebateCcy": "USDT" }], "runPx": "30031.7", "runType": "1", "triggerParams": [{ "triggerAction": "start", "triggerStrategy": "instant", "delaySeconds": "0", "triggerType": "auto", "triggerTime": "" }, { "triggerAction": "stop", "triggerStrategy": "instant", "delaySeconds": "0", "stopType": "1", "triggerType": "manual", "triggerTime": "" }], "singleAmt": "0.00101214", "slTriggerPx": "", "state": "running", "stopResult": "0", "stopType": "2", "tag": "", "totalAnnualizedRate": "0", "totalPnl": "0", "tpTriggerPx": "", "tradeNum": "0", "uTime": "1682406665527", "profitSharingRatio": "", "copyType": "0" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instType String Instrument type > uid String User ID data Array Subscribed data > algoId String Algo ID > algoClOrdId String Client-supplied Algo ID > instType String Instrument type > instId String Instrument ID > cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > algoOrdType String Algo order type grid: Spot grid > state String Algo order state starting running stopping stopped > rebateTrans Array of object Rebate transfer info >> rebate String Rebate amount >> rebateCcy String Rebate currency > triggerParams Array of object Trigger Parameters >> triggerAction String Trigger action start stop >> triggerStrategy String Trigger strategy instant price rsi >> delaySeconds String Delay seconds after action triggered >> triggerTime String Actual action triggered time, unix timestamp format in milliseconds, e.g. 1597026383085 >> triggerType String Actual action triggered type manual auto >> timeframe String K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi >> thold String Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi >> triggerCond String Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi >> timePeriod String Time Period 14 This field is only valid when triggerStrategy is rsi >> triggerPx String Trigger Price This field is only valid when triggerStrategy is price >> stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop > maxPx String Upper price of price range > minPx String Lower price of price range > gridNum String Grid quantity > runType String Grid type 1: Arithmetic, 2: Geometric > tpTriggerPx String Take-profit trigger price > slTriggerPx String Stop-loss trigger price > tradeNum String The number of trades executed > arbitrageNum String The number of arbitrages executed > singleAmt String Amount per grid > perMinProfitRate String Estimated minimum Profit margin per grid > perMaxProfitRate String Estimated maximum Profit margin per grid > runPx String Price at launch > totalPnl String Total P&L > pnlRatio String P&L ratio > investment String Investment amount Spot grid investment amount calculated on quote currency > gridProfit String Grid profit > floatProfit String Variable P&L > totalAnnualizedRate String Total annualized rate > annualizedRate String Grid annualized rate > cancelType String Algo order stop reason 0: None 1: Manual stop 2: Take profit 3: Stop loss 4: Risk control 5: Delivery 6: Signal > stopType String Stop type 1: Sell base currency 2: Keep base currency > quoteSz String Quote currency investment amount Only applicable to Spot grid > baseSz String Base currency investment amount Only applicable to Spot grid > curQuoteSz String Assets of quote currency currently held Only applicable to Spot grid > curBaseSz String Assets of base currency currently held Only applicable to Spot grid > profit String Current available profit based on quote currency Only applicable to Spot grid > stopResult String Stop result 0: default, 1: Successful selling of currency at market price, -1: Failed to sell currency at market price Only applicable to Spot grid > activeOrdNum String Total count of pending sub orders > tag String Order tag > profitSharingRatio String Profit sharing ratio Value range [0, 0.3] If it is a normal order (neither copy order nor lead order), this field returns "" > copyType String Profit sharing order type 0: Normal order 1: Copy order without profit sharing 2: Copy order with profit sharing 3: Lead order > pTime String Push time of algo grid information, Unix timestamp format in milliseconds, e.g. 1597026383085 WS / CONTRACT GRID ALGO ORDERS CHANNEL Retrieve contract grid algo orders. Data will be pushed when triggered by events such as placing/canceling order. It will also be pushed in regular interval according to subscription granularity. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "grid-orders-contract", "instType": "SWAP" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name grid-orders-contract > instType String Yes Instrument type SWAP FUTURES ANY > instId String No Instrument ID > algoId String No Algo Order ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "grid-orders-contract", "instType": "ANY" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"grid-orders-contract\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type > instId String No Instrument ID > algoId String No Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "grid-orders-contract", "instType": "ANY", "uid": "4470****9584" }, "data": [{ "actualLever": "2.3481494635276649", "activeOrdNum": "10", "algoClOrdId": "", "algoId": "571039869070475264", "algoOrdType": "contract_grid", "annualizedRate": "0", "arbitrageNum": "0", "availEq": "52.3015392887089673", "basePos": true, "cTime": "1682418514204", "cancelType": "0", "direction": "long", "eq": "108.7945652387089673", "floatProfit": "8.7945652387089673", "gridNum": "10", "gridProfit": "0", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "investment": "100", "lever": "5", "liqPx": "16370.482143120824", "maxPx": "36437.3", "minPx": "26931.9", "ordFrozen": "5.38638", "pTime": "1682492574068", "perMaxProfitRate": "0.1687494513302446", "perMinProfitRate": "0.1263869357706788", "pnlRatio": "0.0879456523870897", "rebateTrans": [{ "rebate": "0", "rebateCcy": "USDT" }], "runPx": "27306.9", "runType": "1", "singleAmt": "1", "slTriggerPx": "", "state": "running", "stopType": "0", "sz": "100", "tag": "", "totalAnnualizedRate": "38.52019574554529", "totalPnl": "8.7945652387089673", "tpTriggerPx": "", "tradeNum": "9", "triggerParams": [{ "triggerAction": "start", "delaySeconds": "0", "triggerStrategy": "price", "triggerPx": "1", "triggerType": "manual", "triggerTime": "1682418561497" }, { "triggerAction": "stop", "delaySeconds": "0", "triggerStrategy": "instant", "stopType": "1", "triggerType": "manual", "triggerTime": "0" }], "uTime": "1682492552257", "profitSharingRatio": "", "copyType": "0", "tpRatio": "", "slRatio": "", "fee": "", "fundingFee": "" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instType String Instrument type > uid String User ID data Array Subscribed data > algoId String Algo ID > algoClOrdId String Client-supplied Algo ID > instType String Instrument type > instId String Instrument ID > cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > algoOrdType String Algo order type contract_grid: Contract grid > state String Algo order state starting running stopping no_close_position: stopped algo order but hadn't close position yet stopped > rebateTrans Array of object Rebate transfer info >> rebate String Rebate amount >> rebateCcy String Rebate currency > triggerParams Array of object Trigger Parameters >> triggerAction String Trigger action start stop >> triggerStrategy String Trigger strategy instant price rsi >> delaySeconds String Delay seconds after action triggered >> triggerTime String Actual action triggered time, unix timestamp format in milliseconds, e.g. 1597026383085 >> triggerType String Actual action triggered type manual auto >> timeframe String K-line type 3m, 5m, 15m, 30m (m: minute) 1H, 4H (H: hour) 1D (D: day) This field is only valid when triggerStrategy is rsi >> thold String Threshold The value should be an integer between 1 to 100 This field is only valid when triggerStrategy is rsi >> triggerCond String Trigger condition cross_up cross_down above below cross This field is only valid when triggerStrategy is rsi >> timePeriod String Time Period 14 This field is only valid when triggerStrategy is rsi >> triggerPx String Trigger Price This field is only valid when triggerStrategy is price >> stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions This field is only valid when triggerAction is stop > maxPx String Upper price of price range > minPx String Lower price of price range > gridNum String Grid quantity > runType String Grid type 1: Arithmetic, 2: Geometric > tpTriggerPx String Take-profit trigger price > slTriggerPx String Stop-loss trigger price > tradeNum String The number of trades executed > arbitrageNum String The number of arbitrages executed > singleAmt String Amount per grid > perMinProfitRate String Estimated minimum Profit margin per grid > perMaxProfitRate String Estimated maximum Profit margin per grid > runPx String Price at launch > totalPnl String Total P&L > pnlRatio String P&L ratio > investment String Accumulated investment amount Spot grid investment amount calculated on quote currency > gridProfit String Grid profit > floatProfit String Variable P&L > totalAnnualizedRate String Total annualized rate > annualizedRate String Grid annualized rate > cancelType String Algo order stop reason 0: None 1: Manual stop 2: Take profit 3: Stop loss 4: Risk control 5: Delivery 6: Signal > stopType String Stop type Spot grid 1: Sell base currency 2: Keep base currency Contract grid 1: Market Close All positions 2: Keep positions > direction String Contract grid type long,short,neutral Only applicable to contract grid > basePos Boolean Whether or not to open a position when the strategy is activated Only applicable to contract grid > sz String Used margin based on USDT Only applicable to contract grid > lever String Leverage Only applicable to contract grid > actualLever String Actual Leverage Only applicable to contract grid > liqPx String Estimated liquidation price Only applicable to contract grid > ordFrozen String Margin used by pending orders Only applicable to contract grid > availEq String Available margin Only applicable to contract grid > eq String Total equity of strategy account Only applicable to contract grid > activeOrdNum String Total count of pending sub orders > tag String Order tag > profitSharingRatio String Profit sharing ratio Value range [0, 0.3] If it is a normal order (neither copy order nor lead order), this field returns "" > copyType String Profit sharing order type 0: Normal order 1: Copy order without profit sharing 2: Copy order with profit sharing 3: Lead order > tpRatio String Take profit ratio, 0.1 represents 10% > slRatio String Stop loss ratio, 0.1 represents 10% > fee String Accumulated fee. Only applicable to contract grid, or it will be "" > fundingFee String Accumulated funding fee. Only applicable to contract grid, or it will be "" > pTime String Push time of algo grid information, Unix timestamp format in milliseconds, e.g. 1597026383085 WS / GRID POSITIONS CHANNEL Retrieve grid positions. Data will be pushed when triggered by events such as placing/canceling order. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "grid-positions", "algoId": "449327675342323712" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name grid-positions > algoId String Yes Algo Order ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "grid-positions", "algoId": "449327675342323712" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"grid-positions\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > algoId String Yes Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "grid-positions", "uid": "4470****9584", "algoId": "449327675342323712" }, "data": [{ "adl": "1", "algoClOrdId": "", "algoId": "449327675342323712", "avgPx": "29181.4638888888888895", "cTime": "1653400065917", "ccy": "USDT", "imr": "2089.2690000000002", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "last": "29852.7", "lever": "5", "liqPx": "604.7617536513744", "markPx": "29849.7", "mgnMode": "cross", "mgnRatio": "217.71740878394456", "mmr": "41.78538", "notionalUsd": "10435.794191550001", "pTime": "1653536068723", "pos": "35", "posSide": "net", "uTime": "1653445498682", "upl": "232.83263888888962", "uplRatio": "0.1139826489932205" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > algoId String Algo Order ID data Array Subscribed data > algoId String Algo ID > algoClOrdId String Client-supplied Algo ID > instType String Instrument type > instId String Instrument ID > cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > avgPx String Average open price > ccy String Margin currency > lever String Leverage > liqPx String Estimated liquidation price > posSide String Position side net > pos String Quantity of positions > mgnMode String Margin mode cross isolated > mgnRatio String Margin ratio > imr String Initial margin requirement > mmr String Maintenance margin requirement > upl String Unrealized profit and loss > uplRatio String Unrealized profit and loss ratio > last String Latest traded price > notionalUsd String Notional value of positions in USD > adl String Auto decrease line, signal area Divided into 5 levels, from 1 to 5, the smaller the number, the weaker the adl intensity. > markPx String Mark price > pTime String Push time of positions information, Unix timestamp format in milliseconds, e.g. 1597026383085 WS / GRID SUB ORDERS CHANNEL Retrieve grid sub orders. Data will be pushed when triggered by events such as placing order. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "grid-sub-orders", "algoId": "449327675342323712" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name grid-sub-orders > algoId String Yes Algo Order ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "grid-sub-orders", "algoId": "449327675342323712" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"grid-sub-orders\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > algoId String Yes Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "grid-sub-orders", "uid": "44705892343619584", "algoId": "449327675342323712" }, "data": [{ "accFillSz": "0", "algoClOrdId": "", "algoId": "449327675342323712", "algoOrdType": "contract_grid", "avgPx": "0", "cTime": "1653445498664", "ctVal": "0.01", "fee": "0", "feeCcy": "USDT", "groupId": "-1", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "5", "ordId": "449518234142904321", "ordType": "limit", "pTime": "1653486524502", "pnl": "", "posSide": "net", "px": "28007.2", "rebate": "0", "rebateCcy": "USDT", "side": "buy", "state": "live", "sz": "1", "tag":"", "tdMode": "cross", "uTime": "1653445498674" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > algoId String Algo Order ID data Array Subscribed data > algoId String Algo ID > algoClOrdId String Client-supplied Algo ID > instType String Instrument type > instId String Instrument ID > algoOrdType String Algo order type grid: Spot grid contract_grid: Contract grid > groupId String Group ID > ordId String Sub order ID > cTime String Sub order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Sub order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > tdMode String Sub order trade mode Margin mode cross isolated Non-Margin mode cash > tag String Order tag > ordType String Sub order type market: Market order limit: Limit order ioc: Immediate-or-cancel order > sz String Sub order quantity to buy or sell > state String Sub order state canceled live partially_filled filled cancelling > side String Sub order side buy sell > px String Sub order price > fee String Sub order fee amount > feeCcy String Sub order fee currency > rebate String Sub order rebate amount > rebateCcy String Sub order rebate currency > avgPx String Sub order average filled price > accFillSz String Sub order accumulated fill quantity > posSide String Sub order position side net > pnl String Sub order profit and loss > ctVal String Contract value Only applicable to FUTURES/SWAP/OPTION > lever String Leverage > pTime String Push time of orders information, Unix timestamp format in milliseconds, e.g. 1597026383085 SIGNAL BOT TRADING Create and customize your own signals while gaining access to a diverse selection of signals from top providers. Empower your trading strategies and stay ahead of the game with our comprehensive signal trading platform. Learn more POST / CREATE SIGNAL RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/create-signal > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/create-signal body { "signalChanName": "long short", "signalDesc": "this is the first version" } REQUEST PARAMETERS Parameter Type Required Description signalChanName String Yes Signal channel name signalChanDesc String No Signal channel description > Response Example Copy to Clipboard{ "code": "0", "data": [ { "signalChanId" :"572112109", "signalToken":"dojuckew331lkx" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description signalChanId String Signal channel Id signalChanToken String User identify when placing orders via signal GET / SIGNALS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/signals > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/signals?signalSourceType=1 REQUEST PARAMETERS Parameter Type Required Description signalSourceType String Yes Signal source type 1: Created by yourself 2: Subscribe 3: Free signal signalChanId String No Signal channel id after String No Pagination of data to return records signalChanId earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records signalChanId newer than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "signalChanId": "623833708424069120", "signalChanName": "test", "signalChanDesc": "test", "signalChanToken": "test", "signalSourceType": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description signalChanId String Signal channel id signalChanName String Signal channel name signalChanDesc String Signal channel description signalChanToken String User identify when placing orders via signal signalSourceType String Signal source type 1: Created by yourself 2: Subscribe 3: Free signal POST / CREATE SIGNAL BOT RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/order-algo > Request Example Copy to Clipboard# Create signal bot POST /api/v5/tradingBot/signal/order-algo body { "signalChanId": "627921182788161536", "instIds": [ "BTC-USDT-SWAP", "ETH-USDT-SWAP", "LTC-USDT-SWAP" ], "lever": "10", "investAmt": "100", "subOrdType": "9", "entrySettingParam": { "allowMultipleEntry": true, "entryType": "1", "amt": "", "ratio": "" }, "exitSettingParam": { "tpSlType": "2", "tpPct": "", "slPct": "" } } REQUEST PARAMETERS Parameter Type Required Description signalChanId String Yes Signal channel Id lever String Yes Leverage Only applicable to contract signal investAmt String Yes Investment amount subOrdType String Yes Sub order type 1:limit order 2:market order 9:tradingView signal includeAll Boolean No Whether to include all USDT-margined contract.The default value is false. true: include false : exclude instIds String No Instrument IDs. Single currency or multiple currencies separated with comma. When includeAll is true, it is ignored ratio String No Price offset ratio, calculate the limit price as a percentage offset from the best bid/ask price. Only applicable to subOrdType is limit order entrySettingParam String No Entry setting > allowMultipleEntry String No Whether or not allow multiple entries in the same direction for the same trading pairs.The default value is true。 true:Allow false:Prohibit > entryType String No Entry type 1: TradingView signal 2: Fixed margin 3: Contracts 4: Percentage of free margin 5: Percentage of the initial invested margin > amt String No Amount per order Only applicable to entryType in 2/3 > ratio Array of object No Amount ratio per order Only applicable to entryType in 4/5 exitSettingParam String No Exit setting > tpSlType String 是 Type of set the take-profit and stop-loss trigger price pnl: Based on the estimated profit and loss percentage from the entry point price: Based on price increase or decrease from the crypto’s entry price > tpPct String No Take-profit percentage > slPct String No Stop-loss percentage > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "447053782921515008", "sCode": "0", "sMsg": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success. sMsg String The code of the event execution result, 0 means success. POST / CANCEL SIGNAL BOTS A maximum of 10 orders can be stopped per request. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/stop-order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/stop-order-algo body [ { "algoId":"448965992920907776" } ] REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "448965992920907776", "sCode": "0", "sMsg": "", "algoClOrdId": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID sCode String The code of the event execution result, 0 means success. sMsg String Rejection or success message of event execution. algoClOrdId String Client-supplied Algo ID POST / ADJUST MARGIN BALANCE RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/margin-balance > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/margin-balance body { "algoId":"123456", "type":"add", "amt":"10" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID type String Yes Adjust margin balance type add reduce amt String Yes Adjust margin balance amount Either amt or percent is required. allowReinvest Boolean No Whether to reinvest with newly added margin. The default value is false. false:it will be used as passive margin to prevent liquidation and will not be used as active investment true:the margin added here will furthermore be accounted for in calculations of your total investment amount, and furthermore your order size。 Only applicable to your signal comes in with an “investmentType” of “percentage_investment” > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "123456" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID POST / AMEND TPSL RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/amendTPSL > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/amendTPSL body { "algoId": "637039348240277504", "exitSettingParam": { "tpSlType": "pnl", "tpPct": "0.01", "slPct": "0.01" } } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID exitSettingParam String Yes Exit setting > tpSlType String Yes Type of set the take-profit and stop-loss trigger price pnl: Based on the estimated profit and loss percentage from the entry point price: Based on price increase or decrease from the crypto’s entry price > tpPct String No Take-profit percentage > slPct String No Stop-loss percentage > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "637039348240277504" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID POST / SET INSTRUMENTS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/set-instruments > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/set-instruments body { "algoId": "637039348240277504", "instIds": [ "SHIB-USDT-SWAP", "ETH-USDT-SWAP" ] } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instIds Array Yes Instrument IDs. When includeAll is true, it is ignored includeAll Boolean Yes Whether to include all USDT-margined contract.The default value is false. true: include false : exclude > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "637039348240277504" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID GET / SIGNAL BOT ORDER DETAILS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/orders-algo-details > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/orders-algo-details?algoId=623833708424069120&algoOrdType=contract REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type contract: Contract signal algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "623833708424069120", "algoOrdType": "contract", "availBal": "1.6561369013122267", "cTime": "1695005546360", "cancelType": "0", "entrySettingParam": { "allowMultipleEntry": true, "amt": "0", "entryType": "1", "ratio": "" }, "exitSettingParam": { "slPct": "", "tpPct": "", "tpSlType": "price" }, "floatPnl": "0.1279999999999927", "frozenBal": "25.16816", "instIds": [ "BTC-USDT-SWAP", "ETH-USDT-SWAP" ], "instType": "SWAP", "investAmt": "100", "lever": "10", "ratio": "", "realizedPnl": "-73.303703098687766", "signalChanId": "623827579484770304", "signalChanName": "testing", "signalSourceType": "1", "state": "running", "subOrdType": "9", "totalEq": "26.824296901312227", "totalPnl": "-73.1757030986877733", "totalPnlRatio": "-0.7317570309868777", "uTime": "1697029422313" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instIds Array of string Instrument IDs cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type contract: Contract signal state String Algo order state starting running stopping stopped cancelType String Algo order stop reason 0: None 1: Manual stop totalPnl String Total P&L totalPnlRatio String Total P&L ratio totalEq String Total equity of strategy account floatPnl String Float P&L realizedPnl String Realized P&L frozenBal String Frozen balance availBal String Avail balance lever String Leverage Only applicable to contract signal investAmt String Investment amount subOrdType String Sub order type 1:limit order 2:market order 9:tradingView signal ratio String Price offset ratio, calculate the limit price as a percentage offset from the best bid/ask price Only applicable to subOrdType is limit order entrySettingParam Object Entry setting > allowMultipleEntry Boolean Whether or not allow multiple entries in the same direction for the same trading pairs > entryType String Entry type 1: TradingView signal 2: Fixed margin 3: Contracts 4: Percentage of free margin 5: Percentage of the initial invested margin > amt String Amount per order Only applicable to entryType in 2/3 > ratio String Amount ratio per order Only applicable to entryType in 4/5 exitSettingParam Object Exit setting > tpSlType String Type of set the take-profit and stop-loss trigger price pnl: Based on the estimated profit and loss percentage from the entry point price: Based on price increase or decrease from the crypto’s entry price > tpPct String Take-profit percentage > slPct String Stop-loss percentage signalChanId String Signal channel Id signalChanName String Signal channel name signalSourceType String Signal source type 1: Created by yourself 2: Subscribe 3: Free signal GET / ACTIVE SIGNAL BOT RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/orders-algo-pending > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/orders-algo-pending?algoOrdType=contract REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type contract: Contract signal algoId String No Algo ID after String Yes Pagination of data to return records algoId earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records algoId newer than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "623833708424069120", "algoOrdType": "contract", "availBal": "1.6561369013122267", "cTime": "1695005546360", "cancelType": "0", "entrySettingParam": { "allowMultipleEntry": true, "amt": "0", "entryType": "1", "ratio": "" }, "exitSettingParam": { "slPct": "", "tpPct": "", "tpSlType": "price" }, "floatPnl": "0.1279999999999927", "frozenBal": "25.16816", "instIds": [ "BTC-USDT-SWAP", "ETH-USDT-SWAP" ], "instType": "SWAP", "investAmt": "100", "lever": "10", "ratio": "", "realizedPnl": "-73.303703098687766", "signalChanId": "623827579484770304", "signalChanName": "my signal", "signalSourceType": "1", "state": "running", "subOrdType": "9", "totalEq": "26.824296901312227", "totalPnl": "-73.1757030986877733", "totalPnlRatio": "-0.7317570309868777", "uTime": "1697029422313" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instIds Array of string Instrument IDs cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type contract: Contract signal state String Algo order state starting running stopping cancelType String Algo order stop reason 0: None totalPnl String Total P&L totalPnlRatio String Total P&L ratio totalEq String Total equity of strategy account floatPnl String Float P&L realizedPnl String Realized P&L frozenBal String Frozen balance availBal String Avail balance lever String Leverage Only applicable to contract signal investAmt String Investment amount subOrdType String Sub order type 1:limit order 2:market order 9:tradingView signal ratio String Price offset ratio, calculate the limit price as a percentage offset from the best bid/ask price Only applicable to subOrdType is limit order entrySettingParam Object Entry setting > allowMultipleEntry Boolean Whether or not allow multiple entries in the same direction for the same trading pairs > entryType String Entry type 1: TradingView signal 2: Fixed margin 3: Contracts 4: Percentage of free margin 5: Percentage of the initial invested margin > amt String Amount per order Only applicable to entryType in 2/3 > ratio String Amount ratio per order Only applicable to entryType in 4/5 exitSettingParam Object Exit setting > tpSlType String Type of set the take-profit and stop-loss trigger price pnl: Based on the estimated profit and loss percentage from the entry point price: Based on price increase or decrease from the crypto’s entry price > tpPct String Take-profit percentage > slPct String Stop-loss percentage signalChanId String Signal channel Id signalChanName String Signal channel name signalSourceType String Signal source type 1: Created by yourself 2: Subscribe 3: Free signal GET / SIGNAL BOT HISTORY RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/orders-algo-history > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/orders-algo-history?algoId=623833708424069120&algoOrdType=contract REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type contract: Contract signal algoId String Yes Algo ID after String Yes Pagination of data to return records algoId earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records algoId newer than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "623833708424069120", "algoOrdType": "contract", "availBal": "1.6561369013122267", "cTime": "1695005546360", "cancelType": "1", "entrySettingParam": { "allowMultipleEntry": true, "amt": "0", "entryType": "1", "ratio": "" }, "exitSettingParam": { "slPct": "", "tpPct": "", "tpSlType": "price" }, "floatPnl": "0.1279999999999927", "frozenBal": "25.16816", "instIds": [ "BTC-USDT-SWAP", "ETH-USDT-SWAP" ], "instType": "SWAP", "investAmt": "100", "lever": "10", "ratio": "", "realizedPnl": "-73.303703098687766", "signalChanId": "623827579484770304", "signalChanName": "my signal", "signalSourceType": "1", "state": "stopped", "subOrdType": "9", "totalEq": "26.824296901312227", "totalPnl": "-73.1757030986877733", "totalPnlRatio": "-0.7317570309868777", "uTime": "1697029422313" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type instIds Array of string Instrument IDs cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type contract: Contract signal state String Algo order state stopped cancelType String Algo order stop reason 1: Manual stop totalPnl String Total P&L totalPnlRatio String Total P&L ratio totalEq String Total equity of strategy account floatPnl String Float P&L realizedPnl String Realized P&L frozenBal String Frozen balance availBal String Avail balance lever String Leverage Only applicable to contract signal investAmt String Investment amount subOrdType String Sub order type 1:limit order 2:market order 9:tradingView signal ratio String Price offset ratio, calculate the limit price as a percentage offset from the best bid/ask price Only applicable to subOrdType is limit order entrySettingParam Object Entry setting > allowMultipleEntry Boolean Whether or not allow multiple entries in the same direction for the same trading pairs > entryType String Entry type 1: TradingView signal 2: Fixed margin 3: Contracts 4: Percentage of free margin 5: Percentage of the initial invested margin > amt String Amount per order Only applicable to entryType in 2/3 > ratio String Amount ratio per order Only applicable to entryType in 4/5 exitSettingParam Object Exit setting > tpSlType String Type of set the take-profit and stop-loss trigger price pnl: Based on the estimated profit and loss percentage from the entry point price: Based on price increase or decrease from the crypto’s entry price > tpPct String Take-profit percentage > slPct String Stop-loss percentage signalChanId String Signal channel Id signalChanName String Signal channel name signalSourceType String Signal source type 1: Created by yourself 2: Subscribe 3: Free signal GET / SIGNAL BOT ORDER POSITIONS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/positions > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/positions?algoId=623833708424069120&algoOrdType=contract REQUEST PARAMETERS Parameter Type Required Description algoOrdType String Yes Algo order type contract: Contract signal algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "adl": "1", "algoClOrdId": "", "algoId": "623833708424069120", "avgPx": "1597.74", "cTime": "1697502301460", "ccy": "USDT", "imr": "23.76495", "instId": "ETH-USDT-SWAP", "instType": "SWAP", "last": "1584.34", "lever": "10", "liqPx": "1438.7380360728976", "markPx": "1584.33", "mgnMode": "cross", "mgnRatio": "11.719278420807477", "mmr": "1.9011959999999997", "notionalUsd": "237.75168928499997", "pos": "15", "posSide": "net", "uTime": "1697502301460", "upl": "-2.0115000000000123", "uplRatio": "-0.0839310526118142" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID. Used to be extended in the future. instType String Instrument type instId String Instrument ID, e.g. BTC-USDT-SWAP cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 avgPx String Average open price ccy String Margin currency lever String Leverage liqPx String Estimated liquidation price posSide String Position side net pos String Quantity of positions mgnMode String Margin mode cross isolated mgnRatio String Margin ratio imr String Initial margin requirement mmr String Maintenance margin requirement upl String Unrealized profit and loss uplRatio String Unrealized profit and loss ratio last String Latest traded price notionalUsd String Notional value of positions in USD adl String Auto decrease line, signal area Divided into 5 levels, from 1 to 5, the smaller the number, the weaker the adl intensity. markPx String Mark price GET / POSITION HISTORY Retrieve the updated position data for the last 3 months. Return in reverse chronological order using utime. RATE LIMIT: 1 REQUEST PER 10 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/positions-history > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/positions-history?algoId=1234 REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String No Instrument ID, e.g.:BTC-USD-SWAP after String No Pagination of data to return records earlier than the requested uTime, Unix timestamp format in milliseconds, e.g.1597026383085 before String No Pagination of data to return records newer than the requested uTime, Unix timestamp format in milliseconds, e.g 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "cTime": "1704724451471", "closeAvgPx": "200", "direction": "net", "instId": "ETH-USDT-SWAP", "lever": "5.0", "mgnMode": "cross", "openAvgPx": "220", "pnl": "-2.021", "pnlRatio": "-0.4593181818181818", "uTime": "1704724456322", "uly": "ETH-USDT" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID mgnMode String Margin mode cross isolated cTime String Created time of position uTime String Updated time of position openAvgPx String Average price of opening position closeAvgPx String Average price of closing position pnl String Profit and loss pnlRatio String P&L ratio lever String Leverage direction String Direction: long short uly String Underlying POST / CLOSE POSITION Close the position of an instrument via a market order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/close-position > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/close-position body { "instId":"BTC-USDT-SWAP", "algoId":"448965992920907776" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "448965992920907776" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID POST / PLACE SUB ORDER You can place an order only if you have sufficient funds. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/sub-order > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/sub-order body { "algoId":"1222", "instId":"BTC-USDT-SWAP", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT-SWAP algoId String Yes Algo ID side String Yes Order side, buy sell ordType String Yes Order type market: Market order limit: Limit order sz String Yes Quantity to buy or sell px String Conditional Order price. Only applicable to limit order. reduceOnly Boolean No Whether orders can only reduce in position size. Valid options: true or false. The default value is false. Only applicable to Spot and futures mode/Multi-currency margin > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data String Array of objects contains the response results ordType Order type. When creating a new order, you must specify the order type. The order type you specify will affect: 1) what order parameters are required, and 2) how the matching system executes your order. The following are valid order types: `limit`: Limit order, which requires specified sz and px. `market`: Market order. It will be filled with market price (by swiping opposite order book). Market order will be placed to order book with most aggressive price allowed by Price Limit Mechanism. sz refers to the number of contracts。 reduceOnly When placing an order with this parameter set to true, it means that the order will reduce the size of the position only The sum of the current order size and all reverse direction reduce-only pending orders which's price-time priority is higher than the current order, cannot exceed the contract quantity of position. Only applicable to `Spot and futures mode` and `Multi-currency margin` POST / CANCEL SUB ORDER Cancel an incomplete order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/signal/cancel-sub-order > Request Example Copy to ClipboardPOST /api/v5/tradingBot/signal/cancel-sub-order body { "algoId":"91664", "signalOrdId":"590908157585625111", "instId":"BTC-USDT-SWAP" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID instId String Yes Instrument ID, e.g. BTC-USDT-SWAP signalOrdId String Yes Order ID > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "signalOrdId":"590908157585625111", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success msg String The error message, empty if the code is 0 data String Array of objects contains the response results > signalOrdId String Order ID > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection or success message of event execution. Cancel order returns with sCode equal to 0. It is not strictly considered that the order has been canceled. It only means that your cancellation request has been accepted by the system server. The result of the cancellation is subject to the state by get sub orders endpoint. GET / SIGNAL BOT SUB ORDERS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/sub-orders > Request Example Copy to Clipboard# Get historical filled sub orders GET /api/v5/tradingBot/signal/sub-orders?algoId=623833708424069120&algoOrdType=contract&state=filled # Get designated sub order GET /api/v5/tradingBot/signal/sub-orders?algoId=623833708424069120&algoOrdType=contract&signalOrdId=O632302662327996418 REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID algoOrdType String Yes Algo order type contract: Contract signal state String Conditional Sub order state live partially_filled filled cancelled Either state or signalOrdId is required, if both are passed in, only state is valid. signalOrdId String Conditional Sub order ID after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId. begin String No Return records of ctime after than the requested timestamp (include), Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Return records of ctime before than the requested timestamp (include), Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. type String No Sub order type live filled Either type or clOrdId is required, if both are passed in, only clOrdId is valid. clOrdId String No Sub order client-supplied ID. It will be deprecated soon > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "18", "algoClOrdId": "", "algoId": "623833708424069120", "algoOrdType": "contract", "avgPx": "1572.81", "cTime": "1697024702320", "ccy": "", "clOrdId": "O632302662327996418", "ctVal": "0.01", "fee": "-0.1415529", "feeCcy": "USDT", "instId": "ETH-USDT-SWAP", "instType": "SWAP", "lever": "10", "ordId": "632302662351958016", "ordType": "market", "pnl": "-2.6784", "posSide": "net", "px": "", "side": "buy", "state": "filled", "sz": "18", "tag": "", "tdMode": "cross", "uTime": "1697024702322" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID. Used to be extended in the future instType String Instrument type instId String Instrument ID algoOrdType String Algo order type contract: Contract signal ordId String Sub order ID clOrdId String Sub order client-supplied ID. It is equal to signalOrdId cTime String Sub order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Sub order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 tdMode String Sub order trade mode Margin mode: cross/isolated Non-Margin mode: cash ccy String Margin currency Only applicable to cross MARGIN orders in Spot and futures mode. ordType String Sub order type market: Market order limit: Limit order ioc: Immediate-or-cancel order sz String Sub order quantity to buy or sell state String Sub order state canceled live partially_filled filled cancelling side String Sub order side buy,sell px String Sub order price fee String Sub order fee amount feeCcy String Sub order fee currency avgPx String Sub order average filled price accFillSz String Sub order accumulated fill quantity posSide String Sub order position side net pnl String Sub order profit and loss ctVal String Contract value Only applicable to FUTURES/SWAP lever String Leverage tag String Order tag GET / SIGNAL BOT EVENT HISTORY RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/signal/event-history > Request Example Copy to ClipboardGET /api/v5/tradingBot/signal/event-history?algoId=623833708424069120 REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID after String No Pagination of data to return records eventCtime earlier than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records eventCtime newer than the requested timestamp, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "alertMsg": "{\"marketPosition\":\"short\",\"prevMarketPosition\":\"long\",\"action\":\"sell\",\"instrument\":\"ETHUSDT.P\",\"timestamp\":\"2023-10-16T10:50:00.000Z\",\"maxLag\":\"60\",\"investmentType\":\"base\",\"amount\":\"2\"}", "algoId": "623833708424069120", "eventCtime": "1697453400959", "eventProcessMsg": "Processed reverse entry signal and placed ETH-USDT-SWAP order with all available balance", "eventStatus": "success", "eventType": "signal_processing", "eventUtime": "", "triggeredOrdData": [ { "clOrdId": "O634100754731765763" }, { "clOrdId": "O634100754752737282" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID eventType String Event type system_action user_action signal_processing eventCtime String Event timestamp of creation. Unix timestamp format in milliseconds, e.g. 1597026383085 eventUtime String Event timestamp of update. Unix timestamp format in milliseconds, e.g. 1597026383085 eventProcessMsg String Event process message eventStatus String Event status success failure triggeredOrdData Array of object Triggered sub order data > clOrdId String Sub order client-supplied id RECURRING BUY Recurring buy is a strategy for investing a fixed amount in crypto at fixed intervals. An appropriate recurring approach in volatile markets allows you to buy crypto at lower costs. Learn more The API endpoints of Recurring buy require authentication. POST / PLACE RECURRING BUY ORDER RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/recurring/order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/recurring/order-algo body { "stgyName": "BTC|ETH recurring buy monthly", "amt":"100", "recurringList":[ { "ccy":"BTC", "ratio":"0.2" }, { "ccy":"ETH", "ratio":"0.8" } ], "period":"monthly", "recurringDay":"1", "recurringTime":"0", "timeZone":"8", // UTC +8 "tdMode":"cross", "investmentCcy":"USDT" } REQUEST PARAMETERS Parameter Type Required Description stgyName String Yes Custom name for trading bot, no more than 40 characters recurringList Array of object Yes Recurring buy info > ccy String Yes Recurring currency, e.g. BTC > ratio String Yes Proportion of recurring currency assets, e.g. "0.2" representing 20% period String Yes Period monthly weekly daily hourly recurringDay String Conditional Recurring buy date When the period is monthly, the value range is an integer of [1,28] When the period is weekly, the value range is an integer of [1,7] When the period is daily/hourly, the parameter is not required. recurringHour String Conditional Recurring buy by hourly 1/4/8/12, e.g. 4 represents "recurring buy every 4 hour" When the period is hourly, the parameter is required. recurringTime String Yes Recurring buy time, the value range is an integer of [0,23] When the period is hourly, the parameter is the time of the first investment occurs. timeZone String Yes UTC time zone, the value range is an integer of [-12,14] e.g. "8" representing UTC+8 (East 8 District), Beijing Time amt String Yes Quantity invested per cycle investmentCcy String Yes The invested quantity unit, can only be USDT/USDC tdMode String Yes Trading mode Margin mode: cross Non-Margin mode: cash algoClOrdId String No Client-supplied Algo ID There will be a value when algo order attaching algoClOrdId is triggered, or it will be "". A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoId":"560472804207104000", "algoClOrdId":"", "sCode":"0", "sMsg":"", "tag":"" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success sMsg String Rejection message if the request is unsuccessful tag String Order tag POST / AMEND RECURRING BUY ORDER RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/recurring/amend-order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/recurring/amend-order-algo body { "algoId":"448965992920907776", "stgyName":"stg1" } REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID stgyName String Yes New custom name for trading bot after adjustment, no more than 40 characters > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "algoId":"448965992920907776", "algoClOrdId":"", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success sMsg String Rejection message if the request is unsuccessful POST / STOP RECURRING BUY ORDER A maximum of 10 orders can be stopped per request. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/tradingBot/recurring/stop-order-algo > Request Example Copy to ClipboardPOST /api/v5/tradingBot/recurring/stop-order-algo body [ { "algoId":"560472804207104000" } ] REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "1839309556514557952", "sCode": "0", "sMsg": "", "tag": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID sCode String The code of the event execution result, 0 means success sMsg String Rejection message if the request is unsuccessful tag String Order tag (Deprecated) GET / RECURRING BUY ORDER LIST RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/recurring/orders-algo-pending > Request Example Copy to ClipboardGET /api/v5/tradingBot/recurring/orders-algo-pending REQUEST PARAMETERS Parameter Type Required Description algoId String No Algo ID after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "644497312047435776", "algoOrdType": "recurring", "amt": "100", "cTime": "1699932133373", "cycles": "6", "instType": "SPOT", "investmentAmt": "0", "investmentCcy": "USDC", "mktCap": "0", "period": "hourly", "pnlRatio": "0", "recurringDay": "", "recurringHour": "1", "recurringList": [ { "ccy": "BTC", "ratio": "0.2" }, { "ccy": "ETH", "ratio": "0.8" } ], "recurringTime": "12", "state": "running", "stgyName": "stg1", "tag": "", "timeZone": "8", "totalAnnRate": "0", "totalPnl": "0", "uTime": "1699952473152" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type recurring: recurring buy state String Algo order state running stopping pause stgyName String Custom name for trading bot, no more than 40 characters recurringList Array of object Recurring buy info > ccy String Recurring currency, e.g. BTC > ratio String Proportion of recurring currency assets, e.g. "0.2" representing 20% period String Period monthly weekly daily hourly recurringDay String Recurring buy date When the period is monthly, the value range is an integer of [1,28] When the period is weekly, the value range is an integer of [1,7] recurringHour String Recurring buy by hourly 1/4/8/12, e.g. 4 represents "recurring buy every 4 hour" recurringTime String Recurring buy time, the value range is an integer of [0,23] timeZone String UTC time zone, the value range is an integer of [-12,14] e.g. "8" representing UTC+8 (East 8 District), Beijing Time amt String Quantity invested per cycle investmentAmt String Accumulate quantity invested investmentCcy String The invested quantity unit, can only be USDT/USDC totalPnl String Total P&L totalAnnRate String Total annualized rate of yield pnlRatio String Rate of yield mktCap String Market value in unit of USDT cycles String Accumulate recurring buy cycles tag String Order tag GET / RECURRING BUY ORDER HISTORY RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/recurring/orders-algo-history > Request Example Copy to ClipboardGET /api/v5/tradingBot/recurring/orders-algo-history REQUEST PARAMETERS Parameter Type Required Description algoId String No Algo ID after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "644496098429767680", "algoOrdType": "recurring", "amt": "100", "cTime": "1699931844050", "cycles": "0", "instType": "SPOT", "investmentAmt": "0", "investmentCcy": "USDC", "mktCap": "0", "period": "hourly", "pnlRatio": "0", "recurringDay": "", "recurringHour": "1", "recurringList": [ { "ccy": "BTC", "ratio": "0.2" }, { "ccy": "ETH", "ratio": "0.8" } ], "recurringTime": "0", "state": "stopped", "stgyName": "stg1", "tag": "", "timeZone": "8", "totalAnnRate": "0", "totalPnl": "0", "uTime": "1699932177659" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type recurring: recurring buy state String Algo order state stopped stgyName String Custom name for trading bot, no more than 40 characters recurringList Array of object Recurring buy info > ccy String Recurring currency, e.g. BTC > ratio String Proportion of recurring currency assets, e.g. "0.2" representing 20% period String Period monthly weekly daily hourly recurringDay String Recurring buy date When the period is monthly, the value range is an integer of [1,28] When the period is weekly, the value range is an integer of [1,7] recurringHour String Recurring buy by hourly 1/4/8/12, e.g. 4 represents "recurring buy every 4 hour" recurringTime String Recurring buy time, the value range is an integer of [0,23] timeZone String UTC time zone, the value range is an integer of [-12,14] e.g. "8" representing UTC+8 (East 8 District), Beijing Time amt String Quantity invested per cycle investmentAmt String Accumulate quantity invested investmentCcy String The invested quantity unit, can only be USDT/USDC totalPnl String Total P&L totalAnnRate String Total annualized rate of yield pnlRatio String Rate of yield mktCap String Market value in unit of USDT cycles String Accumulate recurring buy cycles tag String Order tag GET / RECURRING BUY ORDER DETAILS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/recurring/orders-algo-details > Request Example Copy to ClipboardGET /api/v5/tradingBot/recurring/orders-algo-details?algoId=644497312047435776 REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID > Response Example Copy to Clipboard{ "code": "0", "data": [ { "algoClOrdId": "", "algoId": "644497312047435776", "algoOrdType": "recurring", "amt": "100", "cTime": "1699932133373", "cycles": "6", "instType": "SPOT", "investmentAmt": "0", "investmentCcy": "USDC", "mktCap": "0", "nextInvestTime": "1699956005500", "period": "hourly", "pnlRatio": "0", "recurringDay": "", "recurringHour": "1", "recurringList": [ { "avgPx": "0", "ccy": "BTC", "profit": "0", "px": "36683.2", "ratio": "0.2", "totalAmt": "0" }, { "avgPx": "0", "ccy": "ETH", "profit": "0", "px": "2058.36", "ratio": "0.8", "totalAmt": "0" } ], "recurringTime": "12", "state": "running", "stgyName": "stg1", "tag": "", "timeZone": "8", "totalAnnRate": "0", "totalPnl": "0", "uTime": "1699952485451" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID algoClOrdId String Client-supplied Algo ID instType String Instrument type cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 algoOrdType String Algo order type recurring: recurring buy state String Algo order state running stopping stopped pause stgyName String Custom name for trading bot, no more than 40 characters recurringList Array of object Recurring buy info > ccy String Recurring buy currency, e.g. BTC > ratio String Proportion of recurring currency assets, e.g. "0.2" representing 20% > totalAmt String Accumulated quantity in unit of recurring buy currency > profit String Profit in unit of investmentCcy > avgPx String Average price of recurring buy, quote currency is investmentCcy > px String Current market price, quote currency is investmentCcy period String Period monthly weekly daily hourly recurringDay String Recurring buy date When the period is monthly, the value range is an integer of [1,28] When the period is weekly, the value range is an integer of [1,7] recurringHour String Recurring buy by hourly 1/4/8/12, e.g. 4 represents "recurring buy every 4 hour" recurringTime String Recurring buy time, the value range is an integer of [0,23] timeZone String UTC time zone, the value range is an integer of [-12,14] e.g. "8" representing UTC+8 (East 8 District), Beijing Time amt String Quantity invested per cycle investmentAmt String Accumulate quantity invested investmentCcy String The invested quantity unit, can only be USDT/USDC nextInvestTime String Next invest time, Unix timestamp format in milliseconds, e.g. 1597026383085 totalPnl String Total P&L totalAnnRate String Total annualized rate of yield pnlRatio String Rate of yield mktCap String Market value in unit of USDT cycles String Accumulate recurring buy cycles tag String Order tag GET / RECURRING BUY SUB ORDERS RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/tradingBot/recurring/sub-orders > Request Example Copy to ClipboardGET /api/v5/tradingBot/recurring/sub-orders?algoId=560516615079727104 REQUEST PARAMETERS Parameter Type Required Description algoId String Yes Algo ID ordId String No Sub order ID after String No Pagination of data to return records earlier than the requested algoId. before String No Pagination of data to return records newer than the requested algoId. limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accFillSz": "0.045315", "algoClOrdId": "", "algoId": "560516615079727104", "algoOrdType": "recurring", "avgPx": "1765.4", "cTime": "1679911222200", "fee": "-0.0000317205", "feeCcy": "ETH", "instId": "ETH-USDC", "instType": "SPOT", "ordId": "560523524230717440", "ordType": "market", "px": "-1", "side": "buy", "state": "filled", "sz": "80", "tag": "", "tdMode": "", "uTime": "1679911222207" }, { "accFillSz": "0.00071526", "algoClOrdId": "", "algoId": "560516615079727104", "algoOrdType": "recurring", "avgPx": "27961.6", "cTime": "1679911222189", "fee": "-0.000000500682", "feeCcy": "BTC", "instId": "BTC-USDC", "instType": "SPOT", "ordId": "560523524184580096", "ordType": "market", "px": "-1", "side": "buy", "state": "filled", "sz": "20", "tag": "", "tdMode": "", "uTime": "1679911222194" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description algoId String Algo ID instType String Instrument type instId String Instrument ID algoOrdType String Algo order type recurring: recurring buy ordId String Sub order ID cTime String Sub order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Sub order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 tdMode String Sub order trade mode Margin mode : cross Non-Margin mode : cash ordType String Sub order type market: Market order sz String Sub order quantity to buy or sell state String Sub order state canceled live partially_filled filled cancelling side String Sub order side buy sell px String Sub order limit price If it's a market order, "-1" will be return fee String Sub order fee feeCcy String Sub order fee currency avgPx String Sub order average filled price accFillSz String Sub order accumulated fill quantity tag String Order tag WS / RECURRING BUY ORDERS CHANNEL Retrieve recurring buy orders. Data will be pushed when triggered by events. It will also be pushed in regular interval according to subscription granularity. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "algo-recurring-buy", "instType": "SPOT" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name algo-recurring-buy > instType String Yes Instrument type SPOT ANY > algoId String No Algo Order ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "algo-recurring-buy", "instType": "SPOT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"algo-recurring-buy\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type > algoId String No Algo Order ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "algo-recurring-buy", "instType": "SPOT", "uid": "447*******584" }, "data": [{ "algoClOrdId": "", "algoId": "644497312047435776", "algoOrdType": "recurring", "amt": "100", "cTime": "1699932133373", "cycles": "0", "instType": "SPOT", "investmentAmt": "0", "investmentCcy": "USDC", "mktCap": "0", "nextInvestTime": "1699934415300", "pTime": "1699933314691", "period": "hourly", "pnlRatio": "0", "recurringDay": "", "recurringHour": "1", "recurringList": [{ "avgPx": "0", "ccy": "BTC", "profit": "0", "px": "36482", "ratio": "0.2", "totalAmt": "0" }, { "avgPx": "0", "ccy": "ETH", "profit": "0", "px": "2057.54", "ratio": "0.8", "totalAmt": "0" }], "recurringTime": "12", "state": "running", "stgyName": "stg1", "tag": "", "timeZone": "8", "totalAnnRate": "0", "totalPnl": "0", "uTime": "1699932136249" }] } RESPONSE PARAMETERS WHEN DATA IS PUSHED. Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instType String Instrument type > algoId String Algo Order ID > uid String User ID data Array Subscribed data > algoId String Algo ID > algoClOrdId String Client-supplied Algo ID > instType String Instrument type > cTime String Algo order created time, Unix timestamp format in milliseconds, e.g. 1597026383085 > uTime String Algo order updated time, Unix timestamp format in milliseconds, e.g. 1597026383085 > algoOrdType String Algo order type recurring: recurring buy > state String Algo order state running stopping stopped pause > stgyName String Custom name for trading bot, no more than 40 characters > recurringList Array of object Recurring buy info >> ccy String Recurring buy currency, e.g. BTC >> ratio String Proportion of recurring currency assets, e.g. "0.2" representing 20% >> totalAmt String Accumulated quantity in unit of recurring buy currency >> profit String Profit in unit of investmentCcy >> avgPx String Average price of recurring buy, quote currency is investmentCcy >> px String Current market price, quote currency is investmentCcy > period String Period monthly weekly daily hourly > recurringDay String Recurring buy date When the period is monthly, the value range is an integer of [1,28] When the period is weekly, the value range is an integer of [1,7] > recurringHour String Recurring buy by hourly 1/4/8/12, e.g. 4 represents "recurring buy every 4 hour" > recurringTime String Recurring buy time, the value range is an integer of [0,23] > timeZone String UTC time zone, the value range is an integer of [-12,14] e.g. "8" representing UTC+8 (East 8 District), Beijing Time > amt String Quantity invested per cycle > investmentAmt String Accumulate quantity invested > investmentCcy String The invested quantity unit, can only be USDT/USDC > nextInvestTime String Next invest time, Unix timestamp format in milliseconds, e.g. 1597026383085 > totalPnl String Total P&L > totalAnnRate String Total annualized rate of yield > pnlRatio String Rate of yield > mktCap String Market value in unit of USDT > cycles String Accumulate recurring buy cycles > tag String Order tag > pTime String Push time of algo order information, Unix timestamp format in milliseconds, e.g. 1597026383085 COPY TRADING Copy trading function is not opened. Lead trading API Workflow as follows: 1. Apply to become a leading trader. * The procedure can refer to How to become a lead trader; * You can know whether you are a lead trader by checking whether roleType or spotRoleType from Get account configuration is 1. 2. Leading instruments: * GET / Leading instruments can get instruments that are supported to have leading trades and the instruments that you enable leading trade. For instruments that are disenabled copy trading, you can still trade normally, but copy trading will not be triggered; * Amend leading instruments can amend your leading instruments. You need to set initial leading instruments while applying to become a leading trader. All non-leading contracts can't have position or pending orders for the current request when setting non-leading contracts as leading contracts. 3. Open position: * You can open the position by placing order endpoints and channels including Place order endpoint, Place multiple orders endpoint, Place order channel, Place multiple orders channel, tdMode should be spot_isolated for SPOT lead trading. * For buy/sell mode, the orders must be in the same direction as your existing positions and open orders. You can select the direction you want if the instrument does not have position and pending orders. * For long/short mode, you can open long or open short as you want. 4. Close position * You can close the position with customized price or size by placing order endpoints and channels including Place order endpoint, Place multiple orders endpoint, Place order channel, Place multiple orders channel, or close the position by Close positions / Close lead or copy position; * Close positions can close certain position under the current instrument(e.g. the long or short position under long/shor mode ), which can contain multiple leading positions; * Close lead or copy position can only close a leading position once a time. It is required to pass subPosId which can get from Get existing leading positions. 5. TP/SL * TP/SL can be set by Place algo order or Place lead or copy stop order; * Place algo order can set TP/SL for certain position under the current instrument(e.g. the long or short position under long/shor mode ), which can contain multiple leading positions; * Place lead or copy stop order set set TP/SL for only a leading position once a time. It is required to pass subPosId which can get from Get existing leading positions. GET / EXISTING LEAD OR COPY POSITIONS Retrieve lead or copy positions that are not closed. Returns reverse chronological order with openTime RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/current-subpositions > Request example Copy to ClipboardGET /api/v5/copytrading/current-subpositions?instId=BTC-USDT-SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP It returns all types by default. instId String No Instrument ID, e.g. BTC-USDT-SWAP uniqueCode String No Unique code, only applicable to copy trading A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC subPosType String No Data type. lead: lead trading, the default value copy: copy trading after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 500. Default is 500. > Response example Copy to Clipboard{ "code": "0", "data": [ { "algoId": "", "ccy": "USDT", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "3", "margin": "12.6417", "markPx": "38205.8", "mgnMode": "isolated", "openAvgPx": "37925.1", "openOrdId": "", "openTime": "1701231120479", "posSide": "net", "slOrdPx": "", "slTriggerPx": "", "subPos": "1", "subPosId": "649945658862370816", "tpOrdPx": "", "tpTriggerPx": "", "uniqueCode": "25CD5A80241D6FE6", "upl": "0.2807", "uplRatio": "0.0222042921442527", "availSubPos": "1" }, { "algoId": "", "ccy": "USDT", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "3", "margin": "12.6263333333333333", "markPx": "38205.8", "mgnMode": "isolated", "openAvgPx": "37879", "openOrdId": "", "openTime": "1701225074786", "posSide": "net", "slOrdPx": "", "slTriggerPx": "", "subPos": "1", "subPosId": "649920301388038144", "tpOrdPx": "", "tpTriggerPx": "", "uniqueCode": "25CD5A80241D6FE6", "upl": "0.3268", "uplRatio": "0.0258824150584758", "availSubPos": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead or copy position ID posSide String Position side long short net (Long positions have positive subPos; short positions have negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openOrdId String Order ID for opening position, only applicable to lead position openAvgPx String Average open price openTime String Open time subPos String Quantity of positions tpTriggerPx String Take-profit trigger price. slTriggerPx String Stop-loss trigger price. algoId String Stop order ID instType String Instrument type tpOrdPx String Take-profit order price, it is -1 for market price slOrdPx String Stop-loss order price, it is -1 for market price margin String Margin upl String Unrealized profit and loss uplRatio String Unrealized profit and loss ratio markPx String Latest mark price, only applicable to contract uniqueCode String Lead trader unique code ccy String Margin currency availSubPos String Quantity of positions that can be closed GET / LEAD OR COPY POSITION HISTORY Retrieve the completed lead or copy position of the last 3 months. Returns reverse chronological order with subPosId. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/subpositions-history > Request example Copy to ClipboardGET /api/v5/copytrading/subpositions-history?instId=BTC-USDT-SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP It returns all types by default. instId String No Instrument ID, e.g. BTC-USDT-SWAP subPosType String No Data type. lead: lead trading, the default value copy: copy trading after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "closeAvgPx": "37617.5", "closeTime": "1701188587950", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "3", "margin": "37.41", "markPx": "38203.4", "mgnMode": "isolated", "openAvgPx": "37410", "openOrdId": "", "openTime": "1701184638702", "pnl": "0.6225", "pnlRatio": "0.0166399358460306", "posSide": "net", "profitSharingAmt": "0.0407967", "subPos": "3", "closeSubPos": "2", "type": "1", "subPosId": "649750700213698561", "uniqueCode": "25CD5A80241D6FE6" }, { "ccy": "USDT", "closeAvgPx": "37617.5", "closeTime": "1701188587950", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "3", "margin": "24.94", "markPx": "38203.4", "mgnMode": "isolated", "openAvgPx": "37410", "openOrdId": "", "openTime": "1701184635381", "pnl": "0.415", "pnlRatio": "0.0166399358460306", "posSide": "net", "profitSharingAmt": "0.0271978", "subPos": "2", "closeSubPos": "2", "type": "2", "subPosId": "649750686292803585", "uniqueCode": "25CD5A80241D6FE6" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead or copy position ID posSide String Position side long short net (long position has positive subPos; short position has negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openOrdId String Order ID for opening position, only applicable to lead position openAvgPx String Average open price openTime String Time of opening subPos String Quantity of positions closeTime String Time of closing position closeAvgPx String Average price of closing position pnl String Profit and loss pnlRatio String P&L ratio instType String Instrument type margin String Margin ccy String Currency markPx String Latest mark price, only applicable to contract uniqueCode String Lead trader unique code profitSharingAmt String Profit sharing amount, only applicable to copy trading closeSubPos String Quantity of positions that is already closed type String The type of closing position 1:Close position partially; 2:Close all POST / PLACE LEAD OR COPY STOP ORDER Set TP/SL for the current lead or copy position that are not closed. RATE LIMIT: 20 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/algo-order > Request example Copy to ClipboardPOST /api/v5/copytrading/algo-order body { "subPosId": "518541406042591232", "tpTriggerPx": "10000" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP, the default value subPosId String Yes Lead or copy position ID tpTriggerPx String Conditional Take-profit trigger price. Take-profit order price will be the market price after triggering. At least one of tpTriggerPx and slTriggerPx must be filled The take profit order will be deleted if it is 0 slTriggerPx String Conditional Stop-loss trigger price. Stop-loss order price will be the market price after triggering. The stop loss order will be deleted if it is 0 tpOrdPx String No Take-profit order price If the price is -1, take-profit will be executed at the market price, the default is -1 Only applicable to SPOT lead trader slOrdPx String No Stop-loss order price If the price is -1, stop-loss will be executed at the market price, the default is -1 Only applicable to SPOT lead trader tpTriggerPxType String No Take-profit trigger price type last: last price index: index price mark: mark price Default is last slTriggerPxType String No Stop-loss trigger price type last: last price index: index price mark: mark price Default is last tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. subPosType String No Data type. lead: lead trading, the default value copy: copy trading > Response example Copy to Clipboard{ "code": "0", "data": [ { "subPosId": "518560559046594560", "tag":"" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description subPosId String Lead or copy position ID tag String Order tag POST / CLOSE LEAD OR COPY POSITION You can only close a lead or copy position once a time. It is required to pass subPosId which can get from Get existing leading positions. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/close-subposition > Request example Copy to ClipboardPOST /api/v5/copytrading/close-subposition body { "subPosId": "518541406042591232", } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP, the default value subPosType String No Data type. lead: lead trading, the default value copy: copy trading subPosId String Yes Lead or copy position ID ordType String No Order type market:Market order, the default value limit:Limit order px String No Order price. Only applicable to limit order and SPOT lead trader If the price is 0, the pending order will be canceled. It is modifying order if you set px after placing limit order. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > Response example Copy to Clipboard{ "code": "0", "data": [ { "subPosId": "518560559046594560", "tag":"" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description subPosId String Lead or copy position ID tag String Order tag GET / LEADING INSTRUMENTS Retrieve instruments that are supported to lead by the platform. Retrieve instruments that the lead trader has set. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/instruments > Request example Copy to ClipboardGET /api/v5/copytrading/instruments REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP, the default value > Response example Copy to Clipboard{ "code": "0", "data": [ { "enabled": true, "instId": "BTC-USDT-SWAP" }, { "enabled": true, "instId": "ETH-USDT-SWAP" }, { "enabled": false, "instId": "ADA-USDT-SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP enabled Boolean Whether instrument is a lead instrument. true or false POST / AMEND LEADING INSTRUMENTS The leading trader can amend current leading instruments, need to set initial leading instruments while applying to become a leading trader. All non-leading instruments can't have position or pending orders for the current request when setting non-leading instruments as leading instruments. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/set-instruments > Request example Copy to ClipboardPOST /api/v5/copytrading/set-instruments body { "instId": "BTC-USDT-SWAP,ETH-USDT-SWAP" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP, the default value instId String Yes Instrument ID, e.g. BTC-USDT-SWAP. If there are multiple instruments, separate them with commas. The value of `instId` must include all instruments that you are going to have the lead trading with because the previous settings will be overwritten after the current request is set successfully > Response example Copy to Clipboard{ "code": "0", "data": [ { "enabled": true, "instId": "BTC-USDT-SWAP" }, { "enabled": true, "instId": "ETH-USDT-SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP enabled Boolean Whether you set it successfully true or false GET / PROFIT SHARING DETAILS The leading trader gets profits shared details for the last 3 months. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/profit-sharing-details > Request example Copy to ClipboardGET /api/v5/copytrading/profit-sharing-details?limit=2 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP It returns all types by default. after String No Pagination of data to return records earlier than the requested profitSharingId before String No Pagination of data to return records newer than the requested profitSharingId limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "nickName": "Potato", "profitSharingAmt": "0.00536", "profitSharingId": "148", "portLink": "", "ts": "1723392000000", "instType": "SWAP" }, { "ccy": "USDT", "nickName": "Apple", "profitSharingAmt": "0.00336", "profitSharingId": "20", "portLink": "", "ts": "1723392000000", "instType": "SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String The currency of profit sharing. profitSharingAmt String Profit sharing amount. It would be 0 if there is no any profit sharing. nickName String Nickname of copy trader. profitSharingId String Profit sharing ID. instType String Instrument type portLink String Portrait link ts String Profit sharing time. GET / TOTAL PROFIT SHARING The leading trader gets the total amount of profit shared since joining the platform. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/total-profit-sharing > Request example Copy to ClipboardGET /api/v5/copytrading/total-profit-sharing REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP It returns all types by default. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "totalProfitSharingAmt": "0.6584928", "instType": "SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String The currency of profit sharing. totalProfitSharingAmt String Total profit sharing amount. instType String Instrument type GET / UNREALIZED PROFIT SHARING DETAILS The leading trader gets the profit sharing details that are expected to be shared in the next settlement cycle. The unrealized profit sharing details will update once there copy position is closed. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/unrealized-profit-sharing-details > Request example Copy to ClipboardGET /api/v5/copytrading/unrealized-profit-sharing-details REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SPOT SWAP It returns all types by default. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "nickName": "Potato", "portLink": "", "ts": "1669901824779", "unrealizedProfitSharingAmt": "0.455472", "instType": "SWAP" }, { "ccy": "USDT", "nickName": "Apple", "portLink": "", "ts": "1669460210113", "unrealizedProfitSharingAmt": "0.033608", "instType": "SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String The currency of profit sharing. e.g. USDT unrealizedProfitSharingAmt String Unrealized profit sharing amount. nickName String Nickname of copy trader. instType String Instrument type portLink String Portrait link ts String Update time. GET / TOTAL UNREALIZED PROFIT SHARING The leading trader gets the total unrealized amount of profit shared. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/total-unrealized-profit-sharing > Request example Copy to ClipboardGET /api/v5/copytrading/total-unrealized-profit-sharing REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value. > Response example Copy to Clipboard{ "code": "0", "data": [ { "profitSharingTs": "1705852800000", "totalUnrealizedProfitSharingAmt": "0.114402985553185" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description profitSharingTs String The settlement time for the total unrealized profit sharing amount. Unix timestamp format in milliseconds, e.g.1597026383085 totalUnrealizedProfitSharingAmt String Total unrealized profit sharing amount POST / APPLY FOR LEAD TRADING Only ND broker sub-account whitelisted can apply for lead trader by this endpoint. It will be passed immediately. Please reach out to BD for help if you want to be whitelisted. For other accounts, e.g. ND main accounts and general main and sub-accounts, still need to apply on the web manually RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/apply-lead-trading > Request example Copy to ClipboardPOST /api/v5/copytrading/apply-lead-trading { "instType": "SWAP", "instId": "BTC-USDT-SWAP", } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP instId String Yes The lead instrument set at the first time. e.g. BTC-USDT-SWAP. If there are multiple instruments, separate them with commas. > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true POST / STOP LEAD TRADING It is used to stop lead trading for ND broker sub-account. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/stop-lead-trading > Request example Copy to ClipboardPOST /api/v5/copytrading/stop-lead-trading body { "instType": "SWAP", } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true POST / AMEND PROFIT SHARING RATIO It is used to amend profit sharing ratio. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/amend-profit-sharing-ratio > Request example Copy to ClipboardPOST /api/v5/copytrading/amend-profit-sharing-ratio body { "instType": "SWAP", } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP profitSharingRatio String Yes Profit sharing ratio. 0.1 represents 10% > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true GET / ACCOUNT CONFIGURATION Retrieve current account configuration related to copy/lead trading. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/config > Request example Copy to ClipboardGET /api/v5/copytrading/config REQUEST PARAMETERS None > Response example Copy to Clipboard{ "code": "0", "data": [ { "details": [ { "copyTraderNum": "1", "instType": "SWAP", "maxCopyTraderNum": "100", "profitSharingRatio": "0", "roleType": "1" }, { "copyTraderNum": "", "instType": "SPOT", "maxCopyTraderNum": "", "profitSharingRatio": "", "roleType": "0" } ], "nickName": "155***9957", "portLink": "", "uniqueCode": "5506D3681454A304" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description uniqueCode String User unique code nickName String Nickname portLink String Portrait link details String Details > instType String Instrument type SPOT SWAP > roleType String Role type 0: General user 1: Leading trader 2: Copy trader > profitSharingRatio String Profit sharing ratio. Only applicable to lead trader, or it will be "". 0.1 represents 10% > maxCopyTraderNum String Maximum number of copy traders > copyTraderNum String Current number of copy traders POST / FIRST COPY SETTINGS The first copy settings for the certain lead trader. You need to first copy settings after stopping copying. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/first-copy-settings > Request example Copy to ClipboardPOST /api/v5/copytrading/first-copy-settings body { "instType": "SWAP", "uniqueCode": "25CD5A80241D6FE6", "copyMgnMode": "cross", "copyInstIdType": "copy", "copyMode": "ratio_copy", "copyRatio": "1", "copyTotalAmt": "500", "subPosCloseType": "copy_close" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC copyMgnMode String Yes Copy margin mode cross: cross isolated: isolated copy: Use the same margin mode as lead trader when opening positions copyInstIdType String Yes Copy contract type setted custom: custom by instId which is required; copy: Keep your contracts consistent with this trader by automatically adding or removing contracts when they do instId String Conditional Instrument ID. If there are multiple instruments, separate them with commas. copyMode String No Copy mode fixed_amount: set the same fixed amount for each order, and copyAmt is required; ratio_copy: set amount as a multiple of the lead trader’s order value, and copyRatio is required The default is fixed_amount copyTotalAmt String Yes Maximum total amount in USDT. The maximum total amount you'll invest at any given time across all orders in this copy trade You won’t copy new orders if you exceed this amount copyAmt String Conditional Copy amount per order in USDT. copyRatio String Conditional Copy ratio per order. tpRatio String No Take profit per order. 0.1 represents 10% slRatio String No Stop loss per order. 0.1 represents 10% slTotalAmt String No Total stop loss in USDT for trader. If your net loss (total profit - total loss) reaches this amount, you'll stop copying this trader subPosCloseType String Yes Action type for open positions market_close: immediately close at market price copy_close:close when trader closes manual_close: close manually The default is copy_close > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true POST / AMEND COPY SETTINGS You need to use this endpoint to amend copy settings RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/amend-copy-settings > Request example Copy to ClipboardPOST /api/v5/copytrading/amend-copy-settings body { "instType": "SWAP", "uniqueCode": "25CD5A80241D6FE6", "copyMgnMode": "cross", "copyInstIdType": "copy", "copyMode": "ratio_copy", "copyRatio": "1", "copyTotalAmt": "500", "subPosCloseType": "copy_close" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC copyMgnMode String Yes Copy margin mode cross: cross isolated: isolated copy: Use the same margin mode as lead trader when opening positions copyInstIdType String Yes Copy contract type setted custom: custom by instId which is required; copy: Keep your contracts consistent with this trader by automatically adding or removing contracts when they do instId String Conditional Instrument ID. If there are multiple instruments, separate them with commas. copyMode String No Copy mode fixed_amount: set the same fixed amount for each order, and copyAmt is required; ratio_copy: set amount as a multiple of the lead trader’s order value, and copyRatio is required The default is fixed_amount copyTotalAmt String Yes Maximum total amount in USDT. The maximum total amount you'll invest at any given time across all orders in this copy trade You won’t copy new orders if you exceed this amount copyAmt String Conditional Copy amount per order in USDT copyRatio String Conditional Copy ratio per order. tpRatio String No Take profit per order. 0.1 represents 10% slRatio String No Stop loss per order. 0.1 represents 10% slTotalAmt String No Total stop loss in USDT for trader. If your net loss (total profit - total loss) reaches this amount, you'll stop copying this trader subPosCloseType String Yes Action type for open positions market_close: immediately close at market price copy_close:close when trader closes manual_close: close manually The default is copy_close > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true POST / STOP COPYING You need to use this endpoint to stop copy trading RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/stop-copy-trading > Request example Copy to ClipboardPOST /api/v5/copytrading/stop-copy-trading body { "instType": "SWAP", "uniqueCode": "25CD5A80241D6FE6", "subPosCloseType": "manual_close" } REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC subPosCloseType String Yes Action type for open positions, it is required if you have related copy position market_close: immediately close at market price copy_close:close when trader closes manual_close: close manually > Response example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean The result of setting true GET / COPY SETTINGS Retrieve the copy settings about certain lead trader. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/copy-settings > Request example Copy to ClipboardGET /api/v5/copytrading/copy-settings?instType=SWAP&uniqueCode=25CD5A80241D6FE6 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "copyAmt": "", "copyInstIdType": "copy", "copyMgnMode": "isolated", "copyMode": "ratio_copy", "copyRatio": "1", "copyState": "1", "copyTotalAmt": "500", "instIds": [ { "enabled": "1", "instId": "ADA-USDT-SWAP" }, { "enabled": "1", "instId": "YFII-USDT-SWAP" } ], "slRatio": "", "slTotalAmt": "", "subPosCloseType": "copy_close", "tpRatio": "" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description copyMode String Copy mode fixed_amount ratio_copy copyAmt String Copy amount in USDT per order. copyRatio String Copy ratio per order. copyTotalAmt String Maximum total amount in USDT. The maximum total amount you'll invest at any given time across all orders in this copy trade tpRatio String Take profit per order. 0.1 represents 10% slRatio String Stop loss per order. 0.1 represents 10% copyInstIdType String Copy contract type setted custom: custom by instId which is required; copy: Keep your contracts consistent with this trader by automatically adding or removing contracts when they do instIds Array Instrument list. It will return all lead contracts of the lead trader > instId String Instrument ID > enabled String Whether copying this instId 0 1 slTotalAmt String Total stop loss in USDT for trader. subPosCloseType String Action type for open positions market_close: immediately close at market price copy_close:close when trader closes manual_close: close manually copyMgnMode String Copy margin mode cross: cross isolated: isolated copy: Use the same margin mode as lead trader when opening positions ccy String Margin currency copyState String Current copy state 0: non-copy, 1: copy GET / MULTIPLE LEVERAGES Retrieve leverages that belong to the lead trader and you. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/batch-leverage-info > Request example Copy to ClipboardGET /api/v5/copytrading/batch-leverage-info?mgnMode=isolated&uniqueCode=25CD5A80241D6FE6 REQUEST PARAMETERS Parameter Type Required Description mgnMode String Yes Margin mode cross isolated uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC instId String No Instrument ID. If there are multiple instruments, separate them with commas. > Response example Copy to Clipboard{ "code": "0", "data": [ { "instId": "ETC-USDT-SWAP", "leadTraderLevers": [ { "lever": "3", "posSide": "long" }, { "lever": "3", "posSide": "short" } ], "mgnMode": "isolated", "myLevers": [ { "lever": "3", "posSide": "long" }, { "lever": "3", "posSide": "short" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID mgnMode String Margin mode isolated cross leadTraderLevers Array Lead trader leverages > lever String leverage > posSide String Position side myLevers Array My leverages > lever String leverage > posSide String Position side POST / SET MULTIPLE LEVERAGES Set Multiple leverages Only applicable to copy trader RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/copytrading/batch-set-leverage > Request example Copy to ClipboardPOST /api/v5/copytrading/batch-set-leverage body { "instId": "BTC-USDT-SWAP", "mgnMode": "isolated", "lever": "5" } REQUEST PARAMETERS Parameter Type Required Description mgnMode String Yes Margin mode cross isolated lever String Yes Leverage instId String Yes Instrument ID. If there are multiple instruments, separate them with commas. > Response example Copy to Clipboard{ "code": "0", "data": [ { "failInstId": "", "result": "0", "succInstId": "BTC-USDT-SWAP" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description succInstId String Instrument ID setted successfully failInstId String Instrument ID setted unsuccessfully result String Result. 0:All success 1:Some successes 2: All fail GET / MY LEAD TRADERS Retrieve my lead traders. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/current-lead-traders > Request example Copy to ClipboardGET /api/v5/copytrading/current-lead-traders?instType=SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginCopyTime": "1701224821936", "ccy": "USDT", "copyTotalAmt": "500", "copyTotalPnl": "0", "leadMode": "public", "margin": "1.89395", "nickName": "Trader9527", "portLink": "", "profitSharingRatio": "0.08", "todayPnl": "0", "uniqueCode": "25CD5A80241D6FE6", "upl": "0" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description portLink String Portrait link nickName String Nick name margin String Margin for copy trading copyTotalAmt String Copy total amount copyTotalPnl String Copy total pnl uniqueCode String Lead trader unique code ccy String margin currency profitSharingRatio String Profit sharing ratio. 0.1 represents 10% beginCopyTime String Begin copying time. Unix timestamp format in milliseconds, e.g.1597026383085 upl String Unrealized profit & loss todayPnl String Today pnl leadMode String Lead mode public private GET / MY HISTORY LEAD TRADERS Retrieve my history lead traders. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/lead-traders-history > Request example Copy to ClipboardGET /api/v5/copytrading/lead-traders-history?instType=SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value after String No Pagination of data to return records earlier than the requested copyRelId. before String No Pagination of data to return records newer than the requested copyRelId. limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginCopyTime": "1701185190222", "ccy": "USDT", "copyAmt": "20", "copyMode": "fixed_amount", "copyNum": "0", "copyRatio": "", "copyRelId": "649753013401714688", "copyState": "0", "copyTotalAmt": "1000", "copyTotalPnl": "0", "endCopyTime": "1701185190800", "leadMode": "public", "nickName": "Angry-ATH-Trunk", "portLink": "https://static.okx.com/cdn/okex/users/headimages/predefined/0006.png", "profitSharingRatio": "0.02", "uniqueCode": "C62F5565FC1677E1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description portLink String Portrait link nickName String Nick name uniqueCode String Lead trader unique code copyNum String Number of times to copy order copyTotalAmt String Copy total amount copyTotalPnl String Copy total pnl copyAmt String Copy amount per order in USDT copyMode String Copy mode fixed_amount ratio_copy copyRatio String Copy ratio per order. ccy String Margin currency profitSharingRatio String Profit sharing ratio. 0.1 represents 10% beginCopyTime String Begin copying time. Unix timestamp format in milliseconds, e.g.1597026383085 endCopyTime String Stop copying time. Unix timestamp format in milliseconds, e.g.1597026383085 copyRelId String Copy relation ID copyState String Current copy state 0: non-copy, 1: copy leadMode String Lead mode public private GET / COPY TRADING CONFIGURATION Public endpoint. Retrieve copy trading parameter configuration information of copy settings RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-config > Request example Copy to ClipboardGET /api/v5/copytrading/public-config?instType=SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value > Response example Copy to Clipboard{ "code": "0", "data": [ { "maxCopyAmt": "1000", "maxCopyRatio": "100", "maxCopyTotalAmt": "30000", "maxSlRatio": "0.75", "maxTpRatio": "1.5", "minCopyAmt": "20", "minCopyRatio": "0.01" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description maxCopyAmt String Maximum copy amount per order in USDT when you are using copy mode fixed_amount minCopyAmt String Minimum copy amount per order in USDT when you are using copy mode fixed_amount maxCopyTotalAmt String Maximum copy total amount under the certain lead trader, the minimum is the same with minCopyAmt minCopyRatio String Minimum ratio per order when you are using copy mode ratio_copy maxCopyRatio String Maximum ratio per order when you are using copy mode ratio_copy maxTpRatio String Maximum ratio of taking profit per order, the minimum is 0 maxSlRatio String Maximum ratio of stopping loss per order, the minimum is 0 GET / LEAD TRADER RANKS Public endpoint. Retrieve lead trader ranks. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-lead-traders > Request example Copy to ClipboardGET /api/v5/copytrading/public-lead-traders?instType=SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value sortType String No Sort type overview: overview, the default value pnl: profit and loss aum: assets under management win_ratio: win ratio pnl_ratio: pnl ratio current_copy_trader_pnl: current copy trader pnl state String No Lead trader state 0: All lead traders, the default, including vacancy and non-vacancy 1: lead traders who have vacancy minLeadDays String No Minimum lead days 1: 7 days 2: 30 days 3: 90 days 4: 180 days minAssets String No Minimum assets in USDT maxAssets String No Maximum assets in USDT minAum String No Minimum assets in USDT under management. maxAum String No Maximum assets in USDT under management. dataVer String No Data version. It is 14 numbers. e.g. 20231010182400. Generally, it is used for pagination A new version will be generated every 10 minutes. Only last 5 versions are stored The default is latest version. If it is not exist, error will not be throwed and the latest version will be used. page String No Page for pagination limit String No Number of results per request. The maximum is 20; the default is 10 > Response example Copy to Clipboard{ "code": "0", "data": [ { "dataVer": "20231129213200", "ranks": [ { "accCopyTraderNum": "3536", "aum": "1509265.3238761567721365", "ccy": "USDT", "copyState": "0", "copyTraderNum": "999", "leadDays": "156", "maxCopyTraderNum": "1000", "nickName": "Crypto to the moon", "pnl": "48805.1105999999972258", "pnlRatio": "1.6898", "pnlRatios": [ { "beginTs": "1701187200000", "pnlRatio": "1.6744" }, { "beginTs": "1700755200000", "pnlRatio": "1.649" } ], "portLink": "https://static.okx.com/cdn/okex/users/headimages/20230624/f49a683aaf5949ea88b01bbc771fb9fc", "traderInsts": [ "ICP-USDT-SWAP", "MINA-USDT-SWAP" ], "uniqueCode": "540D011FDACCB47A", "winRatio": "0.6957" } ], "totalPage": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description dataVer String Data version totalPage String Total number of pages ranks Array The rank information of lead traders > aum String assets under management > copyState String Current copy state 0: non-copy, 1: copy > maxCopyTraderNum String Maximum number of copy traders > copyTraderNum String Current number of copy traders > accCopyTraderNum String Accumulated number of copy traders > portLink String Portrait link > nickName String Nick name > ccy String Margin currency > uniqueCode String Lead trader unique code > winRatio String Win ratio, 0.1 represents 10% > leadDays String Lead days > traderInsts Array Contract list which lead trader is leading > pnl String Pnl (in USDT) of last 90 days. > pnlRatio String Pnl ratio of last 90 days. 0.1 represents 10% > pnlRatios Array Pnl ratios >> beginTs String Begin time of pnl ratio on that day >> pnlRatio String Pnl ratio on that day GET / LEAD TRADER WEEKLY PNL Public endpoint. Retrieve lead trader weekly pnl. Results are returned in counter chronological order. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-weekly-pnl > Request example Copy to ClipboardGET /api/v5/copytrading/public-weekly-pnl?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginTs": "1701014400000", "pnl": "-2.8428", "pnlRatio": "-0.0106" }, { "beginTs": "1700409600000", "pnl": "81.8446", "pnlRatio": "0.3036" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description beginTs String Begin time of pnl ratio on that week pnl String Pnl on that week pnlRatio String Pnl ratio on that week GET / LEAD TRADER DAILY PNL Public endpoint. Retrieve lead trader daily pnl. Results are returned in counter chronological order. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-pnl > Request example Copy to ClipboardGET /api/v5/copytrading/public-pnl?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD&lastDays=1 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC lastDays String Yes Last days 1: last 7 days 2: last 30 days 3: last 90 days 4: last 365 days > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginTs": "1701100800000", "pnl": "97.3309", "pnlRatio": "0.3672" }, { "beginTs": "1701014400000", "pnl": "96.7755", "pnlRatio": "0.3651" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description beginTs String Begin time of pnl ratio on that day pnl String Pnl on that day pnlRatio String Pnl ratio on that day GET / LEAD TRADER STATS Public endpoint. Key data related to lead trader performance. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-stats > Request example Copy to ClipboardGET /api/v5/copytrading/public-stats?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD&lastDays=1 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC lastDays String Yes Last days 1: last 7 days 2: last 30 days 3: last 90 days 4: last 365 days > Response example Copy to Clipboard{ "code": "0", "data": [ { "avgSubPosNotional": "213.1038", "ccy": "USDT", "curCopyTraderPnl": "96.8071", "investAmt": "265.095252476476294", "lossDays": "1", "profitDays": "2", "winRatio": "0.6667" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description winRatio String Win ratio profitDays String Profit days lossDays String Loss days curCopyTraderPnl String Current copy trader pnl (USDT) avgSubPosNotional String Average lead position notional (USDT) investAmt String Investment amount (USDT) ccy String Margin currency GET / LEAD TRADER CURRENCY PREFERENCES Public endpoint. The most frequently traded crypto of this lead trader. Results are sorted by ratio from large to small. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-preference-currency > Request example Copy to ClipboardGET /api/v5/copytrading/public-preference-currency?instType=SWAP&uniqueCode=CB4594A3BB5D3538 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "ETH", "ratio": "0.8881" }, { "ccy": "BTC", "ratio": "0.0666" }, { "ccy": "YFII", "ratio": "0.0453" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency ratio String Ratio. 0.1 represents 10% GET / LEAD TRADER CURRENT LEAD POSITIONS Public endpoint. Get current leading positions of lead trader RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-current-subpositions > Request example Copy to ClipboardGET /api/v5/copytrading/public-current-subpositions?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value. uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "instId": "ETH-USDT-SWAP", "instType": "SWAP", "lever": "5", "margin": "16.23304", "markPx": "2027.31", "mgnMode": "isolated", "openAvgPx": "2029.13", "openTime": "1701144639417", "posSide": "short", "subPos": "4", "subPosId": "649582930998104064", "uniqueCode": "D9ADEAB33AE9EABD", "upl": "0.0728", "uplRatio": "0.0044846806266725" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead position ID posSide String Position side long short net (Long positions have positive subPos; short positions have negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openAvgPx String Average open price openTime String Open time subPos String Quantity of positions instType String Instrument type margin String Margin upl String Unrealized profit and loss uplRatio String Unrealized profit and loss ratio markPx String Latest mark price, only applicable to contract uniqueCode String Lead trader unique code ccy String Currency GET / LEAD TRADER LEAD POSITION HISTORY Public endpoint. Retrieve the lead trader completed leading position of the last 3 months. Returns reverse chronological order with subPosId. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-subpositions-history > Request example Copy to ClipboardGET /api/v5/copytrading/public-subpositions-history?instType=SWAP&uniqueCode=9A8534AB09862774 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value. uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "closeAvgPx": "28385.9", "closeTime": "1697709137162", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "20", "margin": "4.245285", "mgnMode": "isolated", "openAvgPx": "28301.9", "openTime": "1697698048031", "pnl": "0.252", "pnlRatio": "0.05935997229868", "posSide": "long", "subPos": "3", "subPosId": "635126416883355648", "uniqueCode": "9A8534AB09862774" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead position ID posSide String Position side long short net (long position has positive subPos; short position has negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openAvgPx String Average open price openTime String Time of opening subPos String Quantity of positions closeTime String Time of closing position closeAvgPx String Average price of closing position pnl String Profit and loss pnlRatio String P&L ratio instType String Instrument type margin String Margin ccy String Currency uniqueCode String Lead trader unique code GET / COPY TRADERS Public endpoint. Retrieve copy trader coming from certain lead trader. Return according to pnl from high to low RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/copytrading/public-copy-traders > Request example Copy to ClipboardGET /api/v5/copytrading/public-copy-traders?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC limit String No Number of results per request. The maximum is 100; The default is 100 > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "copyTotalPnl": "2060.12242", "copyTraderNumChg": "1", "copyTraderNumChgRatio": "0.5", "copyTraders": [ { "beginCopyTime": "1686125051000", "nickName": "bre***@gmail.com", "pnl": "1076.77388", "portLink": "" }, { "beginCopyTime": "1698133811000", "nickName": "MrYanDao505", "pnl": "983.34854", "portLink": "https://static.okx.com/cdn/okex/users/headimages/20231010/fd31f45e99fe41f7bb219c0b53ae0ada" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description copyTotalPnl String Total copy trader profit and loss ccy String The currency name of profit and loss copyTraderNumChg String Number change in last 7 days copyTraderNumChgRatio String Ratio change in last 7 days copyTraders String Copy trader information > beginCopyTime String Begin copying time. Unix timestamp format in milliseconds, e.g.1597026383085 > nickName String Nick name > portLink String Copy trader portrait link > pnl String Copy trading profit and loss GET / LEAD TRADER RANKS (PRIVATE) Private endpoint. Retrieve lead trader ranks. For requests from the ND sub-account, under the same ND broker, this private endpoint can return ND lead trader information that the related public endpoint can't return. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/lead-traders > Request example Copy to ClipboardGET /api/v5/copytrading/lead-traders?instType=SWAP REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value sortType String No Sort type overview: overview, the default value pnl: profit and loss aum: assets under management win_ratio: win ratio pnl_ratio: pnl ratio current_copy_trader_pnl: current copy trader pnl state String No Lead trader state 0: All lead traders, the default, including vacancy and non-vacancy 1: lead traders who have vacancy minLeadDays String No Minimum lead days 1: 7 days 2: 30 days 3: 90 days 4: 180 days minAssets String No Minimum assets in USDT maxAssets String No Maximum assets in USDT minAum String No Minimum assets in USDT under management. maxAum String No Maximum assets in USDT under management. dataVer String No Data version. It is 14 numbers. e.g. 20231010182400. Generally, it is used for pagination A new version will be generated every 10 minutes. Only last 5 versions are stored The default is latest version. If it is not exist, error will not be throwed and the latest version will be used. page String No Page for pagination limit String No Number of results per request. The maximum is 20; the default is 10 > Response example Copy to Clipboard{ "code": "0", "data": [ { "dataVer": "20231129213200", "ranks": [ { "chanType": "OKX", "accCopyTraderNum": "3536", "aum": "1509265.3238761567721365", "ccy": "USDT", "copyState": "0", "copyTraderNum": "999", "leadDays": "156", "maxCopyTraderNum": "1000", "nickName": "Crypto to the moon", "pnl": "48805.1105999999972258", "pnlRatio": "1.6898", "pnlRatios": [ { "beginTs": "1701187200000", "pnlRatio": "1.6744" }, { "beginTs": "1700755200000", "pnlRatio": "1.649" } ], "portLink": "https://static.okx.com/cdn/okex/users/headimages/20230624/f49a683aaf5949ea88b01bbc771fb9fc", "traderInsts": [ "ICP-USDT-SWAP", "MINA-USDT-SWAP" ], "uniqueCode": "540D011FDACCB47A", "winRatio": "0.6957" } ], "totalPage": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description dataVer String Data version totalPage String Total number of pages ranks Array The rank information of lead traders > chanType String Channel type OKX ND > aum String assets under management > copyState String Current copy state 0: non-copy, 1: copy > maxCopyTraderNum String Maximum number of copy traders > copyTraderNum String Current number of copy traders > accCopyTraderNum String Accumulated number of copy traders > portLink String Portrait link > nickName String Nick name > ccy String Margin currency > uniqueCode String Lead trader unique code > winRatio String Win ratio, 0.1 represents 10% > leadDays String Lead days > traderInsts Array Contract list which lead trader is leading > pnl String Pnl (in USDT) of last 90 days. > pnlRatio String Pnl ratio of last 90 days. 0.1 represents 10% > pnlRatios Array Pnl ratios >> beginTs String Begin time of pnl ratio on that day >> pnlRatio String Pnl ratio on that day GET / LEAD TRADER WEEKLY PNL (PRIVATE) Private endpoint. Retrieve lead trader weekly pnl. Results are returned in counter chronological order. For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/weekly-pnl > Request example Copy to ClipboardGET /api/v5/copytrading/weekly-pnl?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginTs": "1701014400000", "pnl": "-2.8428", "pnlRatio": "-0.0106" }, { "beginTs": "1700409600000", "pnl": "81.8446", "pnlRatio": "0.3036" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description beginTs String Begin time of pnl ratio on that week pnl String Pnl on that week pnlRatio String Pnl ratio on that week GET / LEAD TRADER DAILY PNL (PRIVATE) Private endpoint. Retrieve lead trader daily pnl. Results are returned in counter chronological order. For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/pnl > Request example Copy to ClipboardGET /api/v5/copytrading/pnl?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD&lastDays=1 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC lastDays String Yes Last days 1: last 7 days 2: last 30 days 3: last 90 days 4: last 365 days > Response example Copy to Clipboard{ "code": "0", "data": [ { "beginTs": "1701100800000", "pnl": "97.3309", "pnlRatio": "0.3672" }, { "beginTs": "1701014400000", "pnl": "96.7755", "pnlRatio": "0.3651" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description beginTs String Begin time of pnl ratio on that week pnl String Pnl on that week pnlRatio String Pnl ratio on that week GET / LEAD TRADER STATS (PRIVATE) Private endpoint. Key data related to lead trader performance. For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/stats > Request example Copy to ClipboardGET /api/v5/copytrading/stats?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD&lastDays=1 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC lastDays String Yes Last days 1: last 7 days 2: last 30 days 3: last 90 days 4: last 365 days > Response example Copy to Clipboard{ "code": "0", "data": [ { "avgSubPosNotional": "213.1038", "ccy": "USDT", "curCopyTraderPnl": "96.8071", "investAmt": "265.095252476476294", "lossDays": "1", "profitDays": "2", "winRatio": "0.6667" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description winRatio String Win ratio profitDays String Profit days lossDays String Loss days curCopyTraderPnl String Current copy trader pnl (USDT) avgSubPosNotional String Average lead position notional (USDT) investAmt String Investment amount (USDT) ccy String Margin currency GET / LEAD TRADER CURRENCY PREFERENCES (PRIVATE) Private endpoint. The most frequently traded crypto of this lead trader. Results are sorted by ratio from large to small. For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/preference-currency > Request example Copy to ClipboardGET /api/v5/copytrading/preference-currency?instType=SWAP&uniqueCode=CB4594A3BB5D3538 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "ETH", "ratio": "0.8881" }, { "ccy": "BTC", "ratio": "0.0666" }, { "ccy": "YFII", "ratio": "0.0453" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency ratio String Ratio. 0.1 represents 10% GET / LEAD TRADER CURRENT LEAD POSITIONS (PRIVATE) Private endpoint. Get current leading positions of lead trader For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/performance-current-subpositions > Request example Copy to ClipboardGET /api/v5/copytrading/performance-current-subpositions?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value. uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 500. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "instId": "ETH-USDT-SWAP", "instType": "SWAP", "lever": "5", "margin": "16.23304", "markPx": "2027.31", "mgnMode": "isolated", "openAvgPx": "2029.13", "openTime": "1701144639417", "posSide": "short", "subPos": "4", "subPosId": "649582930998104064", "uniqueCode": "D9ADEAB33AE9EABD", "upl": "0.0728", "uplRatio": "0.0044846806266725" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead position ID posSide String Position side long short net (Long positions have positive subPos; short positions have negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openAvgPx String Average open price openTime String Open time subPos String Quantity of positions instType String Instrument type margin String Margin upl String Unrealized profit and loss uplRatio String Unrealized profit and loss ratio markPx String Latest mark price, only applicable to contract uniqueCode String Lead trader unique code ccy String Currency GET / LEAD TRADER LEAD POSITION HISTORY (PRIVATE) Private endpoint. Retrieve the lead trader completed leading position of the last 3 months. Returns reverse chronological order with subPosId. For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/performance-subpositions-history > Request example Copy to ClipboardGET /api/v5/copytrading/performance-subpositions-history?instType=SWAP&uniqueCode=9A8534AB09862774 REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value. uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC after String No Pagination of data to return records earlier than the requested subPosId. before String No Pagination of data to return records newer than the requested subPosId. limit String No Number of results per request. Maximum is 100. Default is 100. > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "closeAvgPx": "28385.9", "closeTime": "1697709137162", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "lever": "20", "margin": "4.245285", "mgnMode": "isolated", "openAvgPx": "28301.9", "openTime": "1697698048031", "pnl": "0.252", "pnlRatio": "0.05935997229868", "posSide": "long", "subPos": "3", "subPosId": "635126416883355648", "uniqueCode": "9A8534AB09862774" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP subPosId String Lead position ID posSide String Position side long short net (long position has positive subPos; short position has negative subPos) mgnMode String Margin mode. cross isolated lever String Leverage openAvgPx String Average open price openTime String Time of opening subPos String Quantity of positions closeTime String Time of closing position closeAvgPx String Average price of closing position pnl String Profit and loss pnlRatio String P&L ratio instType String Instrument type margin String Margin ccy String Currency uniqueCode String Lead trader unique code GET / COPY TRADERS (PRIVATE) Private endpoint. Retrieve copy trader coming from certain lead trader. Return according to pnl from high to low For requests from the ND sub-account, under the same ND broker, uniqueCode is supported for ND lead trader unique code by this endpoint, but the related public endpoint does not support it. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/copytrading/copy-traders > Request example Copy to ClipboardGET /api/v5/copytrading/copy-traders?instType=SWAP&uniqueCode=D9ADEAB33AE9EABD REQUEST PARAMETERS Parameter Type Required Description instType String No Instrument type SWAP, the default value uniqueCode String Yes Lead trader unique code A combination of case-sensitive alphanumerics, all numbers and the length is 16 characters, e.g. 213E8C92DC61EFAC limit String No Number of results per request. The maximum is 100; The default is 100 > Response example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "copyTotalPnl": "2060.12242", "copyTraderNumChg": "1", "copyTraderNumChgRatio": "0.5", "copyTraders": [ { "beginCopyTime": "1686125051000", "nickName": "bre***@gmail.com", "pnl": "1076.77388", "portLink": "" }, { "beginCopyTime": "1698133811000", "nickName": "MrYanDao505", "pnl": "983.34854", "portLink": "https://static.okx.com/cdn/okex/users/headimages/20231010/fd31f45e99fe41f7bb219c0b53ae0ada" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description copyTotalPnl String Total copy trader profit and loss ccy String The currency name of profit and loss copyTraderNumChg String Number change in last 7 days copyTraderNumChgRatio String Ratio change in last 7 days copyTraders String Copy trader information > beginCopyTime String Begin copying time. Unix timestamp format in milliseconds, e.g.1597026383085 > nickName String Nick name > portLink String Copy trader portrait link > pnl String Copy trading profit and loss WS / COPY TRADING NOTIFICATION CHANNEL As a copy trader, receive push notification of copy trading. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "copytrading-notification", "instType": "SWAP" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name copytrading-notification > instType String Yes Instrument type SWAP > instId String No Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "copytrading-notification", "instType": "SWAP" }, "connId": "aa993428" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"copytrading-notification\", \"instType\" : \"FUTURES\"}]}", "connId":"a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SWAP > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "copytrading-notification", "instType": "SWAP", "uid": "116488283046944768" }, "data": [ { "avgPx": "", "ccy": "USDT", "copyTotalAmt": "10", "infoType": "8", "instId": "ETH-USDT-SWAP", "instType": "SWAP", "lever": "", "maxLeadTraderNum": "", "minNotional": "", "posSide": "", "rmThold": "", "side": "", "slTotalAmt": "", "slippageRatio": "", "subPosId": "", "uniqueCode": "716DDB411E9673F9" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type data Array Subscribed data > instType String Instrument type > infoType String Information type 1: open copy position successfully for complete fill 2: close copy position for complete fill 3: more than customized total stop loss amount 4: the lead trader cancels copy trader 5. copy trading failed, insufficient account balance 6. copy trading failed for fixed amount mode, copy amount less than the value of one contract 7. copy trading failed for ratio copy mode, the number of copying less than 1 cont 8. copy trading failed, more than customized copy total amount 9. copy trading failed due to slippage protection 12. fail to close copy position. > subPosId String Copy position ID > uniqueCode String Lead trader unique code > instId String Instrument ID > lever String leverage > avgPx String Average filled price > ccy String Currency > side String Side buy sell > posSide String Position side long short net > slTotalAmt String Total stop loss for the trader > rmThold String Lead trader can remove copy trader if balance of copy trader less than this value. > minNotional String A contract value in USDT. > copyTotalAmt String Copy total amount > slippageRatio String Slippage ratio > maxLeadTraderNum String Maximum lead trading every day. WS / LEAD TRADING NOTIFICATION CHANNEL The notification when failing to lead trade. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "copytrading-lead-notification", "instType": "SWAP" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name copytrading-lead-notification > instType String Yes Instrument type SWAP > instId String No Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "copytrading-lead-notification", "instType": "SWAP" }, "connId": "aa993428" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"copytrading-lead-notification\", \"instType\" : \"FUTURES\"}]}", "connId":"a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SWAP > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example: Copy to Clipboard{ "arg": { "channel": "copytrading-lead-notification", "instType": "SWAP", "uid": "525627088439549953" }, "data": [ { "infoType": "2", "instId": "", "instType": "SWAP", "maxLeadTraderNum": "3", "minLeadEq": "", "posSide": "", "side": "", "subPosId": "667695035433385984", "uniqueCode": "3AF72F63E3EAD701" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > instType String Instrument type data Array Subscribed data > instType String Instrument type > infoType String Information type 1: lead trading failed due to touch max position limitation 2: lead trading failed due to touch the maximum daily number of lead trading 3: lead trading failed due to your USDT equity less than the minimum USDT equity of lead trading > subPosId String Lead position ID > uniqueCode String Lead trader unique code > instId String Instrument ID > side String Side buy sell > posSide String Position side long short net > maxLeadTraderNum String Maximum daily number of lead trading. > minLeadEq String Minimum USDT equity of lead trading. MARKET DATA The API endpoints of Market Data do not require authentication. GET / TICKERS Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/tickers > Request Example Copy to ClipboardGET /api/v5/market/tickers?instType=SWAP Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours result = marketDataAPI.get_tickers( instType="SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SPOT SWAP FUTURES OPTION uly String No Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"LTC-USD-SWAP", "last":"9999.99", "lastSz":"1", "askPx":"9999.99", "askSz":"11", "bidPx":"8888.88", "bidSz":"5", "open24h":"9000", "high24h":"10000", "low24h":"8888.88", "volCcy24h":"2222", "vol24h":"2222", "sodUtc0":"0.1", "sodUtc8":"0.1", "ts":"1597026383085" }, { "instType":"SWAP", "instId":"BTC-USD-SWAP", "last":"9999.99", "lastSz":"1", "askPx":"9999.99", "askSz":"11", "bidPx":"8888.88", "bidSz":"5", "open24h":"9000", "high24h":"10000", "low24h":"8888.88", "volCcy24h":"2222", "vol24h":"2222", "sodUtc0":"0.1", "sodUtc8":"0.1", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID last String Last traded price lastSz String Last traded size. 0 represents there is no trading volume askPx String Best ask price askSz String Best ask size bidPx String Best bid price bidSz String Best bid size open24h String Open price in the past 24 hours high24h String Highest price in the past 24 hours low24h String Lowest price in the past 24 hours volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. sodUtc0 String Open price in the UTC 0 sodUtc8 String Open price in the UTC 8 ts String Ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / TICKER Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/ticker > Request Example Copy to ClipboardGET /api/v5/market/ticker?instId=BTC-USD-SWAP Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the latest price snapshot, best bid/ask price, and trading volume in the last 24 hours result = marketDataAPI.get_ticker( instId="BTC-USD-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"BTC-USD-SWAP", "last":"9999.99", "lastSz":"0.1", "askPx":"9999.99", "askSz":"11", "bidPx":"8888.88", "bidSz":"5", "open24h":"9000", "high24h":"10000", "low24h":"8888.88", "volCcy24h":"2222", "vol24h":"2222", "sodUtc0":"2222", "sodUtc8":"2222", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID last String Last traded price lastSz String Last traded size. 0 represents there is no trading volume askPx String Best ask price askSz String Best ask size bidPx String Best bid price bidSz String Best bid size open24h String Open price in the past 24 hours high24h String Highest price in the past 24 hours low24h String Lowest price in the past 24 hours volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. sodUtc0 String Open price in the UTC 0 sodUtc8 String Open price in the UTC 8 ts String Ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET / ORDER BOOK Retrieve order book of the instrument. RATE LIMIT: 40 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/books > Request Example Copy to ClipboardGET /api/v5/market/books?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve order book of the instrument result = marketDataAPI.get_orderbook( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT sz String No Order book depth per side. Maximum 400, e.g. 400 bids + 400 asks Default returns to 1 depth data > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "asks": [ [ "41006.8", "0.60038921", "0", "1" ] ], "bids": [ [ "41006.3", "0.30178218", "0", "2" ] ], "ts": "1629966436396" } ] } RESPONSE PARAMETERS Parameter Type Description asks Array Order book on sell side bids Array Order book on buy side ts String Order book generation time An example of the array of asks and bids values: ["411.8", "10", "0", "4"] - "411.8" is the depth price - "10" is the quantity at the price (number of contracts for derivatives, quantity in base currency for Spot and Spot Margin) - "0" is part of a deprecated feature and it is always "0" - "4" is the number of orders at the price. GET / FULL ORDER BOOK Retrieve order book of the instrument. The data will be updated once a second. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/books-full > Request Example Copy to ClipboardGET /api/v5/market/books-full?instId=BTC-USDT&sz=1 REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT sz String No Order book depth per side. Maximum 5000, e.g. 5000 bids + 5000 asks Default returns to 1 depth data. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "asks": [ [ "41006.8", "0.60038921", "1" ] ], "bids": [ [ "41006.3", "0.30178218", "2" ] ], "ts": "1629966436396" } ] } RESPONSE PARAMETERS Parameter Type Description asks Array Order book on sell side bids Array Order book on buy side ts String Order book generation time An example of the array of asks and bids values: ["411.8", "10", "4"] - "411.8" is the depth price - "10" is the quantity at the price (number of contracts for derivatives, quantity in base currency for Spot and Spot Margin) - "4" is the number of orders at the price. GET / CANDLESTICKS Retrieve the candlestick charts. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. RATE LIMIT: 40 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/candles > Request Example Copy to ClipboardGET /api/v5/market/candles?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the candlestick charts result = marketDataAPI.get_candlesticks( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT bar String No Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening price k-line: [/6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually limit String No Number of results per request. The maximum is 300. The default is 100. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "8422410", "22698348.04828491", "12698348.04828491", "0" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "24912403", "67632347.24399722", "37632347.24399722", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price vol String Trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. volCcy String Trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. volCcyQuote String Trading volume, the value is the quantity in quote currency e.g. The unit is USDT for BTC-USDT and BTC-USDT-SWAP; The unit is USD for BTC-USD-SWAP confirm String The state of candlesticks. 0: K line is uncompleted 1: K line is completed The first candlestick data may be incomplete, and should not be polled repeatedly. The data returned will be arranged in an array like this: [ts,o,h,l,c,vol,volCcy,volCcyQuote,confirm]. For the current cycle of k-line data, when there is no transaction, the opening high and closing low default take the closing price of the previous cycle. GET / CANDLESTICKS HISTORY Retrieve history candlestick charts from recent years(It is last 3 months supported for 1s candlestick). RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/history-candles > Request Example Copy to ClipboardGET /api/v5/market/history-candles?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve history candlestick charts from recent years result = marketDataAPI.get_history_candlesticks( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m e.g. [1s/1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "8422410", "22698348.04828491", "12698348.04828491", "1" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "24912403", "67632347.24399722", "37632347.24399722", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String Highest price l String Lowest price c String Close price vol String Trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. volCcy String Trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. volCcyQuote String Trading volume, the value is the quantity in quote currency e.g. The unit is USDT for BTC-USDT and BTC-USDT-SWAP; The unit is USD for BTC-USD-SWAP confirm String The state of candlesticks 0: K line is uncompleted 1: K line is completed The data returned will be arranged in an array like this: [ts,o,h,l,c,vol,volCcy,volCcyQuote,confirm] 1s candle is not supported by OPTION, but it is supported by other business lines (SPOT, MARGIN, FUTURES and SWAP) GET / TRADES Retrieve the recent transactions of an instrument. RATE LIMIT: 100 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/trades > Request Example Copy to ClipboardGET /api/v5/market/trades?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the recent transactions of an instrument result = marketDataAPI.get_trades( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT limit String No Number of results per request. The maximum is 500; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USDT", "side": "sell", "sz": "0.00001", "px": "29963.2", "tradeId": "242720720", "ts": "1654161646974" }, { "instId": "BTC-USDT", "side": "sell", "sz": "0.00001", "px": "29964.1", "tradeId": "242720719", "ts": "1654161641568" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID tradeId String Trade ID px String Trade price sz String Trade quantity For spot trading, the unit is base currency side String Trade side buy sell ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. Up to 500 most recent historical public transaction data can be retrieved. GET / TRADES HISTORY Retrieve the recent transactions of an instrument from the last 3 months with pagination. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/history-trades > Request Example Copy to ClipboardGET /api/v5/market/history-trades?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the recent transactions of an instrument from the last 3 months with pagination result = marketDataAPI.get_history_trades( instId="BTC-USD-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT type String No Pagination Type 1: tradeId 2: timestamp The default is 1 after String No Pagination of data to return records earlier than the requested tradeId or ts. before String No Pagination of data to return records newer than the requested tradeId. Do not support timestamp for pagination. The latest data will be returned when using before individually limit String No Number of results per request. The maximum and default both are 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USDT", "side": "sell", "sz": "0.00001", "px": "29963.2", "tradeId": "242720720", "ts": "1654161646974" }, { "instId": "BTC-USDT", "side": "sell", "sz": "0.00001", "px": "29964.1", "tradeId": "242720719", "ts": "1654161641568" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID tradeId String Trade ID px String Trade price sz String Trade quantity side String Trade side buy sell ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET / OPTION TRADES BY INSTRUMENT FAMILY Retrieve the recent transactions of an instrument under same instFamily. The maximum is 100. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/option/instrument-family-trades > Request Example Copy to ClipboardGET /api/v5/market/option/instrument-family-trades?instFamily=BTC-USD REQUEST PARAMETERS Parameter Type Required Description instFamily String Yes Instrument family, e.g. BTC-USD Applicable to OPTION > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "vol24h": "103381", "tradeInfo": [ { "instId": "BTC-USD-221111-17750-C", "side": "sell", "sz": "1", "px": "0.0075", "tradeId": "20", "ts": "1668090715058" }, { "instId": "BTC-USD-221111-17750-C", "side": "sell", "sz": "91", "px": "0.01", "tradeId": "19", "ts": "1668090421062" } ], "optType": "C" }, { "vol24h": "144499", "tradeInfo": [ { "instId": "BTC-USD-230127-10000-P", "side": "sell", "sz": "82", "px": "0.019", "tradeId": "23", "ts": "1668090967057" }, { "instId": "BTC-USD-221111-16250-P", "side": "sell", "sz": "102", "px": "0.0045", "tradeId": "24", "ts": "1668090885050" } ], "optType": "P" } ] } RESPONSE PARAMETERS Parameter Type Description vol24h String 24h trading volume, with a unit of contract. optType String Option type, C: Call P: Put tradeInfo Array The list trade data > instId String The Instrument ID > tradeId String Trade ID > px String Trade price > sz String Trade quantity > side String Trade side buy sell > ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET / OPTION TRADES The maximum is 100. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/option-trades > Request Example Copy to ClipboardGET /api/v5/public/option-trades?instFamily=BTC-USD REQUEST PARAMETERS Parameter Type Required Description instId String Conditional Instrument ID, e.g. BTC-USD-221230-4000-C, Either instId or instFamily is required. If both are passed, instId will be used. instFamily String Conditional Instrument family, e.g. BTC-USD optType String No Option type, C: Call P: put > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fillVol": "0.24415013671875", "fwdPx": "16676.907614127158", "idxPx": "16667", "instFamily": "BTC-USD", "instId": "BTC-USD-221230-16600-P", "markPx": "0.006308943261227884", "optType": "P", "px": "0.005", "side": "sell", "sz": "30", "tradeId": "65", "ts": "1672225112048" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID instFamily String Instrument family tradeId String Trade ID px String Trade price sz String Trade quantity side String Trade side buy sell optType String Option type, C: Call P: Put fillVol String Implied volatility while trading (Correspond to trade price) fwdPx String Forward price while trading idxPx String Index price while trading markPx String Mark price while trading ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET / 24H TOTAL VOLUME The 24-hour trading volume is calculated on a rolling basis. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/platform-24-volume > Request Example Copy to ClipboardGET /api/v5/market/platform-24-volume Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve 24 total volume result = marketDataAPI.get_volume() print(result) > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "volCny": "230900886396766", "volUsd": "34462818865189", "ts": "1657856040389" } ] } RESPONSE PARAMETERS Parameter Type Description volUsd String 24-hour total trading volume from the order book trading in "USD" volCny String 24-hour total trading volume from the order book trading in "CNY" ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / CALL AUCTION DETAILS Retrieve call auction details. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/call-auction-details > Request Example Copy to ClipboardGET /api/v5/market/call-auction-details?instId=ONDO-USDC REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "ONDO-USDC", "unmatchedSz": "9988764", "eqPx": "0.6", "matchedSz": "44978", "state": "continuous_trading", "auctionEndTime": "1726542000000", "ts": "1726542000007" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID eqPx String Equilibrium price matchedSz String Matched size for both buy and sell The unit is in base currency unmatchedSz String Unmatched size auctionEndTime String Call auction end time. Unix timestamp in milliseconds. state String Trading state of the symbol call_auction continuous_trading ts String Data generation time. Unix timestamp in millieseconds. During call auction, users can get the updates of equilibrium price, matched size, unmatched size, and auction end time. The data will be updated around once a second. The endpoint returns the actual open price, matched size, and unmatched size when the call auction ends. For symbols that never go through call auction, the endpoint will also return results but with state always as `continuous_trading` and other fields as 0 or empty. WS / TICKERS CHANNEL Retrieve the last traded price, bid price, ask price and 24-hour trading volume of instruments. The fastest rate is 1 update/100ms. There will be no update if the event is not triggered. The events which can trigger update: trade, the change on best ask/bid. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "tickers", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name tickers > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "tickers", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"tickers\", \"instId\" : \"LTC-USD-200327\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "tickers", "instId": "BTC-USDT" }, "data": [ { "instType": "SPOT", "instId": "BTC-USDT", "last": "9999.99", "lastSz": "0.1", "askPx": "9999.99", "askSz": "11", "bidPx": "8888.88", "bidSz": "5", "open24h": "9000", "high24h": "10000", "low24h": "8888.88", "volCcy24h": "2222", "vol24h": "2222", "sodUtc0": "2222", "sodUtc8": "2222", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID > last String Last traded price > lastSz String Last traded size. 0 represents there is no trading volume > askPx String Best ask price > askSz String Best ask size > bidPx String Best bid price > bidSz String Best bid size > open24h String Open price in the past 24 hours > high24h String Highest price in the past 24 hours > low24h String Lowest price in the past 24 hours > volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. > vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > sodUtc0 String Open price in the UTC 0 > sodUtc8 String Open price in the UTC 8 > ts String Ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 WS / CANDLESTICKS CHANNEL Retrieve the candlesticks data of an instrument. the push frequency is the fastest interval 1 second push the data. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "candle1D", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name candle3M candle1M candle1W candle1D candle2D candle3D candle5D candle12H candle6H candle4H candle2H candle1H candle30m candle15m candle5m candle3m candle1m candle1s candle3Mutc candle1Mutc candle1Wutc candle1Dutc candle2Dutc candle3Dutc candle5Dutc candle12Hutc candle6Hutc > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "candle1D", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"candle1D\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String yes channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "candle1D", "instId": "BTC-USDT" }, "data": [ [ "1597026383085", "8533.02", "8553.74", "8527.17", "8548.26", "45247", "529.5858061", "5529.5858061", "0" ] ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 > o String Open price > h String highest price > l String Lowest price > c String Close price > vol String Trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > volCcy String Trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. > volCcyQuote String Trading volume, the value is the quantity in quote currency e.g. The unit is USDT for BTC-USDT and BTC-USDT-SWAP The unit is USD for BTC-USD-SWAP > confirm String The state of candlesticks 0: K line is uncompleted 1: K line is completed WS / TRADES CHANNEL Retrieve the recent trades data. Data will be pushed whenever there is a trade. Every update may aggregate multiple trades. The message is sent only once per taker order, per filled price. The count field is used to represent the number of aggregated matches. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "trades", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name trades > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "trades", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"trades\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "trades", "instId": "BTC-USDT" }, "data": [ { "instId": "BTC-USDT", "tradeId": "130639474", "px": "42219.9", "sz": "0.12060306", "side": "buy", "ts": "1630048897897", "count": "3" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instId String Instrument ID, e.g. BTC-USDT > tradeId String The last trade ID in the trades aggregation > px String Trade price > sz String Trade size > side String Trade direction buy sell > ts String Filled time, Unix timestamp format in milliseconds, e.g. 1597026383085 > count String The count of trades aggregated Aggregation function description: 1. The system will send only one message per taker order, per filled price. The `count` field will be used to represent the number of aggregated matches. 2. The `tradeId` field in the message becomes the last trade ID in the aggregation. 3. When the `count` = 1, it means the taker order matches only one maker order with the specific price. 4. When the `count` > 1, it means the taker order matches multiple maker orders with the same price. For example, if `tradeId` = 123 and `count` = 3, it means the message aggregates the trades of `tradeId` = 123, 122, and 121. Maker side has filled multiple orders. 5. Users can use this information to compare with data from the `trades-all` channel. 6. Order book and the aggregated trades data are still published sequentially. WS / ALL TRADES CHANNEL Retrieve the recent trades data. Data will be pushed whenever there is a trade. Every update contain only one trade. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "trades-all", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name trades-all > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "trades-all", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"trades-all\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "trades-all", "instId": "BTC-USDT" }, "data": [ { "instId": "BTC-USDT", "tradeId": "130639474", "px": "42219.9", "sz": "0.12060306", "side": "buy", "ts": "1630048897897" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instId String Instrument ID, e.g. BTC-USDT > tradeId String Trade ID > px String Trade price > sz String Trade size > side String Trade direction buy sell > ts String Filled time, Unix timestamp format in milliseconds, e.g. 1597026383085 WS / ORDER BOOK CHANNEL Retrieve order book data. Use books for 400 depth levels, books5 for 5 depth levels, bbo-tbt tick-by-tick 1 depth level, books50-l2-tbt tick-by-tick 50 depth levels, and books-l2-tbt for tick-by-tick 400 depth levels. * books: 400 depth levels will be pushed in the initial full snapshot. Incremental data will be pushed every 100 ms for the changes in the order book during that period of time. * books5: 5 depth levels snapshot will be pushed in the initial push. Snapshot data will be pushed every 100 ms when there are changes in the 5 depth levels snapshot. * bbo-tbt: 1 depth level snapshot will be pushed in the initial push. Snapshot data will be pushed every 10 ms when there are changes in the 1 depth level snapshot. * books-l2-tbt: 400 depth levels will be pushed in the initial full snapshot. Incremental data will be pushed every 10 ms for the changes in the order book during that period of time. * books50-l2-tbt: 50 depth levels will be pushed in the initial full snapshot. Incremental data will be pushed every 10 ms for the changes in the order book during that period of time. * The push sequence for order book channels within the same connection and trading symbols is fixed as: bbo-tbt -> books-l2-tbt -> books50-l2-tbt -> books -> books5. * Users can not simultaneously subscribe to books-l2-tbt and books50-l2-tbt/books channels for the same trading symbol. * For more details, please refer to the changelog 2024-07-17 Only API users who are VIP5 and above in trading fee tier are allowed to subscribe to "books-l2-tbt" 400 depth channels Only API users who are VIP4 and above in trading fee tier are allowed to subscribe to "books50-l2-tbt" 50 depth channels Identity verification refers to Login URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "books", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name books books5 bbo-tbt books50-l2-tbt books-l2-tbt > instId String Yes Instrument ID > Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "books", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"books\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID msg String No Error message code String No Error code connId String Yes WebSocket connection ID > Push Data Example: Full Snapshot Copy to Clipboard{ "arg": { "channel": "books", "instId": "BTC-USDT" }, "action": "snapshot", "data": [ { "asks": [ ["8476.98", "415", "0", "13"], ["8477", "7", "0", "2"], ["8477.34", "85", "0", "1"], ["8477.56", "1", "0", "1"], ["8505.84", "8", "0", "1"], ["8506.37", "85", "0", "1"], ["8506.49", "2", "0", "1"], ["8506.96", "100", "0", "2"] ], "bids": [ ["8476.97", "256", "0", "12"], ["8475.55", "101", "0", "1"], ["8475.54", "100", "0", "1"], ["8475.3", "1", "0", "1"], ["8447.32", "6", "0", "1"], ["8447.02", "246", "0", "1"], ["8446.83", "24", "0", "1"], ["8446", "95", "0", "3"] ], "ts": "1597026383085", "checksum": -855196043, "prevSeqId": -1, "seqId": 123456 } ] } > Push Data Example: Incremental Data Copy to Clipboard{ "arg": { "channel": "books", "instId": "BTC-USDT" }, "action": "update", "data": [ { "asks": [ ["8476.98", "415", "0", "13"], ["8477", "7", "0", "2"], ["8477.34", "85", "0", "1"], ["8477.56", "1", "0", "1"], ["8505.84", "8", "0", "1"], ["8506.37", "85", "0", "1"], ["8506.49", "2", "0", "1"], ["8506.96", "100", "0", "2"] ], "bids": [ ["8476.97", "256", "0", "12"], ["8475.55", "101", "0", "1"], ["8475.54", "100", "0", "1"], ["8475.3", "1", "0", "1"], ["8447.32", "6", "0", "1"], ["8447.02", "246", "0", "1"], ["8446.83", "24", "0", "1"], ["8446", "95", "0", "3"] ], "ts": "1597026383085", "checksum": -855196043, "prevSeqId": 123456, "seqId": 123457 } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID action String Push data action, incremental data or full snapshot. snapshot: full update: incremental data Array Subscribed data > asks Array Order book on sell side > bids Array Order book on buy side > ts String Order book generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 > checksum Integer Checksum, implementation details below > prevSeqId Integer Sequence ID of the last sent message. Only applicable to books, books-l2-tbt, books50-l2-tbt > seqId Integer Sequence ID of the current message, implementation details below An example of the array of asks and bids values: ["411.8", "10", "0", "4"] - "411.8" is the depth price - "10" is the quantity at the price (number of contracts for derivatives, quantity in base currency for Spot and Spot Margin) - "0" is part of a deprecated feature and it is always "0" - "4" is the number of orders at the price. If you need to subscribe to many 50 or 400 depth level channels, it is recommended to subscribe through multiple websocket connections, with each of less than 30 channels. SEQUENCE ID seqId is the sequence ID of the market data published. The set of sequence ID received by users is the same if users are connecting to the same channel through multiple websocket connections. Each instId has an unique set of sequence ID. Users can use prevSeqId and seqId to build the message sequencing for incremental order book updates. Generally the value of seqId is larger than prevSeqId. The prevSeqId in the new message matches with seqId of the previous message. The smallest possible sequence ID value is 0, except in snapshot messages where the prevSeqId is always -1. Exceptions: 1. If there are no updates to the depth for an extended period, OKX will send a message with 'asks': [], 'bids': [] to inform users that the connection is still active. seqId is the same as the last sent message and prevSeqId equals to seqId. 2. The sequence number may be reset due to maintenance, and in this case, users will receive an incremental message with seqId smaller than prevSeqId. However, subsequent messages will follow the regular sequencing rule. EXAMPLE 1. Snapshot message: prevSeqId = -1, seqId = 10 2. Incremental message 1 (normal update): prevSeqId = 10, seqId = 15 3. Incremental message 2 (no update): prevSeqId = 15, seqId = 15 4. Incremental message 3 (sequence reset): prevSeqId = 15, seqId = 3 5. Incremental message 4 (normal update): prevSeqId = 3, seqId = 5 CHECKSUM This mechanism can assist users in checking the accuracy of depth data. MERGING INCREMENTAL DATA INTO FULL DATA After subscribing to the incremental load push (such as books 400 levels) of Order Book Channel, users first receive the initial full load of market depth. After the incremental load is subsequently received, update the local full load. 1. If there is the same price, compare the size. If the size is 0, delete this depth data. If the size changes, replace the original data. 2. If there is no same price, sort by price (bid in descending order, ask in ascending order), and insert the depth information into the full load. CALCULATE CHECKSUM Use the first 25 bids and asks in the full load to form a string (where a colon connects the price and size in an ask or a bid), and then calculate the CRC32 value (32-bit signed integer). > Calculate Checksum Copy to Clipboard1. More than 25 levels of bid and ask A full load of market depth (only 2 levels of data are shown here, while 25 levels of data should actually be intercepted): Copy to Clipboard{ "bids": [ ["3366.1", "7", "0", "3"], ["3366", "6", "3", "4"] ], "asks": [ ["3366.8", "9", "10", "3"], ["3368", "8", "3", "4"] ] } Copy to ClipboardCheck string: "3366.1:7:3366.8:9:3366:6:3368:8" 2. Less than 25 levels of bid or ask A full load of market depth: Copy to Clipboard{ "bids": [ ["3366.1", "7", "0", "3"] ], "asks": [ ["3366.8", "9", "10", "3"], ["3368", "8", "3", "4"], ["3372", "8", "3", "4"] ] } Copy to ClipboardCheck string: "3366.1:7:3366.8:9:3368:8:3372:8" 1. When the bid and ask depth data exceeds 25 levels, each of them will intercept 25 levels of data, and the string to be checked is queued in a way that the bid and ask depth data are alternately arranged. Such as: bid[price:size]:ask[price:size]:bid[price:size]:ask[price:size]... 2. When the bid or ask depth data is less than 25 levels, the missing depth data will be ignored. Such as: bid[price:size]:ask[price:size]:asks[price:size]:asks[price:size]... > Push Data Example of bbo-tbt channel Copy to Clipboard{ "arg": { "channel": "bbo-tbt", "instId": "BCH-USDT-SWAP" }, "data": [ { "asks": [ [ "111.06","55154","0","2" ] ], "bids": [ [ "111.05","57745","0","2" ] ], "ts": "1670324386802", "seqId": 363996337 } ] } > Push Data Example of books5 channel Copy to Clipboard{ "arg": { "channel": "books5", "instId": "BCH-USDT-SWAP" }, "data": [ { "asks": [ ["111.06","55154","0","2"], ["111.07","53276","0","2"], ["111.08","72435","0","2"], ["111.09","70312","0","2"], ["111.1","67272","0","2"]], "bids": [ ["111.05","57745","0","2"], ["111.04","57109","0","2"], ["111.03","69563","0","2"], ["111.02","71248","0","2"], ["111.01","65090","0","2"]], "instId": "BCH-USDT-SWAP", "ts": "1670324386802", "seqId": 363996337 } ] } WS / OPTION TRADES CHANNEL Retrieve the recent trades data. Data will be pushed whenever there is a trade. Every update contain only one trade. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "option-trades", "instType": "OPTION", "instFamily": "BTC-USD" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name option-trades > instType String Yes Instrument type, OPTION > instId String Conditional Instrument ID, e.g. BTC-USD-221230-4000-C, Either instId or instFamily is required. If both are passed, instId will be used. > instFamily String Conditional Instrument family, e.g. BTC-USD > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "option-trades", "instType": "OPTION", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"statuss\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name status code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "option-trades", "instType": "OPTION", "instFamily": "BTC-USD" }, "data": [ { "fillVol": "0.5066007836914062", "fwdPx": "16469.69928595038", "idxPx": "16537.2", "instFamily": "BTC-USD", "instId": "BTC-USD-230224-18000-C", "markPx": "0.04690107010619562", "optType": "C", "px": "0.045", "side": "sell", "sz": "2", "tradeId": "38", "ts": "1672286551080" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name data Array Subscribed data > instId String Instrument ID > instFamily String Instrument family > tradeId String Trade ID > px String Trade price > sz String Trade quantity > side String Trade side buy sell > optType String Option type, C: Call P: Put > fillVol String Implied volatility while trading (Correspond to trade price) > fwdPx String Forward price while trading > idxPx String Index price while trading > markPx String Mark price while trading > ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. WS / CALL AUCTION DETAILS CHANNEL Retrieve call auction details. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "call-auction-details", "instId": "ONDO-USDC" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name call-auction-details > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "call-auction-details", "instId": "ONDO-USDC" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"trades-all\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String yes channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "call-auction-details", "instId": "ONDO-USDC" }, "data": [ { "instId": "ONDO-USDC", "unmatchedSz": "9988764", "eqPx": "0.6", "matchedSz": "44978", "state": "continuous_trading", "auctionEndTime": "1726542000000", "ts": "1726542000007" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instId String Instrument ID > eqPx String Equilibrium price > matchedSz String Matched size for both buy and sell The unit is in base currency > unmatchedSz String Unmatched size > auctionEndTime String Call auction end time. Unix timestamp in milliseconds. > state String Trading state of the symbol call_auction continuous_trading > ts String Data generation time. Unix timestamp in millieseconds. During call auction, users can get the updates of equilibrium price, matched size, unmatched size, and auction end time. The data will be updated around once a second. When call auction ends, this channel will push the last message, returning the actual open price, matched size, and unmatched size, with trading state as `continuous_trading`. BLOCK TRADING BLOCK TRADING WORKFLOW A block trade is a large sized, privately negotiated transaction that allows traders to execute spot, perpetuals, futures, options and a combination of instruments (multi leg) which are traded outside the order book and at a mutually agreed price between the counter-parties. Once the transaction economics have been agreed upon, it will be submitted to OKX to be seamlessly margined, cleared and executed. Basic Concepts 1. RFQs - Request for Quote sent by the Taker to Maker(s). It captures the quantity, instrument or multi instrument strategy that a Taker wants to trade. 2. Quotes - Quotes are created by the Maker in response to a requested RFQ. 3. Trades - Trades occur when the Taker successfully executes upon a makers quote to an RFQ. High Level Workflow To trade as either Taker or Maker, users need to deposit at least 100,000 USD into their trading account. In addition, to become a Maker, Please complete the form to access block trading. 1. Taker creates an RFQ and selects which counterparties to broadcast the RFQ to. 2. Multiple Maker(s) send a two way quote as a response to the RFQ. 3. Taker chooses to execute upon the best quote and the trade is sent to OKX for clearing & settlement. 4. Taker & Maker receive confirmation of the trade's execution. 5. Trade economics are published to market feed. (minus counterparty info) Taker's Perspective 1. Taker creates an RFQ using POST /api/v5/rfq/create-rfq. Taker can pull available instruments via GET /api/v5/public/instruments and available counterparties from GET /api/v5/rfq/counterparties. 2. Taker can cancel an RFQ anytime until it becomes inactive with POST /api/v5/rfq/cancel-rfq. 3. Maker, who is a requested counterparty to the RFQ, and is notified over the rfqs WebSocket channel, can provide a Quote to the RFQ. 4. Taker, who will be notified of quotes from the quotes WebSocket channel, can execute upon the best Quote with POST /api/v5/rfq/execute-quote. 5. Taker will receive confirmation of the trade's successful execution on the struc-block-trades and rfqs WebSocket channel. 6. Taker will also receive confirmation of the trade being completed on the public-struc-block-trades WebSocket channel as well as all other block trades on OKX. Maker's Perspective 1. Maker is notified about a new RFQ who they are a counterparty to, on the rfqs WebSocket channel. 2. Maker can create a one way or two way Quote using POST /api/v5/rfq/create-quote. 3. Maker can cancel an existing quote anytime until it becomes inactive with POST /api/v5/rfq/cancel-quote. 4. Taker chooses to execute upon an available Quote. 5. Maker will receive updates of their Quote from the quotes WebSocket channel. 6. Maker will receive confirmation of the successful execution of their Quote from the struc-block-trades and quotes WebSocket channel. 7. Maker will receive confirmation of the trade being completed on the public-struc-block-trades WebSocket channel as well as all other block trades on OKX. REST API Block trading is not supported under spot mode. GET COUNTERPARTIES Retrieves the list of counterparties that the user is permitted to trade with. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/rfq/counterparties > Request Example Copy to ClipboardGET /api/v5/rfq/counterparties Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Get counterparts result = blockTradingAPI.counterparties() print(result) REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "traderName" : "Satoshi Nakamoto", "traderCode" : "SATOSHI", "type" : "" } ] } RESPONSE PARAMETERS Parameter Type Description traderName String The long formative username of trader or entity on the platform. traderCode String A unique identifier of maker which will be publicly visible on the platform. All RFQ and Quote endpoints will use this as the unique counterparty identifier. type String The counterparty type. LP refers to API connected auto market makers. CREATE RFQ Creates a new RFQ Please select trading bot "WAGMI" as the counterparty when submitting RFQs in demo trading. Prices provided on RFQs by the trading bot are for reference only. To learn more, please visit Support center > FAQ > Trading > Liquid marketplace > Demo trading RATE LIMIT: 5 REQUESTS PER 2 SECONDS; 150 REQUESTS PER 12 HOURS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/create-rfq > Request Example Copy to ClipboardPOST /api/v5/rfq/create-rfq { "anonymous": true, "counterparties":[ "Trader1", "Trader2" ], "allowPartialExecution":false, "clRfqId":"rfq01", "tag":"123456", "legs":[ { "sz":"25", "side":"buy", "posSide": "long", "tdMode":"cross", "ccy":"USDT", "instId":"BTC-USD-221208-100000-C" }, { "sz":"150", "side":"buy", "posSide": "long", "tdMode":"cross", "ccy":"USDT", "instId":"ETH-USDT", "tgtCcy":"base_ccy" } ] } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Create RFQ result = blockTradingAPI.create_rfq( anonymous=True, counterparties=[ "Trader1", "Trader2" ], clRfqId= "rfq01", legs=[ { "sz":"25", "side":"buy", "posSide": "long", "tdMode":"cross", "ccy":"USDT", "instId":"BTC-USD-221208-100000-C" }, { "sz":"150", "side":"buy", "posSide": "long", "tdMode":"cross", "ccy":"USDT", "instId":"ETH-USDT", "tgtCcy":"base_ccy" } ] ) print(result) REQUEST PARAMETERS Parameter Type Required Description counterparties Array of strings Yes The trader code(s) of the counterparties who receive the RFQ. Can be found via /api/v5/rfq/counterparties/ anonymous Boolean No Submit RFQ on a disclosed or anonymous basis. Valid values are true or false. If not specified, the default value is false. When anonymous = true, the taker’s identify is not disclosed to maker even after trade execution. clRfqId String No Client-supplied RFQ ID. A combination of case-sensitive alpha-numeric, all numbers, or all letters of up to 32 characters. tag String No RFQ tag. The block trade associated with the RFQ will have the same tag. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. allowPartialExecution Boolean No Whether the RFQ can be partially filled provided that the shape of legs stays the same. Valid values are true or false. false by default. legs Array of objects Yes An Array of objects containing each leg of the RFQ. Maximum 15 legs can be placed per request > instId String Yes The Instrument ID of each leg. Example : "BTC-USDT-SWAP" > tdMode String No Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross > ccy String No Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. > sz String Yes The size of each leg > side String Yes The direction of each leg. Valid values can be buy or sell. > posSide String No Position side. The default is net in the net mode. It can only be long or short in the long/short mode. If not specified, users in long/short mode always open new positions. Only applicable to FUTURES/SWAP. > tgtCcy String No Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified, this is equal to base_ccy by default. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "cTime":"1611033737572", "uTime":"1611033737572", "traderCode":"SATOSHI", "tag":"123456", "rfqId":"22534", "clRfqId":"rfq01", "allowPartialExecution":false, "state":"active", "validUntil":"1611033857557", "counterparties":[ "Trader1", "Trader2" ], "legs":[ { "instId":"BTC-USD-221208-100000-C", "tdMode":"cross", "ccy":"USDT", "sz":"25", "side":"buy", "posSide": "long", "tgtCcy":"" }, { "instId":"ETH-USDT", "tdMode":"cross", "ccy":"USDT", "sz":"150", "side":"buy", "posSide": "long", "tgtCcy":"base_ccy" } ] } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results of the RFQ creation. > cTime String The timestamp the RFQ was created. Unix timestamp format in milliseconds. > uTime String The timestamp the RFQ was last updated. Unix timestamp format in milliseconds. > state String The status of the RFQ. Valid values can be active canceled pending_fill filled expired traded_away failed. traded_away only applies to Maker > counterparties Array of strings The list of counterparties traderCode the RFQ was broadcast to. > validUntil String The timestamp the RFQ expires. Unix timestamp format in milliseconds. If all legs are options, the RFQ will expire after 10 minutes; otherwise, the RFQ will expire after 2 minutes. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > tag String RFQ tag. The block trade associated with the RFQ will have the same tag. > allowPartialExecution Boolean Whether the RFQ can be partially filled provided that the shape of legs stays the same. > traderCode String A unique identifier of taker. > rfqId String The unique identifier of the RFQ generated by system. > legs Array of objects An Array of objects containing each leg of the RFQ. >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String Size of the leg in contracts or spot. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. CANCEL RFQ Cancel an existing active RFQ that you have created previously. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-rfq > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-rfq { "rfqId":"22535", "clRfqId":"rfq001" } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel RFQ result = blockTradingAPI.cancel_rfq( rfqId="22535", clRfqId="rfq001" ) print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String Conditional RFQ ID created . clRfqId String Conditional Client-supplied RFQ ID. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. Either rfqId or clRfqId is required. If both are passed, rfqId will be used. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "rfqId":"22535", "clRfqId":"rfq001", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > rfqId String RFQ ID > clRfqId String Client-supplied RFQ ID. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. CANCEL MULTIPLE RFQS Cancel one or multiple active RFQ(s) in a single batch. Maximum 100 RFQ orders can be canceled per request. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-batch-rfqs > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-batch-rfqs { "rfqIds":[ "2201", "2202", "2203" ], "clRfqIds":[ "r1", "r2", "r3" ] } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel multiple RFQs result = blockTradingAPI.cancel_batch_rfqs( rfqIds=[ "2201", "2202", "2203" ], clRfqIds=[ "r1", "r2", "r3" ], ) print(result) REQUEST PARAMETERS Parameter Type Required Description rfqIds Array of strings Conditional RFQ IDs . clRfqIds Array of strings Conditional Client-supplied RFQ IDs. Either rfqIds or clRfqIds is required. If both attributes are sent, rfqIds will be used as primary identifier. > Success - All requested RFQs canceled Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "rfqId":"2201", "clRfqId":"r1", "sCode":"0", "sMsg":"" }, { "rfqId":"2202", "clRfqId":"r2", "sCode":"0", "sMsg":"" }, { "rfqId":"2203", "clRfqId":"r3", "sCode":"0", "sMsg":"" } ] } > Partial cancellation Copy to Clipboard{ "code":"2", "msg":"Bulk operation partially ", "data":[ { "rfqId":"2201", "clRfqId":"r1", "sCode":"70000", "sMsg":"RFQ does not exist." }, { "rfqId":"2202", "clRfqId":"r2", "sCode":"0", "sMsg":"" }, { "rfqId":"2203", "clRfqId":"r3", "sCode":"0", "sMsg":"" } ] } > Failure example Copy to Clipboard{ "code":"1", "msg":"Operation failed.", "data":[ { "rfqId":"2201", "clRfqId":"r1", "sCode":"70000", "sMsg":"RFQ does not exist." }, { "rfqId":"2202", "clRfqId":"r2", "sCode":"70000", "sMsg":"RFQ does not exist." }, { "rfqId":"2203", "clRfqId":"r3", "sCode":"70000", "sMsg":"RFQ does not exist." } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > rfqId String RFQ ID > clRfqId String Client-supplied RFQ ID. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. CANCEL ALL RFQS Cancels all active RFQs. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-all-rfqs > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-all-rfqs Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel all RFQs result = blockTradingAPI.cancel_all_rfqs() print(result) REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ts":"1697026383085" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > ts String The timestamp of successful cancellation. Unix timestamp format in milliseconds, e.g. 1597026383085. EXECUTE QUOTE Executes a Quote. It is only used by the creator of the RFQ RATE LIMIT: 2 REQUESTS PER 3 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/execute-quote > Request Example Copy to ClipboardPOST /api/v5/rfq/execute-quote { "rfqId":"22540", "quoteId":"84073", "legs":[ { "sz":"25", "instId":"BTC-USD-20220114-13250-C" }, { "sz":"25", "instId":"BTC-USDT" } ] } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Execute quote result = blockTradingAPI.execute_quote( rfqId="22540", quoteId="84073" ) print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String Yes RFQ ID . quoteId String Yes Quote ID. legs Array of objects No An Array of objects containing the execution size of each leg of the RFQ. The ratio of the leg sizes needs to be the same as the RFQ. *Note: tgtCcy and side of each leg will be same as ones in the RFQ. px will be the same as the ones in the Quote. > instId String Yes The Instrument ID, for example: "BTC-USDT-SWAP". > sz String Yes The size of each leg > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "blockTdId":"180184", "rfqId":"1419", "clRfqId":"r0001", "quoteId":"1046", "clQuoteId":"q0001", "tag":"123456", "tTraderCode":"Trader1", "mTraderCode":"Trader2", "cTime":"1649670009", "legs":[ { "px":"0.1", "sz":"25", "instId":"BTC-USD-20220114-13250-C", "side":"sell", "fee":"-1.001", "feeCcy":"BTC", "tradeId":"10211" }, { "px":"0.2", "sz":"25", "instId":"BTC-USDT", "side":"buy", "fee":"-1.001", "feeCcy":"BTC", "tradeId":"10212" } ] } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > cTime String The execution time for the trade. Unix timestamp in milliseconds. > rfqId String RFQ ID. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > quoteId String Quote ID. > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, only return empty string. > blockTdId String Block trade ID. > tag String RFQ tag. > tTraderCode String A unique identifier of the taker. Empty if the anonymous parameter of the RFQ is set to be true. > mTraderCode String A unique identifier of the maker. Empty if the anonymous parameter of the Quote is set to be true. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg in contracts or spot. >> side String The direction of the leg from the Takers perspective. Valid value can be buy or sell. >> fee String Fee for the individual leg. Negative fee represents the user transaction fee charged by the platform. Positive fee represents rebate. >> feeCcy String Fee currency. To be read in conjunction with fee >> tradeId String Last traded ID. GET QUOTE PRODUCTS Retrieve the products which makers want to quote and receive RFQs for, and the corresponding price and size limit. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/rfq/maker-instrument-settings > Request Example Copy to ClipboardGET /api/v5/rfq/maker-instrument-settings REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ {"instType": "OPTION", "includeALL": true, "data": [ { "uly": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "uly": "SOL-USD", "maxBlockSz": "100000", "makerPxBand": "15" } ] }, {"instType": "FUTURES", "includeALL": false, "data": [ { "uly": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "uly": "ETH-USDT", "maxBlockSz": "100000", "makerPxBand": "15" } ] }, {"instType:": "SWAP", "includeALL": false, "data": [{ "uly": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "uly": "ETH-USDT" } ] }, {"instType:": "SPOT", "includeALL": false, "data": [{ "instId": "BTC-USDT" }, { "instId": "TRX-USDT" } ] ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Return data of the request. > instType String Type of instrument. Valid value can be FUTURES, OPTION, SWAP or SPOT. > includeAll Boolean Receive all instruments or not under specific instType setting. Valid value can be boolean (True/False). By default, the value will be false. > data Array of objects Elements of the instType. >> instFamily String Instrument family. Required for FUTURES, OPTION and SWAP only. >> instId String Instrument ID. Required for SPOT only. >> maxBlockSz String Max trade quantity for the product(s). For FUTURES, OPTION and SWAP, the max quantity of the RFQ/Quote is in unit of contracts. For SPOT, this parameter is in base currency. >> makerPxBand String Price bands in unit of ticks, measured against mark price. Setting makerPxBand to 1 tick means: If Bid price > Mark + 1 tick, it will be stopped If Ask price < Mark - 1 tick, It will be stopped SET QUOTE PRODUCTS Customize the products which makers want to quote and receive RFQs for, and the corresponding price and size limit. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/maker-instrument-settings > Request Example Copy to ClipboardPOST /api/v5/rfq/maker-instrument-settings [ { "instType": "OPTION", "data": [{ "instFamily": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "instFamily": "SOL-USD", "maxBlockSz": "100000", "makerPxBand": "15" }] }, { "instType": "FUTURES", "data": [{ "instFamily": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "instFamily": "ETH-USDT", "maxBlockSz": "100000", "makerPxBand": "15" }] }, { "instType": "SWAP", "data": [{ "instFamily": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "instFamily": "ETH-USDT" }] }, { "instType": "SPOT", "data": [{ "instId": "BTC-USDT" }, { "instId": "TRX-USDT" }] } ] Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Set quote products data =[{ "instType": "OPTION", "data": [{ "uly": "BTC-USD", "maxBlockSz": "10000", "makerPxBand": "5" }, { "uly": "SOL-USD", "maxBlockSz": "100000", "makerPxBand": "15" } ] }] result = blockTradingAPI.set_marker_instrument( data ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Type of instrument. Valid value can be FUTURES, OPTION, SWAP or SPOT. includeAll Boolean No Receive all instruments or not under specific instType setting. Valid value can be boolean (True/False). By default, the value will be false. data Array of objects Yes Elements of the instType. > instFamily String Conditional Instrument family. Required for FUTURES, OPTION and SWAP only. > instId String Conditional Instrument ID. Required for SPOT only. > maxBlockSz String No Max trade quantity for the product(s). For FUTURES, OPTION and SWAP, the max quantity of the RFQ/Quote is in unit of contracts. For SPOT, this parameter is in base currency. > makerPxBand String No Price bands in unit of ticks, measured against mark price. Setting makerPxBand to 1 tick means: If Bid price > Mark + 1 tick, it will be stopped If Ask price < Mark - 1 tick, It will be stopped > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "result":true } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results. > result Boolean Result of the request Valid value is true or false. RESET MMP STATUS Reset the MMP status to be inactive. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/mmp-reset > Request Example Copy to ClipboardPOST /api/v5/rfq/mmp-reset Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Reset MMP status result = blockTradingAPI.reset_mmp() print(result) REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results. ts String The timestamp of re-setting successfully. Unix timestamp format in milliseconds, e.g. 1597026383085. SET MMP This endpoint is used to set MMP configure and only applicable to block trading makers RATE LIMIT: 1 REQUEST PER 10 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/rfq/mmp-config > Request Example Copy to ClipboardPOST /api/v5/rfq/mmp-config body { "timeInterval":"5000", "frozenInterval":"2000", "countLimit": "100" } REQUEST PARAMETERS Parameter Type Required Description timeInterval String Yes Time window (ms). MMP interval where monitoring is done. "0" means disable MMP. Maximum time interval is 600,000. frozenInterval String Yes Frozen period (ms). "0" means the trade will remain frozen until you request "Reset MMP Status" to unfrozen. countLimit String Yes Limit in number of execution attempts. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "frozenInterval":"2000", "countLimit": "100", "timeInterval":"5000" } ] } RESPONSE PARAMETERS Parameter Type Description timeInterval String Time window (ms). MMP interval where monitoring is done frozenInterval String Frozen period (ms). countLimit String Limit in number of execution attempts GET MMP CONFIG This endpoint is used to get MMP configure information and only applicable to block trading market makers RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/rfq/mmp-config > Request Example Copy to ClipboardGET /api/v5/rfq/mmp-config REQUEST PARAMETERS none > Response Example Copy to Clipboard{ "code": "0", "data": [ { "frozenInterval": "2000", "mmpFrozen": true, "mmpFrozenUntil": "2326882", "countLimit": "10", "timeInterval": "5000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description timeInterval String Time window (ms). MMP interval where monitoring is done "0" means MMP is diabled frozenInterval String Frozen period (ms). "0" means the trade will remain frozen until manually reset countLimit String Limit in number of execution attempts mmpFrozen Boolean Whether MMP is currently triggered. true or false mmpFrozenUntil String If frozenInterval is not "0" and mmpFrozen = True, it is the time interval (in ms) when MMP is no longer triggered, otherwise "" CREATE QUOTE Allows the user to Quote an RFQ that they are a counterparty to. The user MUST quote the entire RFQ and not part of the legs or part of the quantity. Partial quoting is not allowed. RATE LIMIT: 50 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/create-quote > Request Example Copy to ClipboardPOST /api/v5/rfq/create-quote { "rfqId":"22539", "clQuoteId":"q001", "tag":"123456", "quoteSide":"buy", "anonymous": true, "expiresIn":"30", "legs":[ { "px":"39450.0", "sz":"200000", "instId":"BTC-USDT-SWAP", "tdMode":"cross", "ccy":"USDT", "side":"buy", "posSide": "long" }, { "px":"39450.0", "sz":"200000", "instId":"BTC-USDT-SWAP", "tdMode":"cross", "ccy":"USDT", "side":"buy", "posSide": "long" } ] } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Create quote result = blockTradingAPI.create_quote( rfqId="22539", clQuoteId="q001", anonymous=True, quoteSide="buy", expiresIn="30", legs=[ { "px": "39450.0", "sz": "200000", "instId": "BTC-USDT-SWAP", "side": "buy" } ] ) print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String Yes RFQ ID . clQuoteId String No Client-supplied Quote ID. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Quote tag. The block trade associated with the Quote will have the same tag. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. anonymous Boolean No Submit Quote on a disclosed or anonymous basis. Valid value is true or false. false by default. quoteSide String Yes The trading direction of the Quote. Its value can be buy or sell. For example, if quoteSide is buy, all the legs are executed in their leg sides; otherwise, all the legs are executed in the opposite of their leg sides. expiresIn String No Seconds that a quote expires in. Must be an integer between 10-120. Default is 60. legs Array of objects Yes The legs of the Quote. > instId String Yes The instrument ID of quoted leg. > tdMode String No Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross > ccy String No Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. > sz String Yes Size of the leg in contracts or spot. > px String Yes The price of the leg. > side String Yes The direction of the leg. Valid values can be buy or sell. > posSide String No Position side. The default is net in the net mode. It can only be long or short in the long/short mode. If not specified, users in long/short mode always open new positions. Only applicable to FUTURES/SWAP. > tgtCcy String No Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. > Response Example Copy to Clipboard{ "code":"", "msg":"", "data":[ { "validUntil":"1608997227834", "uTime":"1608267227834", "cTime":"1608267227834", "legs":[ { "px":"46000", "sz":"25", "instId":"BTC-USD-220114-25000-C", "tdMode":"cross", "ccy":"USDT", "side":"sell", "posSide": "long", "tgtCcy":"" }, { "px":"4000", "sz":"25", "instId":"ETH-USD-220114-25000-C", "tdMode":"cross", "ccy":"USDT", "side":"buy", "posSide": "long", "tgtCcy":"" } ], "quoteId":"25092", "rfqId":"18753", "tag":"123456", "quoteSide":"sell", "state":"active", "reason": "mmp_canceled" "clQuoteId":"", "clRfqId":"", "traderCode":"Aksha" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > cTime String The timestamp the Quote was created, Unix timestamp format in milliseconds. > uTime String The timestamp the Quote was last updated, Unix timestamp format in milliseconds. > state String The status of the quote. Valid values can be active canceled pending_fill filled expired or failed. > reason String Reasons of state. Valid values can be mmp_canceled. > validUntil String The timestamp the Quote expires. Unix timestamp format in milliseconds. > rfqId String RFQ ID > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > quoteId String Quote ID. > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, only return empty string. > tag String Quote tag. The block trade associated with the Quote will have the same tag. > traderCode String A unique identifier of maker. > quoteSide String The trading direction of the Quote. Its value can be buy or sell. For example, if quoteSide is buy, all the legs are executed in their leg sides; otherwise, all the legs are executed in the opposite of their leg sides. > legs Array of objects The legs of the Quote. >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String Size of the leg in contracts or spot. >> px String The price of the leg. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. CANCEL QUOTE Cancels an existing active Quote you have created in response to an RFQ. RATE LIMIT: 50 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-quote > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-quote { "quoteId": "007", "clQuoteId":"Bond007" } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel quote result = blockTradingAPI.cancel_quote( quoteId="007", clQuoteId="Bond007" ) print(result) REQUEST PARAMETERS Parameter Type Required Description quoteId String Conditional Quote ID. clQuoteId String Conditional Client-supplied Quote ID. Either quoteId or clQuoteId is required. If both clQuoteId and quoteId are passed, quoteId will be treated as primary identifier. rfqId String No RFQ ID. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "quoteId":"007", "clQuoteId":"Bond007", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > quoteId String Quote ID > clQuoteId String Client-supplied Quote ID. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. CANCEL MULTIPLE QUOTES Cancel one or multiple active Quote(s) in a single batch. Maximum 100 quote orders can be canceled per request. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-batch-quotes > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-batch-quotes { "quoteIds": ["1150","1151","1152"], "clQuoteIds": ["q1","q2","q3"] } Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel multiple quotes result = blockTradingAPI.cancel_batch_quotes( quoteIds=["1150","1151","1152"], clQuoteIds=["q1","q2","q3"] ) print(result) REQUEST PARAMETERS Parameter Type Required Description quoteIds Array of strings Conditional Quote IDs . clQuoteIds Array of strings Conditional Client-supplied Quote IDs. Either quoteIds or clQuoteIds is required.If both attributes are sent, quoteIds will be used as primary identifier. > Success - All requested Quotes canceled Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "quoteId":"1150", "clQuoteId":"q1", "sCode":"0", "sMsg":"" }, { "quoteId":"1151", "clQuoteId":"q2", "sCode":"0", "sMsg":"" }, { "quoteId":"1152", "clQuoteId":"q3", "sCode":"0", "sMsg":"" } ] } > Partial cancellation Copy to Clipboard{ "code":"2", "msg":"Bulk operation partially succeeded.", "data":[ { "quoteId":"1150", "clQuoteId":"q1", "sCode":"0", "sMsg":"" }, { "quoteId":"1151", "clQuoteId":"q2", "sCode":"70001", "sMsg":"Quote does not exist." }, { "quoteId":"1152", "clQuoteId":"q3", "sCode":"70001", "sMsg":"Quote does not exist." } ] } > Failure example Copy to Clipboard{ "code":"1", "msg":"Operation failed.", "data":[ { "quoteId":"1150", "clQuoteId":"q1", "sCode":"70001", "sMsg":"Quote does not exist." }, { "quoteId":"1151", "clQuoteId":"q2", "sCode":"70001", "sMsg":"Quote does not exist." }, { "quoteId":"1151", "clQuoteId":"q3", "sCode":"70001", "sMsg":"Quote does not exist." } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > quoteId String Quote ID > clQuoteId String Client-supplied Quote ID. > sCode String The code of the event execution result, 0 means success. > sMsg String Rejection message if the request is unsuccessful. CANCEL ALL QUOTES Cancels all active Quotes. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS POST /api/v5/rfq/cancel-all-quotes > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-all-quotes Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Cancel all quotes result = blockTradingAPI.cancel_all_quotes() print(result) REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ts":"1697026383085" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results > ts String The timestamp of cancellation successfully. Unix timestamp format in milliseconds, e.g. 1597026383085. CANCEL ALL AFTER Cancel all quotes after the countdown timeout. RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/rfq/cancel-all-after > Request Example Copy to ClipboardPOST /api/v5/rfq/cancel-all-after { "timeOut":"60" } REQUEST PARAMETERS Parameter Type Required Description timeOut String Yes The countdown for quotes cancellation, with second as the unit. Range of value can be 0, [10, 120]. Setting timeOut to 0 disables Cancel All After. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "triggerTime":"1587971460", "ts":"1587971400" } ] } RESPONSE PARAMETERS Parameter Type Description triggerTime String The time the cancellation is triggered. triggerTime=0 means Cancel All After is disabled. ts String The time the request is received. Users are recommended to send a request to the exchange every second. When the cancel all after is triggered, the trading engine will cancel quotes on behalf of the client one by one and this operation may take up to a few seconds. This feature is intended as a protection mechanism for clients only and clients should not use this feature as part of their trading strategies. GET RFQS Retrieves details of RFQs that the user is a counterparty to (either as the creator or the receiver of the RFQ). RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/rfq/rfqs > Request Example Copy to ClipboardGET /api/v5/rfq/rfqs Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Retrieves details of RFQs that the user is a counterparty to result = blockTradingAPI.get_rfqs() print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String No RFQ ID . clRfqId String No Client-supplied RFQ ID. If both clRfqId and rfqId are passed, rfqId will be treated as primary identifier state String No The status of the RFQ. Valid values can be active canceled pending_fill filled expired failed traded_away. traded_away only applies to Maker beginId String No Start rfq id the request to begin with. Pagination of data to return records newer than the requested rfqId, not including beginId endId String No End rfq id the request to end with. Pagination of data to return records earlier than the requested rfqId, not including endId limit String No Number of results per request. The maximum is 100 which is also the default value. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "rfqId": "123456", "clRfqId": "", "tag": "123456", "traderCode": "VITALIK", "validUntil": "1650969031817", "allowPartialExecution": false, "state": "filled", "flowType": "", "counterparties": [ "SATOSHI" ], "legs": [ { "instId": "BTC-USDT", "tdMode":"cross", "ccy":"USDT", "side": "buy", "posSide": "long", "sz": "25", "tgtCcy": "base_ccy" } ], "cTime": "1650968131817", "uTime": "1650968164944" }, { "rfqId": "1234567", "clRfqId": "", "tag":"1234567", "traderCode": "VITALIK", "validUntil": "1650967623729", "state": "filled", "flowType": "", "counterparties": [ "SATOSHI" ], "legs": [ { "instId": "BTC-USDT", "tdMode":"cross", "ccy":"USDT", "side": "buy", "posSide": "long", "sz": "1500000", "tgtCcy": "quote_ccy" } ], "cTime": "1650966723729", "uTime": "1650966816577" } } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results of the RFQ creation. > cTime String The timestamp the RFQ was created. Unix timestamp format in milliseconds. > uTime String The timestamp the RFQ was last updated. Unix timestamp format in milliseconds. > state String The status of the RFQ. Valid values can be active canceled pending_fill filled expired failed traded_away. traded_away only applies to Maker > counterparties Array of srings The list of counterparties traderCode the RFQ was broadcasted to. > validUntil String The timestamp the RFQ expires. Unix timestamp format in milliseconds. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > tag String RFQ tag. The block trade associated with the RFQ will have the same tag. > flowType String Identify the type of the RFQ. Only applicable to Makers, return "" for Takers > traderCode String A unique identifier of taker. Empty if the anonymous parameter of the RFQ is set to be true. > rfqId String RFQ ID. > allowPartialExecution Boolean Whether the RFQ can be partially filled provided that the shape of legs stays the same. Valid value is true or false. false by default. > legs Array of objects Legs of RFQ >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String Size of the leg in contracts or spot. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. GET QUOTES Retrieve all Quotes that the user is a counterparty to (either as the creator or the receiver). RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/rfq/quotes > Request Example Copy to ClipboardGET /api/v5/rfq/quotes Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Retrieve all Quotes that the user is a counterparty to result = blockTradingAPI.get_quotes() print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String No RFQ ID . clRfqId String No Client-supplied RFQ ID. If both clRfqId and rfqId are passed, rfqId will be be treated as primary identifier. quoteId String No Quote ID clQuoteId String No Client-supplied Quote ID. If both clQuoteId and quoteId are passed, quoteId will be treated as primary identifier state String No The status of the quote. Valid values can be active canceled pending_fill filled expired or failed. beginId String No Start quote id the request to begin with. Pagination of data to return records newer than the requested quoteId, not including beginId endId String No End quote id the request to end with. Pagination of data to return records earlier than the requested quoteId, not including endId limit String No Number of results per request. The maximum is 100 which is also the default value. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "validUntil":"1608997227834", "uTime":"1608267227834", "cTime":"1608267227834", "legs":[ { "px":"46000", "sz":"25", "instId":"BTC-USD-220114-25000-C", "tdMode":"cross", "ccy":"USDT", "side":"sell", "posSide": "long", "tgtCcy":"" }, { "px":"45000", "sz":"25", "instId":"BTC-USDT", "tdMode":"cross", "ccy":"USDT", "side":"buy", "posSide": "long", "tgtCcy":"base_ccy" } ], "quoteId":"25092", "rfqId":"18753", "quoteSide":"sell", "state":"canceled", "reason":"mmp_canceled", "clQuoteId":"cq001", "clRfqId":"cr001", "tag":"123456", "traderCode":"Trader1" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results of the Quote creation. > cTime String The timestamp the Quote was created, Unix timestamp format in milliseconds. > uTime String The timestamp the Quote was last updated, Unix timestamp format in milliseconds. > state String The status of the quote. Valid values can be active canceled pending_fill filled expired or failed. > reason String Reasons of state. Valid values can be mmp_canceled. > validUntil String The timestamp the Quote expires. Unix timestamp format in milliseconds. > rfqId String RFQ ID. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > quoteId String Quote ID. > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, only return empty string. > tag String Quote tag. The block trade associated with the Quote will have the same tag. > traderCode String A unique identifier of maker. Empty If the anonymous parameter of the Quote is set to be true. > quoteSide String Top level direction of Quote. Its value can be buy or sell. > legs Array of objects The legs of the Quote. >> instId String The instrument ID of the quoted leg. >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String Size of the leg in contracts or spot. >> px String The price of the leg. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. GET TRADES Retrieves the executed trades that the user is a counterparty to (either as the creator or the receiver). RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUESTS GET /api/v5/rfq/trades > Request Example Copy to ClipboardGET /api/v5/rfq/trades Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Retrieves the executed trades that the user is a counterparty to result = blockTradingAPI.get_trades() print(result) REQUEST PARAMETERS Parameter Type Required Description rfqId String No RFQ ID . clRfqId String No Client-supplied RFQ ID. If both clRfqId and rfqId are passed, rfqId will be treated as primary identifier quoteId String No Quote ID blockTdId String No Block trade ID clQuoteId String No Client-supplied Quote ID. If both clQuoteId and quoteId are passed, quoteId will be treated as primary identifier state String No The status of the RFQ. Valid values can be active canceled pending_fill filled expired failed traded_away. traded_away only applies to Maker beginId String No The starting rfq id the request to begin with. Pagination of data to return records newer than the requested blockTdId, not including beginId. endId String No The last rfq id the request to end withPagination of data to return records earlier than the requested blockTdId, not including endId. beginTs String No Filter trade execution time with a begin timestamp (UTC timezone). Unix timestamp format in milliseconds, e.g. 1597026383085 endTs String No Filter trade execution time with an end timestamp (UTC timezone). Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100 which is also the default value. If the number of trades in the requested range is bigger than 100, the latest 100 trades in the range will be returned. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "rfqId": "123456", "clRfqId": "", "quoteId": "0T5342O", "clQuoteId": "", "blockTdId": "439127542058958848", "tag": "123456", "legs": [ { "instId": "BTC-USDT", "side": "sell", "sz": "0.666", "px": "100", "tradeId": "439127542058958850", "fee": "-0.0333", "feeCcy": "USDT" } ], "cTime": "1650968164900", "tTraderCode": "SATS", "mTraderCode": "MIKE" }, { "rfqId": "1234567", "clRfqId": "", "quoteId": "0T533T0", "clQuoteId": "", "blockTdId": "439121886014849024", "tag": "1234567", "legs": [ { "instId": "BTC-USDT", "side": "sell", "sz": "0.532", "px": "100", "tradeId": "439121886014849026", "fee": "-0.0266", "feeCcy": "USDT" } ], "cTime": "1650966816550", "tTraderCode": "SATS", "mTraderCode": "MIKE" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results of the block trade. > cTime String The time the trade was executed. Unix timestamp in milliseconds. > rfqId String RFQ ID. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, only return empty string. > quoteId String Quote ID. > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, only return empty string. > blockTdId String Block trade ID. > tag String Trade tag. The block trade will have the tag of the RFQ or Quote it corresponds to. > tTraderCode String A unique identifier of the Taker. Empty if the anonymous parameter of the RFQ is set to be true. > mTraderCode String A unique identifier of the Maker. Empty if the anonymous parameter of the Quote is set to be true. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg in contracts or spot. >> side String The direction of the leg. Valid value can be buy or sell. >> fee String Fee. Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. >> feeCcy String Fee currency >> tradeId String Last traded ID. GET PUBLIC STRUCTURE BLOCK TRADES Retrieves the executed block trades. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUESTS GET /api/v5/rfq/public-trades > Request Example Copy to ClipboardGET /api/v5/rfq/public-trades Copy to Clipboardimport okx.BlockTrading as BlockTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 blockTradingAPI = BlockTrading.BlockTradingAPI(apikey, secretkey, passphrase, False, flag) # Retrieves the executed block trades result = blockTradingAPI.get_public_trades() print(result) REQUEST PARAMETERS Parameter Type Required Description beginId String No The starting blockTdId the request to begin with. Pagination of data to return records newer than the requested blockTdId, not including beginId. endId String No The last blockTdId the request to end with. Pagination of data to return records earlier than the requested blockTdId, not including endId. limit String No Number of results per request. The maximum is 100 which is also the default value. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "blockTdId": "439161457415012352", "legs": [ { "instId": "BTC-USD-210826", "side": "sell", "sz": "100", "px": "11000", "tradeId": "439161457415012354" }, { "instId": "BTC-USD-SWAP", "side": "sell", "sz": "100", "px": "50", "tradeId": "439161457415012355" }, { "instId": "BTC-USDT", "side": "buy", "sz": "0.1", //for public feed, spot "sz" is in baseccy "px": "10.1", "tradeId": "439161457415012356" }, { "instId": "BTC-USD-210326-60000-C", "side": "buy", "sz": "200", "px": "0.008", "tradeId": "439161457415012357" }, { "instId": "BTC-USD-220930-5000-P", "side": "sell", "sz": "200", "px": "0.008", "tradeId": "439161457415012360" }, { "instId": "BTC-USD-220930-10000-C", "side": "sell", "sz": "200", "px": "0.008", "tradeId": "439161457415012361" }, { "instId": "BTC-USD-220930-10000-P", "side": "sell", "sz": "200", "px": "0.008", "tradeId": "439161457415012362" }, { "instId": "ETH-USD-220624-100100-C", "side": "sell", "sz": "100", "px": "0.008", "tradeId": "439161457415012363" } ], "strategy":"CALL_CALENDAR_SPREAD", "cTime": "1650976251241" } ] } RESPONSE PARAMETERS Parameter Type Description code String The result code, 0 means success. msg String The error message, not empty if the code is not 0. data Array of objects Array of objects containing the results of the public block trade. > strategy String Option strategy, e.g. CALL_CALENDAR_SPREAD > cTime String The time the trade was executed. Unix timestamp in milliseconds. > blockTdId String Block trade ID. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg in contracts or spot. >> side String The direction of the leg from the Takers perspective. Valid value can be buy or sell. >> tradeId String Last traded ID. GET BLOCK TICKERS Retrieve the latest block trading volume in the last 24 hours. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/block-tickers > Request Example Copy to ClipboardGET /api/v5/market/block-tickers?instType=SWAP Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the latest block trading volume in the last 24 hours result = marketDataAPI.get_block_tickers( instType="SPOT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SPOT SWAP FUTURES OPTION uly String No Underlying, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family, e.g. BTC-USD Applicable to FUTURES/SWAP/OPTION > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"LTC-USD-SWAP", "volCcy24h":"2222", "vol24h":"2222", "ts":"1597026383085" }, { "instType":"SWAP", "instId":"BTC-USD-SWAP", "volCcy24h":"2222", "vol24h":"2222", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID instType String Instrument type volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. ts String Block ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET BLOCK TICKER Retrieve the latest block trading volume in the last 24 hours. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/block-ticker > Request Example Copy to ClipboardGET /api/v5/market/block-ticker?instId=LTC-USD-SWAP Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the latest block trading volume in the last 24 hours result = marketDataAPI.get_block_ticker( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"LTC-USD-SWAP", "volCcy24h":"2222", "vol24h":"2222", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID instType String Instrument type volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. ts String Block ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET PUBLIC BLOCK TRADES Retrieve the recent block trading transactions of an instrument. Descending order by tradeId. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/block-trades > Request Example Copy to ClipboardGET /api/v5/public/block-trades?instId=BTC-USDT REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "fillVol": "5", "fwdPx": "26857.86591585", "idxPx": "26889.7", "instId": "BTC-USD-231013-22000-P", "markPx": "0.0000000000000001", "px": "0.0026", "side": "buy", "sz": "1", "tradeId": "632960608383700997", "ts": "1697181568974" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID tradeId String Trade ID px String Trade price sz String Trade quantity side String Trade side buy sell fillVol String Implied volatility Only applicable to OPTION fwdPx String Forward price Only applicable to OPTION idxPx String Index price Applicable to FUTURES, SWAP, OPTION markPx String Mark price Applicable to FUTURES, SWAP, OPTION ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. Up to 500 most recent historical public transaction data can be retrieved. WEBSOCKET PRIVATE CHANNEL RFQS CHANNEL Retrieve the RFQs sent or received by the user. Data will be pushed whenever the user sends or receives an RFQ. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "rfqs" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name rfqs > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "rfqs" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"rfqs\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name rfqs code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"rfqs", "uid": "77982378738415879" }, "data":[ { "cTime":"1611033737572", "uTime":"1611033737572", "traderCode":"DSK2", "rfqId":"22534", "clRfqId":"", "tag":"123456", "state":"active", "flowType":"", "validUntil":"1611033857557", "allowPartialExecution": false, "counterparties":[ "DSK4", "DSK5" ], "legs":[ { "instId":"BTCUSD-211208-36000-C", "tdMode":"cross", "ccy":"USDT", "sz":"25.0", "side":"buy", "posSide": "long", "tgtCcy":"" }, { "instId":"ETHUSD-211208-45000-C", "tdMode":"cross", "ccy":"USDT", "sz":"25.0", "side":"sell", "posSide": "long", "tgtCcy":"" } ] } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier data Array Subscribed data > cTime String The timestamp the RFQ was created, Unix timestamp format in milliseconds. > uTime String The timestamp the RFQ was updated latest, Unix timestamp format in milliseconds. > state String The status of the RFQ. Valid values can be active, canceled, filled, expired or failed. > counterparties Array of Strings The list of counterparties traderCode the RFQ was broadcasted to. > validUntil String The timestamp the RFQ expires. Unix timestamp format in milliseconds. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker. Return empty for Maker, eg. "". > tag String RFQ tag. The block trade associated with the RFQ will have the same tag. > flowType String Identify the type of the RFQ. Only applicable to Makers, return "" for Takers > traderCode String A unique identifier of taker. Empty If anonymous mode is True. > rfqId String RFQ ID > allowPartialExecution Boolean Whether the RFQ can be partially filled provided that the shape of legs stays the same. Valid value is true or false. false by default. > legs Array of objects An Array of objects containing each leg of the RFQ. >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String Size of the leg. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. QUOTES CHANNEL Retrieve the Quotes sent or received by the user. Data will be pushed whenever the user sends or receives a Quote. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "quotes" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name quotes > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "quotes" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"quotes\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name quotes code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"quotes", "uid": "77982378738415879" }, "data":[ { "validUntil":"1608997227854", "uTime":"1608267227834", "cTime":"1608267227834", "legs":[ { "px":"0.0023", "sz":"25.0", "instId":"BTC-USD-220114-25000-C", "tdMode":"cross", "ccy":"USDT", "side":"sell", "posSide": "long", "tgtCcy":"" }, { "px":"0.0045", "sz":"25", "instId":"BTC-USD-220114-35000-C", "tdMode":"cross", "ccy":"USDT", "side":"buy", "posSide": "long", "tgtCcy":"" } ], "quoteId":"25092", "rfqId":"18753", "tag":"123456", "traderCode":"SATS", "quoteSide":"sell", "state":"canceled", "reason":"mmp_canceled", "clQuoteId":"" } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier data Array Subscribed data > cTime String The timestamp the Quote was created, Unix timestamp format in milliseconds. > uTime String The timestamp the Quote was updated latest, Unix timestamp format in milliseconds. > state String The status of the quote. Valid values can be active canceled filled expired or failed. > reason String Reasons of state. Valid values can be mmp_canceled. > validUntil String The timestamp the Quote expires. Unix timestamp format in milliseconds. > rfqId String RFQ ID. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, just return empty string "" for Maker. > quoteId String Quote ID > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, just return empty string "" for Taker. > tag String Quote tag. The block trade associated with the Quote will have the same tag. > traderCode String A unique identifier of maker. Empty If anonymous mode of Quote is True. > quoteSide String Top level side of Quote. Its value can be buy or sell. > legs Array of objects The legs of the Quote. >> instId String The instrument name of quoted leg. >> tdMode String Trade mode Margin mode: cross isolated Non-Margin mode: cash. If not provided, tdMode will inherit default values set by the system shown below: Spot and futures mode & SPOT: cash Buy options in Spot and futures mode and Multi-currency Margin: isolated Other cases: cross >> ccy String Margin currency. Only applicable to cross MARGIN orders in Spot and futures mode. The parameter will be ignored in other scenarios. >> sz String The size of the quoted leg in contracts or spot. >> px String The price of the leg. >> side String The direction of the leg. Valid values can be buy or sell. >> posSide String Position side. The default is net in the net mode. If not specified, return "", which is equivalent to net. It can only be long or short in the long/short mode. If not specified, return "", which corresponds to the direction that opens new positions for the trade (buy => long, sell => short). Only applicable to FUTURES/SWAP. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. STRUCTURE BLOCK TRADES CHANNEL Retrieve user's block trades data. All the legs in the same block trade are included in the same update. Data will be pushed whenever there is a block trade that the user is a counterparty for. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "struc-block-trades" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name struc-block-trades > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "struc-block-trades" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"struc-block-trades\""}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name struc-block-trades code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"struc-block-trades", "uid": "77982378738415879" }, "data":[ { "cTime":"1608267227834", "rfqId":"18753", "clRfqId":"", "quoteId":"25092", "clQuoteId":"", "blockTdId":"180184", "tag":"123456", "tTraderCode":"ANAND", "mTraderCode":"WAGMI", "legs":[ { "px":"0.0023", "sz":"25.0", "instId":"BTC-USD-20220630-60000-C", "side":"sell", "fee":"0.1001", "feeCcy":"BTC", "tradeId":"10211", "tgtCcy":"" }, { "px":"0.0033", "sz":"25", "instId":"BTC-USD-20220630-50000-C", "side":"buy", "fee":"0.1001", "feeCcy":"BTC", "tradeId":"10212", "tgtCcy":"" } ] } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier data Array Subscribed data > cTime String The time the trade was executed. Unix timestamp in milliseconds. > rfqId String RFQ ID. > clRfqId String Client-supplied RFQ ID. This attribute is treated as client sensitive information. It will not be exposed to the Maker, just return empty string "" for Maker. > quoteId String Quote ID. > clQuoteId String Client-supplied Quote ID. This attribute is treated as client sensitive information. It will not be exposed to the Taker, just return empty string "" for Taker. > blockTdId String Block trade ID. > tag String Trade tag. The block trade will have the tag of the RFQ or Quote it corresponds to. > tTraderCode String A unique identifier of the Taker. Empty If anonymous mode of RFQ is True. > mTraderCode String A unique identifier of the Maker. Empty If anonymous mode of Quote is True. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg. >> side String The direction of the leg. Valid value can be buy or sell. >> tgtCcy String Defines the unit of the “sz” attribute. Only applicable to instType = SPOT. The valid enumerations are base_ccy and quote_ccy. When not specified this is equal to base_ccy by default. >> fee String Fee. Negative number represents the user transaction fee charged by the platform. Positive fee represents rebate. >> feeCcy String Fee currency >> tradeId String Last traded ID. WEBSOCKET PUBLIC CHANNEL PUBLIC STRUCTURE BLOCK TRADES CHANNEL Retrieve the recent block trades data in OKX. All the legs in the same block trade are included in the same update. Data will be pushed whenever there is a block trade in OKX. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "public-struc-block-trades" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name public-struc-block-trades > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "public-struc-block-trades" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"public-struc-block-trades\""}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name public-struc-block-trades code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"public-struc-block-trades" }, "data":[ { "cTime":"1608267227834", "blockTdId":"1802896", "legs":[ { "px":"0.323", "sz":"25.0", "instId":"BTC-USD-20220114-13250-C", "side":"sell", "tradeId":"15102" }, { "px":"0.666", "sz":"25", "instId":"BTC-USD-20220114-21125-C", "side":"buy", "tradeId":"15103" } ] } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name data Array Subscribed data > cTime String The time the trade was executed. Unix timestamp in milliseconds. > blockTdId String Block trade ID. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg. >> side String The direction of the leg from the Takers perspective. Valid value can be buy or sell. >> tradeId String Last traded ID. PUBLIC BLOCK TRADES CHANNEL Retrieve the recent block trades data by individual legs. Each leg in a block trade is pushed in a separate update. Data will be pushed whenever there is a block trade. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "public-block-trades", "instId": "BTC-USDT-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name public-block-trades > instId String Yes Instrument ID, e.g. BTC-USDT-SWAP. > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "public-block-trades", "instId": "BTC-USDT-SWAP", "connId": "a4d3ae55" } } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"args\":[{ \"channel\" : \"public-block-trades\""}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name public-block-trades > instId String Yes Instrument ID, e.g. BTC-USDT-SWAP. code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"public-block-trades", "instId":"BTC-USD-231020-5000-P" }, "data":[ { "fillVol":"5", "fwdPx":"26808.16", "idxPx":"27222.5", "instId":"BTC-USD-231020-5000-P", "markPx":"0.0022406326071111", "px":"0.0048", "side":"buy", "sz":"1", "tradeId":"633971452580106242", "ts":"1697422572972" } ] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID, e.g. BTC-USDT-SWAP. data Array Information of the public trade object. > instId String Instrument ID, e.g. BTC-USDT-SWAP. > tradeId String Trade ID, generated by counter. > px String The price the leg executed. > sz String Trade size. > side String Trade direction, buy, sell, from taker perspective. > fillVol String Implied volatility Only applicable to OPTION > fwdPx String Forward price Only applicable to options > idxPx String Index price Applicable to FUTURES, SWAP, OPTION > markPx String Mark price Applicable to FUTURES, SWAP, OPTION > ts String Filled time, Unix timestamp format in milliseconds, e.g. 1597026383085. BLOCK TICKERS CHANNEL Retrieve the latest block trading volume in the last 24 hours. The data will be pushed when triggered by transaction execution event. In addition, it will also be pushed in 5 minutes interval according to subscription granularity. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "block-tickers", "instId": "BTC-USDT" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name block-tickers > instId String Yes Instrument ID e.g. BTC-USDT-SWAP > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "block-tickers", "instId": "LTC-USD-200327" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"block-tickers\", \"instId\" : \"LTC-USD-200327\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name block-tickers > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "block-tickers" }, "data": [ { "instType": "SWAP", "instId": "LTC-USD-SWAP", "volCcy24h": "0", "vol24h": "0", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instId String Instrument ID > instType String Instrument type > volCcy24h String 24h trading volume, with a unit of currency. If it is a derivatives contract, the value is the number of base currency. If it is SPOT/MARGIN, the value is the quantity in quote currency. > vol24h String 24h trading volume, with a unit of contract. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > ts String Block ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 SPREAD TRADING This product is currently only available for whitelisted users. [Apply for use] (https://okx.typeform.com/to/Tml7LHN0?typeform-source=www.okx.com). 👉 The Spread Orderbook product enables users to post or consume liquidity on spreads for large sizes that are guaranteed atomic execution. Benefits include simplified futures rolls, funding arbitrage, yield enhancement, and speculation on basis and term structures. INTRODUCTION BASIC CONCEPTS 1. Spread - Entering a trade where the trader is long one instrument and short an offsetting quantity of a related instrument, forming a trade with two risk offsetting legs. 2. Order-book - A collection of offers to trade an instrument or basket. Each offer contains a defined instrument or group of instruments, relevant quantity, and the price at which the offerer is willing to transact. Takers can then immediately consume these offers up to the full amount of quantity listed at the offered price. The pending order limit of spread trading is 500 across all spreads. HIGH LEVEL WORKFLOW Nitro Spreads is centered around the familiar concept of a Central Limit Order Book (CLOB). * Spreads consist of instruments sourced from OKX where they are cleared and settled. * Anyone can act as a "Taker," who consumes an existing resting order, or a "Maker," whose order is consumed. * Trades take place when orders are crossed. Trades are then sent for clearing and settlement on OKX. At a high level, the Nitro Spreads workflow is as follows: 1. Maker rests a Limit Order upon a Spread's Order Book. 2. Taker consumes a resting Order via a Limit Order. 3. The crossed orders are sent for clearing and settlement. 4. The Taker and Maker receive confirmation of the success or rejection of the Trade. 5. All users are notified of successfully settled & cleared Trades, minus the counterparties or sides (buy / sell) involved. Key aspects of Nitro Spreads: * All Spreads have publicly accessible Central Limit Order Books (CLOB). * The availability of trading Spreads is determined by OKX. Typically, these Spreads encompass all possible combinations of delta one derivatives (Expiry Futures and Perpetual Futures) and SPOT within a specific instrument family (e.g. "BTC/USDT" or "ETH/USDC"). * Partial fills and multiple orders can be consumed as part of a single trade. * Counterparties are NOT selected. All Spread Order Books can be engaged by anyone, effectively trading against the broader market. * Anonymity is maintained throughout the process, with all orders and trades conducted on an anonymous basis. * Users have the flexibility to place multiple orders on both the bid and ask sides of the Order Book, allowing for a ladder-style configuration. COMPREHENSIVE API WORKFLOW Notifications regarding Orders and Trades will be received by both the Taker and the Maker through the WebSocket Notification channels. A user assumes the role of a Maker when their Order is executed upon by another Order. A user becomes a Taker when they submit an Order that crosses an existing Order in the Order Book. OBTAINING AVAILABLE SPREADS To retrieve all available Spreads for trading on OKX, make a request to the GET /api/v5/sprd/spreads endpoint. RETRIEVING YOUR ORDERS To retrieve orders on OKX, make a request to the GET /api/v5/sprd/order endpoint. RETRIEVING YOUR TRADES To retrieve trades on OKX, make a request to the GET /api/v5/sprd/trades endpoint. SUBMITTING AN ORDER To submit an order to a Spread's Order Book, make a request to the POST /api/v5/sprd/order endpoint. SPREAD STATES There are three different states during a Spread's life cycle: live, suspend, and expired as detailed below: 1. live: Spreads that are actively traded on Nitro Spreads 2. suspend: Spreads in which at least one of the legs is suspended and the other one is active or suspended on the OKX orderbook exchange; or spreads in which the underlying instruments are still live on the OKX orderbook exchange, but removed from Nitro Spreads 3. expired: Spreads in which at least one of the underlying instruments is expired on the OKX orderbook exchange Please refer to the following table for all possible scenarios given the state of the underlying instruments and the resulting state of the spread on Nitro Spreads (except for the case that the spread is delisted on Nitro Spreads): Instrument A Instrument B Spread State Live Live Live Suspend Live Suspend Live Suspend Suspend Suspend Suspend Suspend Expired Live Expired Live Expired Expired Suspend Expired Expired Expired Suspend Expired Expired Expired Expired TRADE LIFECYCLE In order for a trade to take place, two orders must be crossed within a Spread's Order Book. Obtain information about the state of an Order and determine if it has reached its final state by monitoring the sprd-ordersWebSocket channel. The state key in the channel indicates the current state of the Order. If the state is live or partially_filled, it means that the Order still has available size (sz) that the creator or another user can take action on. On the other hand, if the state is canceled or filled, the Order no longer has any available actions that the creator or any other user can take action on. It is important to closely track the values of the following attributes: sz(size),pendingFillSz (pending fill size), canceledSz (canceled size), and accFillSz(accumulated fill size). These attributes provide crucial information regarding the status and progression of the Order. ORDER STATE Track the state of an order by subscribing to the sprd-orders WebSocket channel. 1. Upon submitting an order, whether as a Maker or Taker, an order update message is sent via the orders WebSocket channel. The message will indicate the order's state == live. 2. Order matching and trade settlement are asynchronous processes. When the order is matched but not settled, system pushes pendingSettleSz > 0 and fillSz == "" 3. If the order is partially filled, an order update message is sent with state == partially_filled. 4. In the event that the order is completely filled, an order update message is sent with the state == filled. 5. If the order is not fully filled but has reached its final state, an order update message is sent with the state == canceled. 6. If a certain part of an order is rejected, an order update message is sent with updated canceledSz and pendingFillSz, and code and msg corresponding to the error. TRADE STATE Track the state of a trade by subscribing to the sprd-tradesWebSocket channel. 1. After an executed trade undergoes clearing and settlement on OKX, it reaches finality. 2. For successfully cleared trades, a WebSocket message is sent with the statedenoted as filled. 3. In the case of an unsuccessful trade clearing, a trade update message is sent with the state reflected as rejected. 4. If the trade state is rejected, the trade update message will also include the error code and a corresponding error message (msg) that explains the reason for the rejection. ALL TRADES All users have the ability to receive updates on all trades that take place through the OKX Nitro Spreads product. It's important to note that OKX Nitro Spreads does not disclose information about the counterparties involved in the trades or the individual side (buy or sell) of the composite legs that were traded. 1. By subscribing to the sprd-public-tradesWebSocket channel, WebSocket messages are sent exclusively for trades that have been successfully cleared and settled. REST API PLACE ORDER Place a new order RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/sprd/order > Request Example Copy to Clipboard# place order for a spread POST /api/v5/sprd/order body { "sprdId":"BTC-USDT_BTC-USDT-SWAP", "clOrdId":"b15", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # place order result = spreadAPI.place_order(sprdId='BTC-USDT_BTC-USDT-SWAP', clOrdId='b16',side='buy',ordType='limit', px='2',sz='2') print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String Yes spread ID, e.g. BTC-USDT_BTC-USD-SWAP clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. side String Yes Order side, buy sell ordType String Yes Order type limit: Limit order post_only: Post-only order ioc: Immediate-or-cancel order sz String Yes Quantity to buy or sell. The unit is USD for inverse spreads, and the corresponding baseCcy for linear and hybrid spreads. px String Yes Order price. Only applicable to limit, post_only, ioc > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "clOrdId": "b15", "ordId": "312269865356374016", "tag": "", "sCode": "0", "sMsg": "" } ] } RESPONSE EXAMPLE Parameter Type Description ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag sCode String The code of the event execution result, 0 means success. sMsg String Rejection or success message of event execution. clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among the clOrdIds of all pending orders. ordType Order type. When creating a new order, you must specify the order type. The order type you specify will affect: 1) what order parameters are required, and 2) how the matching system executes your order. The following are valid order types: limit: Limit order, which requires specified sz and px. post_only: Post-only order, which the order can only provide liquidity to the market and be a maker. If the order would have executed on placement, it will be canceled instead. ioc: Immediate-or-cancel order sz The sz unit for inverse spreads is USD in Nitro Spread, as opposed to contract in OKX orderbook. CANCEL ORDER Cancel an incomplete order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/sprd/cancel-order > Request Example Copy to ClipboardPOST /api/v5/sprd/cancel-order body { "ordId":"2510789768709120" } Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # cancel order result = spreadAPI.cancel_order(ordId='1905309079888199680') print(result) REQUEST PARAMETERS Parameter Type Required Description ordId String Conditional Order ID Either ordId or clOrdId is required. If both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"oktswap6", "ordId":"12345689", "sCode":"0", "sMsg":"" } ] } RESPONSE EXAMPLE Parameter Type Description ordId String Order ID clOrdId String Client Order ID as assigned by the client sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. Cancel order returns with sCode equal to 0. It is not strictly considered that the order has been canceled. It only means that your cancellation request has been accepted by the system server. The result of the cancellation is subject to the state pushed by the order channel or the get order state. CANCEL ALL ORDERS Cancel all pending orders. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/sprd/mass-cancel > Request Example Copy to ClipboardPOST /api/v5/sprd/mass-cancel body { "sprdId": "BTC-USDT_BTC-USDT-SWAP" } Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # cancel all result = spreadAPI.cancel_all_orders(sprdId="BTC-USDT_BTC-USDT-SWAP") print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String No spread ID > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "result":true } ] } RESPONSE EXAMPLE Parameter Type Description result Boolean Result of the request true, false Getting a response with result=true means your request has been successfully received and will be processed. The result of the cancellation is subject to the state pushed by the order channel or the get order state. AMEND ORDER Amend an incomplete order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/sprd/amend-order > Request Example Copy to ClipboardPOST /api/v5/sprd/amend-order body { "ordId":"2510789768709120", "newSz":"2" } RESPONSE PARAMETERS Parameter Type Required Description ordId String Conditional Order ID Either ordId or clOrdId is required. If both are passed, ordId will be used. clOrdId String Conditional Client Order ID as assigned by the client reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. The response will include the corresponding reqId to help you identify the request if you provide it in the request. newSz String Conditional New quantity after amendment Either newSz or newPx is required. When amending a partially-filled order, the newSz should include the amount that has been filled. newPx String Conditional New price after amendment Either newSz or newPx is required. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "clOrdId":"", "ordId":"12344", "reqId":"b12344", "sCode":"0", "sMsg":"" } ] } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID clOrdId String Client Order ID as assigned by the client. reqId String Client Request ID as assigned by the client for order amendment. sCode String The code of the event execution result, 0 means success. sMsg String Rejection message if the request is unsuccessful. newSz If the new quantity of the order is less than or equal to the (accFillSz + canceledSz + pendingSettleSz), after pendingSettleSz is settled, the order status will be transitioned into filled (if canceledSz = 0), or canceled (if canceledSz > 0). The amend order returns sCode equal to 0 It is not strictly considered that the order has been amended. It only means that your amend order request has been accepted by the system server. The result of the amend is subject to the status pushed by the order channel or the order status query. GET ORDER DETAILS Retrieve order details. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/sprd/order > Request Example Copy to ClipboardGET /api/v5/sprd/order?ordId=2510789768709120 Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get order details result = spreadAPI.get_order_details(ordId='1905309079888199680') print(result) REQUEST PARAMETERS Parameter Type Required Description ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used clOrdId String Conditional Client Order ID as assigned by the client. The latest order will be returned. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USD-200329", "ordId": "312269865356374016", "clOrdId": "b1", "tag": "", "px": "999", "sz": "3", "ordType": "limit", "side": "buy", "fillSz": "0", "fillPx": "", "tradeId": "", "accFillSz": "0", "pendingFillSz": "2", "pendingSettleSz": "1", "canceledSz": "1", "state": "live", "avgPx": "0", "cancelSource": "", "uTime": "1597026383085", "cTime": "1597026383085" } ] } RESPONSE EXAMPLE Parameter Type Description sprdId String spread ID ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price sz String Quantity to buy or sell ordType String Order type limit: Limit order post_only: Post-only order ioc: Immediate-or-cancel order side String Order side fillSz String Last fill quantity fillPx String Last fill price tradeId String Last trade ID accFillSz String Accumulated fill quantity pendingFillSz String Live quantity pendingSettleSz String Quantity that's pending settlement canceledSz String Quantity canceled due order cancellations or trade rejections avgPx String Average filled price. If none is filled, it will return "0". state String State canceled live partially_filled filled cancelSource String Source of the order cancellation.Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 14: Order canceled: IOC order was partially canceled due to incompletely filled 31: The post-only order will take liquidity in maker orders 34: Order failed to settle due to insufficient margin 35: Order cancellation due to insufficient margin from another order uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 Order sizes equation: pendingFillSz + canceledSz + accFillSz = sz GET ACTIVE ORDERS Retrieve all incomplete orders under the current account. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/sprd/orders-pending > Request Example Copy to ClipboardGET /api/v5/sprd/orders-pending Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get active orders result = spreadAPI.get_active_orders() print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String No spread ID, e.g. ordType String No Order type limit: Limit order post_only: Post-only order ioc: Immediate-or-cancel order state String No State live partially_filled beginId String No Start order ID the request to begin with. Pagination of data to return records newer than the requested order Id, not including beginId endId String No End order ID the request to end with. Pagination of data to return records earlier than the requested order Id, not including endId limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT_BTC-UST-SWAP", "ordId": "312269865356374016", "clOrdId": "b1", "tag": "", "px": "999", "sz": "3", "ordType": "limit", "side": "buy", "fillSz": "0", "fillPx": "", "tradeId": "", "accFillSz": "0", "pendingFillSz": "2", "pendingSettleSz": "1", "canceledSz": "1", "state": "live", "avgPx": "0", "cancelSource": "", "uTime": "1597026383085", "cTime": "1597026383085" } ] } RESPONSE EXAMPLE Parameter Type Description sprdId String spread ID ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price sz String Quantity to buy or sell ordType String Order type limit: Limit order post_only: Post-only order ioc: Immediate-or-cancel order side String Order side fillSz String Last fill quantity fillPx String Last fill price tradeId String Last trade ID accFillSz String Accumulated fill quantity pendingFillSz String Quantity still remaining to be filled pendingSettleSz String Quantity that's pending settlement canceledSz String Quantity canceled due order cancellations or trade rejections avgPx String Average filled price. If none is filled, it will return "0". state String State live partially_filled cancelSource String Source of the order cancellation.Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 14: Order canceled: IOC order was partially canceled due to incompletely filled 31: The post-only order will take liquidity in maker orders 34: Order failed to settle due to insufficient margin 35: Order cancellation due to insufficient margin from another order uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET ORDERS (LAST 21 DAYS) Retrieve the completed order data for the last 21 days, and the incomplete orders (filledSz =0 & state = canceled) that have been canceled are only reserved for 2 hours. Results are returned in counter chronological order of orders creation. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/sprd/orders-history > Request Example Copy to ClipboardGET /api/v5/sprd/orders-history Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get orders history result = spreadAPI.get_orders() print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String No spread ID, e.g. ordType String No Order type limit: limit order post_only: Post-only order ioc: Immediate-or-cancel order state String No State canceled filled beginId String No Start order ID the request to begin with. Pagination of data to return records newer than the requested order Id, not including beginId endId String No End order ID the request to end with. Pagination of data to return records earlier than the requested order Id, not including endId begin String No Filter with a begin timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085. Date older than 7 days will be truncated. end String No Filter with an end timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT_BTC-UST-SWAP", "ordId": "312269865356374016", "clOrdId": "b1", "tag": "", "px": "999", "sz": "3", "ordType": "limit", "side": "buy", "fillSz": "0", "fillPx": "", "tradeId": "", "accFillSz": "0", "pendingFillSz": "2", "pendingSettleSz": "1", "canceledSz": "1", "state": "live", "avgPx": "0", "cancelSource": "", "uTime": "1597026383085", "cTime": "1597026383085" } ] } RESPONSE EXAMPLE Parameter Type Description sprdId String spread ID ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price sz String Quantity to buy or sell ordType String Order type limit: limit order post_only: Post-only order ioc: Immediate-or-cancel order side String Order side fillSz String Last fill quantity fillPx String Last fill price tradeId String Last trade ID accFillSz String Accumulated fill quantity pendingFillSz String Quantity still remaining to be filled, inluding pendingSettleSz pendingSettleSz String Quantity that's pending settlement canceledSz String Quantity canceled due order cancellations or trade rejections avgPx String Average filled price. If none is filled, it will return "0". state String State canceled filled cancelSource String Source of the order cancellation. Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 14: Order canceled: IOC order was partially canceled due to incompletely filled 31: The post-only order will take liquidity in maker orders 34: Order failed to settle due to insufficient margin 35: Order cancellation due to insufficient margin from another order uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET ORDERS HISTORY (LAST 3 MONTHS) Retrieve the completed order data for the last 3 months, including those placed 3 months ago but completed in the last 3 months. Results are returned in counter chronological order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/sprd/orders-history-archive > Request Example Copy to ClipboardGET /api/v5/sprd/orders-history-archive REQUEST PARAMETERS Parameter Type Required Description sprdId String No spread ID, e.g. ordType String No Order type limit: limit order post_only: Post-only order ioc: Immediate-or-cancel order state String No State canceled filled instType String No Instrument type SPOT FUTURES SWAP Any orders with spreads containing the specified instrument type in any legs will be returned instFamily String No Instrument family, e.g. BTC-USDT. Any orders with spreads containing the specified instrument family in any legs will be returned beginId String No Start order ID the request to begin with. Pagination of data to return records newer than the requested order Id, not including beginId endId String No End order ID the request to end with. Pagination of data to return records earlier than the requested order Id, not including endId begin String No Filter with a begin timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT_BTC-UST-SWAP", "ordId": "312269865356374016", "clOrdId": "b1", "tag": "", "px": "999", "sz": "3", "ordType": "limit", "side": "buy", "fillSz": "0", "fillPx": "", "tradeId": "", "accFillSz": "0", "pendingFillSz": "2", "pendingSettleSz": "1", "canceledSz": "1", "state": "canceled", "avgPx": "0", "cancelSource": "", "uTime": "1597026383085", "cTime": "1597026383085" } ] } RESPONSE EXAMPLE Parameter Type Description sprdId String spread ID ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag px String Price sz String Quantity to buy or sell ordType String Order type limit: limit order post_only: Post-only order ioc: Immediate-or-cancel order side String Order side fillSz String Last fill quantity fillPx String Last fill price tradeId String Last trade ID accFillSz String Accumulated fill quantity pendingFillSz String Quantity still remaining to be filled, inluding pendingSettleSz pendingSettleSz String Quantity that's pending settlement canceledSz String Quantity canceled due order cancellations or trade rejections avgPx String Average filled price. If none is filled, it will return "0". state String State canceled filled cancelSource String Source of the order cancellation. Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 14: Order canceled: IOC order was partially canceled due to incompletely filled 31: The post-only order will take liquidity in maker orders 34: Order failed to settle due to insufficient margin 35: Order cancellation due to insufficient margin from another order uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET TRADES (LAST 7 DAYS) Retrieve historical transaction details for the last 7 days. Results are returned in counter chronological order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/sprd/trades > Request Example Copy to ClipboardGET /api/v5/sprd/trades Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get private trades result = spreadAPI.get_trades() print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String No spread ID, e.g. tradeId String No Trade ID ordId String No Order ID beginId String No Start trade ID the request to begin with. Pagination of data to return records newer than the requested tradeId, not including beginId endId String No End trade ID the request to end with. Pagination of data to return records earlier than the requested tradeId, not including endId begin String No Filter with a begin timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 end String No Filter with an end timestamp. Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT-SWAP_BTC-USDT-200329", "tradeId": "123", "ordId": "123445", "clOrdId": "b16", "tag": "", "fillPx": "999", "fillSz": "3", "state": "filled", "side": "buy", "execType": "M", "ts": "1597026383085", "legs": [ { "instId": "BTC-USDT-SWAP", "px": "20000", "sz": "3", "szCont": "0.03", "side": "buy", "fee": "", "feeCcy": "", "tradeId": "1232342342" }, { "instId": "BTC-USDT-200329", "px": "21000", "sz": "3", "szCont": "0.03", "side": "sell", "fee": "", "feeCcy": "", "tradeId": "5345646634" } ], "code": "", "msg": "" } ] } RESPONSE PARAMETERS Parameter Type Description sprdId String spread ID tradeId String Trade ID ordId String Order ID clOrdId String Client Order ID as assigned by the client tag String Order tag fillPx String Filled price fillSz String Filled quantity side String Order side, buy sell state String Trade state. Valid values are filled and rejected execType String Liquidity taker or maker, T: taker M: maker ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. legs Array of objects Legs of trade > instId String Instrument ID, e.g. BTC-USDT-SWAP > px String The price the leg executed > sz String The size of each leg > szCont String Filled amount of the contract Only applicable to contracts, return "" for spot > side String The direction of the leg. Valid value can be buy or sell. > fee String Fee. Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. > feeCcy String Fee currency > tradeId String Traded ID in the OKX orderbook. code String Error Code, the default is 0 msg String Error Message, the default is "" GET SPREADS (PUBLIC) Retrieve all available spreads based on the request parameters. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/sprd/spreads > Request Example Copy to ClipboardGET /api/v5/sprd/spreads?instId=BTC-USDT Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get spreads result = spreadAPI.get_spreads() print(result) REQUEST PARAMETERS Parameter Type Required Description baseCcy string No Currency instrument is based in, e.g. BTC, ETH instId String No The instrument ID to be included in the spread. sprdId String No The spread ID state string No Spreads which are available to trade, suspened or expired. Valid values include live, suspend and expired. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "sprdId": "ETH-USD-SWAP_ETH-USD-231229", "sprdType": "inverse", "state": "live", "baseCcy": "ETH", "szCcy": "USD", "quoteCcy": "USD", "tickSz": "0.01", "minSz": "10", "lotSz": "10", "listTime": "1686903000159", "legs": [{ "instId": "ETH-USD-SWAP", "side": "sell" }, { "instId": "ETH-USD-231229", "side": "buy" } ], "expTime": "1703836800000", "uTime": "1691376905595" }, { "sprdId": "BTC-USDT_BTC-USDT-SWAP", "sprdType": "linear", "state": "live", "baseCcy": "BTC", "szCcy": "BTC", "quoteCcy": "USDT", "tickSz": "0.0001", "minSz": "0.001", "lotSz": "1", "listTime": "1597026383085", "expTime": "1597029999085", "uTime": "1597028888085", "legs": [{ "instId": "BTC-USDT", "side": "sell" }, { "instId": "BTC-USDT-SWAP", "side": "buy" } ] }, { "sprdId": "BTC-USDT_BTC-USDT-230317", "sprdType": "linear", "state": "live", "baseCcy": "BTC", "szCcy": "BTC", "quoteCcy": "USDT", "tickSz": "0.0001", "minSz": "0.001", "lotSz": "1", "listTime": "1597026383085", "expTime": "1597029999085", "uTime": "1597028888085", "legs": [{ "instId": "BTC-USDT", "side": "sell" }, { "instId": "BTC-USDT-230317", "side": "buy" } ] } ] } RESPONSE PARAMETERS Parameter Type Description sprdId String spread ID sprdType String spread Type. Valid values are linear, inverse, hybrid state String Current state of the spread. Valid values include live, expired, suspend. baseCcy String Currency instrument is based in. Valid values include BTC, ETH szCcy String The currency the spread order size is submitted to the underlying venue in, e.g. USD, BTC, ETH. quoteCcy String The currency the spread is priced in, e.g. USDT, USD tickSz String Tick size, e.g. 0.0001 in the quoteCcy of the spread. minSz String Minimum order size in the szCcy of the spread. lotSz String The minimum order size increment the spread can be traded in the szCcy of the spread. listTime String The timestamp the spread was created. Unix timestamp format in milliseconds, , e.g. 1597026383085 expTime String Expiry time, Unix timestamp format in milliseconds, e.g. 1597026383085 uTime String The timestamp the spread was last updated. Unix timestamp format in milliseconds, e.g. 1597026383085 legs array of objects > instId String Instrument ID, e.g. BTC-USD-SWAP > side String The direction of the leg of the spread. Valid Values include buy and sell. GET ORDER BOOK (PUBLIC) Retrieve the order book of the spread. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/sprd/books > Request Example Copy to ClipboardGET /api/v5/sprd/books?sprdId=BTC-USDT_BTC-USDT-SWAP Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get order book result = spreadAPI.get_order_book(sprdId="BTC-USDT_BTC-USDT-SWAP", sz=20) print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String Yes spread ID, e.g. BTC-USDT_BTC-USDT-SWAP sz String No Order book depth per side. Maximum value is 400. Default value is 5. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "asks": [ [ "41006.8", // price "0.60038921", // quantity "1" // number of orders at the price ] ], "bids": [ [ "41006.3", "0.30178218", "2" ] ], "ts": "1629966436396" } ] } RESPONSE PARAMETERS Parameter Type Description asks Array Order book on sell side bids Array Order book on buy side ts String Order book generation time An example of the array of asks and bids values: ["411.8", "10", "4"] - "411.8" is the depth price - "10" is the quantity at the price (Unit: szCcy) - "4" is the number of orders at the price. GET TICKER (PUBLIC) Retrieve the latest price snapshot, best bid/ask price and quantity. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/sprd-ticker > Request Example Copy to ClipboardGET /api/v5/market/sprd-ticker?sprdId=BTC-USDT_BTC-USDT-SWAP REQUEST PARAMETERS Parameter Type Required Description sprdId String Yes spread ID, e.g. BTC-USDT_BTC-USDT-SWAP > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT_BTC-USDT-SWAP", "last": "14.5", "lastSz": "0.5", "askPx": "8.5", "askSz": "12.0", "bidPx": "0.5", "bidSz": "12.0", "open24h": "4", "high24h": "14.5", "low24h": "-2.2", "vol24h": "6.67", "ts": "1715331406485" } ] } RESPONSE PARAMETERS Parameter Type Description sprdId String spread ID last String Last traded price lastSz String Last traded size askPx String Best ask price askSz String Best ask size bidPx String Best bid price bidSz String Best bid size open24h String Open price in the past 24 hours high24h String Highest price in the past 24 hours low24h String Lowest price in the past 24 hours vol24h String 24h trading volume, in szCcy ts String Ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET PUBLIC TRADES (PUBLIC) Retrieve the recent transactions of an instrument (at most 500 records per request). Results are returned in counter chronological order. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/sprd/public-trades > Request Example Copy to ClipboardGET /api/v5/sprd/public-trades?sprdId=BTC-USDT_BTC-USDT-SWAP Copy to Clipboardimport okx.SpreadTrading as SpreadTrading # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading:0 , demo trading:1 spreadAPI = SpreadTrading.SpreadTradingAPI(apikey, secretkey, passphrase, False, flag) # get public trades result = spreadAPI.get_public_trades(sprdId='ETH-USDT-SWAP_ETH-USDT-230929') print(result) REQUEST PARAMETERS Parameter Type Required Description sprdId String No Spread ID, e.g. BTC-USDT_BTC-USDT-SWAP > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "sprdId": "BTC-USDT_BTC-USDC-SWAP", "side": "sell", "sz": "0.1", "px": "964.1", "tradeId": "242720719", "ts": "1654161641568" } ] } RESPONSE PARAMETERS Parameter Type Description sprdId String spread ID tradeId String Trade ID px String Trade price sz String Trade quantity side String Trade side of the taker. buy sell ts String Trade time, Unix timestamp format in milliseconds, e.g. 1597026383085. GET CANDLESTICKS Retrieve the candlestick charts. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. RATE LIMIT: 40 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/sprd-candles > Request Example Copy to ClipboardGET /api/v5/market/sprd-candles?sprdId=BTC-USDT_BTC-USDT-SWAP REQUEST PARAMETERS Parameter Type Required Description sprdId String Yes Spread ID bar String No Bar size, the default is 1m, e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line:[6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening price k-line:[/6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually limit String No Number of results per request. The maximum is 300. The default is 100. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "8422410", "0" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "24912403", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price vol String Trading volume confirm String The state of candlesticks. 0 represents that it is uncompleted 1 represents that it is completed. The first candlestick data may be incomplete, and should not be polled repeatedly. The data returned will be arranged in an array like this: [ts,o,h,l,c,vol,confirm]. GET CANDLESTICKS HISTORY Retrieve history candlestick charts from recent years. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/sprd-history-candles > Request Example Copy to ClipboardGET /api/v5/market/sprd-history-candles?sprdId=BTC-USDT_BTC-USDT-SWAP REQUEST PARAMETERS Parameter Type Required Description sprdId String Yes Spread ID after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m, e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line:[6H/12H/1D/2D/3D/1W/1M/3M] UTC time opening price k-line:[6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/1Wutc/1Mutc/3Mutc] limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "8422410", "1" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "24912403", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String Highest price l String Lowest price c String Close price vol String Trading volume confirm String The state of candlesticks. 0 represents that it is uncompleted 1 represents that it is completed. The data returned will be arranged in an array like this: [ts,o,h,l,c,vol,confirm] CANCEL ALL AFTER Cancel all pending orders after the countdown timeout. Only applicable to spread trading. RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/sprd/cancel-all-after > Request Example Copy to ClipboardPOST /api/v5/sprd/cancel-all-after { "timeOut":"30" } REQUEST PARAMETERS Parameter Type Required Description timeOut String Yes The countdown for order cancellation, with second as the unit. Range of value can be 0, [10, 120]. Setting timeOut to 0 disables Cancel All After. > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "triggerTime":"1587971460", "ts":"1587971400" } ] } RESPONSE PARAMETERS Parameter Type Description triggerTime String The time the cancellation is triggered. triggerTime=0 means Cancel All After is disabled. ts String The time the request is received. Users are recommended to send a request to the exchange every second. When the cancel all after is triggered, the trading engine will cancel orders on behalf of the client one by one and this operation may take up to a few seconds. This feature is intended as a protection mechanism for clients only and clients should not use this feature as part of their trading strategies. WEBSOCKET TRADE API WS / PLACE ORDER You can place an order only if you have sufficient funds. URL PATH /ws/v5/business (required login) RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID Rate limit is shared with the Nitro Spread `Place order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1512", "op": "sprd-order", "args": [ { "sprdId":"BTC-USDT_BTC-USDT-SWAP", "clOrdId":"b15", "side":"buy", "ordType":"limit", "px":"2.15", "sz":"2" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation sprd-order args Array Yes Request parameters > sprdId String Yes spread ID, e.g. BTC-USDT_BTC-USD-SWAP > clOrdId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > side String Yes Order side buy sell > ordType String Yes Order type: limit: Limit order post_only: Post-only order ioc: Immediate-or-cancel order > sz String Yes Quantity to buy or sell > px String Yes Order price. Only applicable to limit, post_only, ioc order. > SUCCESSFUL RESPONSE EXAMPLE Copy to Clipboard{ "id": "1512", "op": "sprd-order", "data": [ { "clOrdId": "", "ordId": "12345689", "tag": "", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "" } > Failure Response Example Copy to Clipboard{ "id": "1512", "op": "sprd-order", "data": [ { "clOrdId": "", "ordId": "", "tag": "", "sCode": "5XXXX", "sMsg": "not exist" } ], "code": "1", "msg": "" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "sprd-order", "data": [], "code": "60013", "msg": "Invalid args" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > sCode String Order status code, 0 means success > sMsg String Rejection or success message of event execution. clOrdId clOrdId is a user-defined unique ID used to identify the order. It will be included in the response parameters if you have specified during order submission, and can be used as a request parameter to the endpoints to query, cancel and amend orders. clOrdId must be unique among the clOrdIds of all pending orders. WS / AMEND ORDER Amend an incomplete order. URL PATH /ws/v5/business (required login) RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID Rate limit is shared with the `Amend order` REST API endpoints > Request Example Copy to Clipboard{ "id":"1512", "op":"sprd-amend-order", "args":[ { "ordId":"2510789768709120", "newSz":"2" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the messageProvided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation sprd-amend-order args Array Yes Request Parameters > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used. > clOrdId String Conditional Client Order ID as assigned by the client > reqId String No Client Request ID as assigned by the client for order amendment A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > newSz String Conditional New quantity after amendment. Either newSz or newPx is required. When amending a partially-filled order, the newSz should include the amount that has been filled and failed. > newPx String Conditional New price after amendment. > Successful Response Example Copy to Clipboard{ "id": "1512", "op": "sprd-amend-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "reqId": "b12344", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "" } > Failure Response Example Copy to Clipboard{ "id": "1512", "op": "sprd-amend-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "reqId": "b12344", "sCode": "5XXXX", "sMsg": "order not exist" } ], "code": "1", "msg": "" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "sprd-amend-order", "data": [], "code": "60013", "msg": "Invalid args" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > reqId String Client Request ID as assigned by the client for order amendment > sCode String Order status code, 0 means success > sMsg String Order status message newSz If the new quantity of the order is less than or equal to the (accFillSz + canceledSz + pendingSettleSz), after pendingSettleSz is settled, the order status will be transitioned into filled (if canceledSz = 0), or canceled (if canceledSz > 0). The amend order returns sCode equal to 0 It is not strictly considered that the order has been amended. It only means that your amend order request has been accepted by the system server. The result of the amend is subject to the status pushed by the order channel or the order status query. WS / CANCEL ORDER Cancel an incomplete order URL PATH /ws/v5/business (required login) RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID Rate limit is shared with the Nitro Spread `Cancel order` REST API endpoints > Request Example Copy to Clipboard{ "id": "1514", "op": "sprd-cancel-order", "args": [ { "ordId": "2510789768709120" } ] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message provided by client. It will be returned in response message for identifying the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation sprd-cancel-order args Array Yes Request Parameters > ordId String Conditional Order ID Either ordId or clOrdId is required, if both are passed, ordId will be used > clOrdId String Conditional Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Successful Response Example Copy to Clipboard{ "id": "1514", "op": "sprd-cancel-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "sCode": "0", "sMsg": "" } ], "code": "0", "msg": "" } > Failure Response Example Copy to Clipboard{ "id": "1514", "op": "sprd-cancel-order", "data": [ { "clOrdId": "", "ordId": "2510789768709120", "sCode": "5XXXX", "sMsg": "Order not exist" } ], "code": "1", "msg": "" } > Response Example When Format Error Copy to Clipboard{ "id": "1514", "op": "sprd-cancel-order", "data": [], "code": "60013", "msg": "Invalid args" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > sCode String Order status code, 0 means success > sMsg String Order status message Cancel order returns with sCode equal to 0. It is not strictly considered that the order has been canceled. It only means that your cancellation request has been accepted by the system server. The result of the cancellation is subject to the state pushed by the sprd-orders channel or the get order state. WS / CANCEL ALL ORDERS URL PATH /ws/v5/business (required login) RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID > Request Example Copy to Clipboard{ "id": "1512", "op": "sprd-mass-cancel", "args": [{ "sprdId": "BTC-USDT_BTC-USDT-SWAP" }] } REQUEST PARAMETERS Parameter Type Required Description id String Yes Unique identifier of the message provided by client. It will be returned in response message to identify the corresponding request. A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. op String Yes Operation sprd-mass-cancel args Array Yes Request parameters > sprdId String No spread ID > SUCCESSFUL RESPONSE EXAMPLE Copy to Clipboard{ "id": "1512", "op": "sprd-mass-cancel", "data": [ { "result": true } ], "code": "0", "msg": "" } > Response Example When Format Error Copy to Clipboard{ "id": "1512", "op": "sprd-mass-cancel", "data": [], "code": "60013", "msg": "Invalid args" } RESPONSE PARAMETERS Parameter Type Description id String Unique identifier of the message op String Operation code String Error Code msg String Error message data Array Data > result Boolean Result of the request true, false WEBSOCKET PRIVATE CHANNEL * Production Trading URL: wss://ws.okx.com:8443/ws/v5/business * AWS Production Trading URL: wss://wsaws.okx.com:8443/ws/v5/business * Demo Trading URL: wss://wspap.okx.com:8443/ws/v5/business ORDER CHANNEL Retrieve order information from the sprd-order Websocket channel. Data will not be pushed when first subscribed. Data will only be pushed when triggered by events such as placing/canceling order. URL PATH /ws/v5/business (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-orders", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } > Request Example: Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-orders", } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name sprd-orders > sprdId String No Spread ID > Successful Response Example : single Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders", "sprdId": "BTC-USDT_BTC-UST-SWAP" }, "connId": "a4d3ae55" } > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "orders" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"orders\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Required Type Description event Yes String Event subscribe unsubscribe error arg No Object Subscribed channel > channel Yes String Channel name > sprdId No String Spread ID code No String Error code msg No String Error message connId String Yes WebSocket connection ID > Push Data Example: single Copy to Clipboard{ "arg": { "channel": "sprd-orders", "sprdId": "BTC-USDT_BTC-USDT-SWAP", "uid": "614488474791936" }, "data": [ { "sprdId": "BTC-USDT_BTC-UST-SWAP", "ordId": "312269865356374016", "clOrdId": "b1", "tag": "", "px": "999", "sz": "3", "ordType": "limit", "side": "buy", "fillSz": "0", "fillPx": "", "tradeId": "", "accFillSz": "0", "pendingFillSz": "2", "pendingSettleSz": "1", "canceledSz": "1", "state": "live", "avgPx": "0", "cancelSource": "", "uTime": "1597026383085", "cTime": "1597026383085", "code": "0", "msg": "", "reqId": "", "amendResult": "" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > sprdId String spread ID data Array Subscribed data > sprdId String spread ID, e.g. > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > px String Order price > sz String The original order quantity, in the unit of szCcy > ordType String Order type limit: limit order post_only: Post-only order ioc: Immediate-or-cancel order > side String Order side, buy sell > fillSz String Last trade quantity, only applicable to order updates representing successful settlement > fillPx String Last trade price, only applicable to order updates representing successful settlement > tradeId String Last trade ID > accFillSz String Accumulated fill quantity > pendingFillSz String Quantity still remaining to be filled > pendingSettleSz String Quantity that's pending settlement > canceledSz String Quantity canceled due order cancellations or trade rejections > avgPx String Average filled price. If none is filled, it will return "0". > state String Order state: canceled live partially_filled filled > cancelSource String Source of the order cancellation.Valid values and the corresponding meanings are: 0: Order canceled by system 1: Order canceled by user 14: Order canceled: IOC order was partially canceled due to incompletely filled 31: The post-only order will take liquidity in maker orders 34: Order failed to settle due to insufficient margin 35: Order cancellation due to insufficient margin from another order > uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > cTime String Creation time, Unix timestamp format in milliseconds, e.g. 1597026383085 > code String Error Code, the default is 0 > msg String Error Message, the default is "" > reqId String Client Request ID as assigned by the client for order amendment. "" will be returned if there is no order amendment. > amendResult String The result of amending the order -1: failure 0: success "" will be returned if there is no order amendment. TRADES CHANNEL All updates relating to User's Trades are sent through the sprd-trades WebSocket Notifications channel. This is a private channel and consumable solely by the authenticated user. Updates received through the sprd-trades WebSocket Notification channel can include Trades being filled or rejected. You may receive multiple notifications if an Order of yours interacts with more than one other Order. URL PATH /ws/v5/business (required login) > Request Example : single Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-trades", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } > Request Example: Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-trades", } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name sprd-trades > sprdId String No Spread ID RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > sprdId String No Spread ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "sprd-trades", "sprdId": "BTC-USDT_BTC-USDT-SWAP", "uid": "614488474791936" }, "data":[ { "sprdId":"BTC-USDT-SWAP_BTC-USDT-200329", "tradeId":"123", "ordId":"123445", "clOrdId": "b16", "tag":"", "fillPx":"999", "fillSz":"3", "state": "filled", "side":"buy", "execType":"M", "ts":"1597026383085", "legs": [ { "instId": "BTC-USDT-SWAP", "px": "20000", "sz": "3", "szCont": "0.03", "side": "buy", "fee": "", "feeCcy": "", "tradeId": "1232342342" }, { "instId": "BTC-USDT-200329", "px": "21000", "sz": "3", "szCont": "0.03", "side": "sell", "fee": "", "feeCcy": "", "tradeId": "5345646634" }, ] "code": "", "msg": "" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > sprdId String spread ID data Array Subscribed data > sprdId String spread ID > tradeId String Trade ID > ordId String Order ID > clOrdId String Client Order ID as assigned by the client > tag String Order tag > fillPx String Last filled price > fillSz String Last filled quantity > side String Order side, buy sell > state String Trade state. Valid values are filled and rejected > execType String Liquidity taker or maker T: taker M: maker >ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085. > legs Array of objects Legs of trade >> instId String Instrument ID, e.g. BTC-USDT-SWAP >> px String The price the leg executed >> sz String Size of the leg in contracts or spot. >> szCont String Filled amount of the contract Only applicable to contracts, return "" for spot >> side String The direction of the leg. Valid value can be buy or sell. >> fee String Fee. Negative number represents the user transaction fee charged by the platform. Positive number represents rebate. >> feeCcy String Fee currency >> tradeId String Traded ID in the OKX orderbook. > code String Error Code, the default is 0 > msg String Error Message, the default is "" WEBSOCKET PUBLIC CHANNEL * Production Trading URL: wss://ws.okx.com:8443/ws/v5/business * AWS Production Trading URL: wss://wsaws.okx.com:8443/ws/v5/business * Demo Trading URL: wss://wspap.okx.com:8443/ws/v5/business ORDER BOOK CHANNEL Retrieve order book data. Available channels: * sprd-bbo-tbt: 1 depth level snapshot will be pushed in the initial push. Snapshot data will be pushed every 10 ms when there are changes in the 1 depth level snapshot. * sprd-books5: 5 depth levels snapshot will be pushed in the initial push. Snapshot data will be pushed every 100 ms when there are changes in the 5 depth levels snapshot. * sprd-books-l2-tbt: 400 depth levels will be pushed in the initial full snapshot. Incremental data will be pushed every 10 ms for the changes in the order book during that period of time. * The push sequence for order book channels within the same connection and trading symbols is fixed as: sprd-bbo-tbt -> sprd-books-l2-tbt -> sprd-books5. URL PATH /ws/v5/business > Request Example: sprd-books5 Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-books5", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } > Request Example: sprd-books-l2-tbt Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-books-l2-tbt", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name > sprdId String Yes spread ID > Successful Response Example: sprd-books5 Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "sprd-books5", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "connId": "a4d3ae55" } > Successful Response Example: sprd-books-l2-tbt Copy to Clipboard{ "event":"subscribe", "arg":{ "channel":"sprd-books-l2-tbt", "sprdId":"BTC-USDT_BTC-USDT-SWAP" }, "connId":"214fdd24" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"args\":[{ \"channel\" : \"books\", \"sprdId\" : \"BTC-USD_BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > sprdId String Yes spread ID msg String No Error message code String No Error code connId String Yes WebSocket connection ID > Push Data Example: sprd-books5 Copy to Clipboard{ "arg": { "channel": "sprd-books5", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "data": [ { "asks": [ ["111.06","55154","2"], ["111.07","53276","2"], ["111.08","72435","2"], ["111.09","70312","2"], ["111.1","67272","2"]], "bids": [ ["111.05","57745","2"], ["111.04","57109","2"], ["111.03","69563","2"], ["111.02","71248","2"], ["111.01","65090","2"]], "ts": "1670324386802" } ] } > Push Data Example: sprd-books-l2-tbt Copy to Clipboard{ "arg":{ "channel":"sprd-books-l2-tbt", "sprdId":"BTC-USDT_BTC-USDT-SWAP" }, "action":"snapshot", "data":[ { "asks":[ ["1.9","1.1","3"], ["2.5","0.9","1"], ["3.2","4.921","1"], ["4.8","0.165","1"], ["5.2","4.921","1"] ...... ], "bids":[ ["1.8","0.165","1"], ["0.6","0.2","2"], ["0","23.49","1"], ["-0.1","1","1"], ["-0.6","1","1"], ["-3.9","4.921","1"] ...... ], "ts":"1724391380926", "checksum":-1285595583, "prevSeqId":-1, "seqId":1724294007352168320 } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > sprdId String spread ID action String Push data action, incremental data or full snapshot. snapshot: full update: incremental data Array Subscribed data > asks Array Order book on sell side > bids Array Order book on buy side > ts String Order book generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 > checksum Integer Checksum, implementation details below. Only applicable to sprd-books-l2-tbt. > prevSeqId Integer Sequence ID of the last sent message. Only applicable to sprd-books-l2-tbt. > seqId Integer Sequence ID of the current message, implementation details below. Only applicable to sprd-books-l2-tbt. An example of the array of asks and bids values: ["411.8", "10", "4"] - "411.8" is the depth price - "10" is the quantity at the price (Unit: szCcy) - "4" is the number of orders at the price. SEQUENCE ID seqId is the sequence ID of the market data published. The set of sequence ID received by users is the same if users are connecting to the same channel through multiple websocket connections. Each sprdId has an unique set of sequence ID. Users can use prevSeqId and seqId to build the message sequencing for incremental order book updates. Generally the value of seqId is larger than prevSeqId. The prevSeqId in the new message matches with seqId of the previous message. The smallest possible sequence ID value is 0, except in snapshot messages where the prevSeqId is always -1. Exceptions: 1. If there are no updates to the depth for an extended period, OKX will send a message with 'asks': [], 'bids': [] to inform users that the connection is still active. seqId is the same as the last sent message and prevSeqId equals to seqId. 2. The sequence number may be reset due to maintenance, and in this case, users will receive an incremental message with seqId smaller than prevSeqId. However, subsequent messages will follow the regular sequencing rule. EXAMPLE 1. Snapshot message: prevSeqId = -1, seqId = 10 2. Incremental message 1 (normal update): prevSeqId = 10, seqId = 15 3. Incremental message 2 (no update): prevSeqId = 15, seqId = 15 4. Incremental message 3 (sequence reset): prevSeqId = 15, seqId = 3 5. Incremental message 4 (normal update): prevSeqId = 3, seqId = 5 CHECKSUM This mechanism can assist users in checking the accuracy of depth data. MERGING INCREMENTAL DATA INTO FULL DATA After subscribing to the incremental load push (such as books 400 levels) of Order Book Channel, users first receive the initial full load of market depth. After the incremental load is subsequently received, update the local full load. 1. If there is the same price, compare the size. If the size is 0, delete this depth data. If the size changes, replace the original data. 2. If there is no same price, sort by price (bid in descending order, ask in ascending order), and insert the depth information into the full load. CALCULATE CHECKSUM Use the first 25 bids and asks in the full load to form a string (where a colon connects the price and size in an ask or a bid), and then calculate the CRC32 value (32-bit signed integer). PUBLIC TRADES CHANNEL Retrieve the recent trades data from sprd-public-trades. Data will be pushed whenever there is a trade. Every update contains only one trade. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-public-trades", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name sprd-public-trades > sprdId String Yes spread ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "sprd-public-trades", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"trades\", \"instId\" : \"BTC-USD-191227\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > sprdId String Yes spread ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "sprd-public-trades", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "data": [ { "sprdId": "BTC-USDT_BTC-USDT-SWAP", "tradeId": "2499206329160695808", "px": "-10", "sz": "0.001", "side": "sell", "ts": "1726801105519" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > sprdId String spread ID data Array Subscribed data > sprdId String spread ID, e.g. > tradeId String Trade ID > px String Trade price > sz String Trade size > side String Trade direction, buy, sell > ts String Filled time, Unix timestamp format in milliseconds, e.g. 1597026383085 TICKERS CHANNEL Retrieve the last traded price, bid price, ask price. The fastest rate is 1 update/100ms. There will be no update if the event is not triggered. The events which can trigger update: trade, the change on best ask/bid price URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "sprd-tickers", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name sprd-tickers > sprdId String Yes spread ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "sprd-tickers", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"tickers\", \"instId\" : \"LTC-USD-200327\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > sprdId String Yes spread ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "sprd-tickers", "sprdId": "BTC-USDT_BTC-USDT-SWAP" }, "data": [ { "sprdId": "BTC-USDT_BTC-USDT-SWAP", "last": "4", "lastSz": "0.01", "askPx": "19.7", "askSz": "5.79", "bidPx": "5.9", "bidSz": "5.79", "open24h": "-7", "high24h": "19.6", "low24h": "-7", "vol24h": "9.87", "ts": "1715247061026" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > sprdId String spread ID data Array Subscribed data > sprdId String spread ID > last String Last traded price > lastSz String Last traded size > askPx String Best ask price > askSz String Best ask size > bidPx String Best bid price > bidSz String Best bid size > open24h String Open price in the past 24 hours > high24h String Highest price in the past 24 hours > low24h String Lowest price in the past 24 hours > vol24h String 24h trading volume, with a unit of base currency or USD > ts String Ticker data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 vol24h For Spot vs USDT-margined contracts spread and USDT-margined contracts spread, the volume is with the unit of base currency; for Crypto-margined contracts spread, the volume is with the unit of USD. CANDLESTICKS CHANNEL Retrieve the candlesticks data of an instrument. The push frequency is the fastest interval 1 second push the data. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op":"subscribe", "args":[ { "channel":"sprd-candle1D", "sprdId":"BTC-USDT_BTC-USDT-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation, subscribe unsubscribe args Array Yes List of subscribed channels channel String Yes Channel name sprd-candle3M sprd-candle1M sprd-candle1W sprd-candle1D sprd-candle2D sprd-candle3D sprd-candle5D sprd-candle12H sprd-candle6H sprd-candle4H sprd-candle2H sprd-candle1H sprd-candle30m sprd-candle15m sprd-candle5m sprd-candle3m sprd-candle1m sprd-candle3Mutc sprd-candle1Mutc sprd-candle1Wutc sprd-candle1Dutc sprd-candle2Dutc sprd-candle3Dutc sprd-candle5Dutc sprd-candle12Hutc sprd-candle6Hutc sprdId String Yes Spread ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "sprd-candle1D", "sprdId": "BTC-USDT_BTC-USDT-SWAP" } } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"candle1D\", \"instId\" : \"BTC-USD-191227\"}]}" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event, subscribe unsubscribe error arg Object No Subscribed channel channel String yes channel name sprdId String Yes Spread ID code String No Error code msg String No Error message > Push Data Example Copy to Clipboard{ "arg": { "channel": "sprd-candle1D", "sprdId": "BTC-USDT_BTC-USD-SWAP" }, "data": [ [ "1597026383085", "8533.02", "8553.74", "8527.17", "8548.26", "45247", "0" ] ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > sprdId String Spread ID data Array Subscribed data > ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 > o String Open price > h String highest price > l String Lowest price > c String Close price > vol String Trading volume, in szCcy > confirm String The state of candlesticks.0 represents that it is uncompleted, 1 represents that it is completed. The data returned will be arranged in an array like this: [ts,o,h,l,c,vol,confirm] PUBLIC DATA The API endpoints of Public Data do not require authentication. REST API GET INSTRUMENTS Retrieve a list of instruments with open contracts. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTTYPE HTTP REQUEST GET /api/v5/public/instruments > Request Example Copy to ClipboardGET /api/v5/public/instruments?instType=SPOT Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve a list of instruments with open contracts result = publicDataAPI.get_instruments( instType="SPOT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SPOT: Spot MARGIN: Margin SWAP: Perpetual Futures FUTURES: Expiry Futures OPTION: Option uly String Conditional Underlying Only applicable to FUTURES/SWAP/OPTION.If instType is OPTION, either uly or instFamily is required. instFamily String Conditional Instrument family Only applicable to FUTURES/SWAP/OPTION. If instType is OPTION, either uly or instFamily is required. instId String No Instrument ID > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "alias": "", "baseCcy": "BTC", "category": "1", "ctMult": "", "ctType": "", "ctVal": "", "ctValCcy": "", "expTime": "", "instFamily": "", "instId": "BTC-USDT", "instType": "SPOT", "lever": "10", "listTime": "1606468572000", "lotSz": "0.00000001", "maxIcebergSz": "9999999999.0000000000000000", "maxLmtAmt": "1000000", "maxLmtSz": "9999999999", "maxMktAmt": "1000000", "maxMktSz": "", "maxStopSz": "", "maxTriggerSz": "9999999999.0000000000000000", "maxTwapSz": "9999999999.0000000000000000", "minSz": "0.00001", "optType": "", "quoteCcy": "USDT", "settleCcy": "", "state": "live", "ruleType": "normal", "stk": "", "tickSz": "0.1", "uly": "" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID, e.g. BTC-USD-SWAP uly String Underlying, e.g. BTC-USD Only applicable to MARGIN/FUTURES/SWAP/OPTION instFamily String Instrument family, e.g. BTC-USD Only applicable to MARGIN/FUTURES/SWAP/OPTION category String Currency category. Note: this parameter is already deprecated baseCcy String Base currency, e.g. BTC inBTC-USDT Only applicable to SPOT/MARGIN quoteCcy String Quote currency, e.g. USDT in BTC-USDT Only applicable to SPOT/MARGIN settleCcy String Settlement and margin currency, e.g. BTC Only applicable to FUTURES/SWAP/OPTION ctVal String Contract value Only applicable to FUTURES/SWAP/OPTION ctMult String Contract multiplier Only applicable to FUTURES/SWAP/OPTION ctValCcy String Contract value currency Only applicable to FUTURES/SWAP/OPTION optType String Option type, C: Call P: put Only applicable to OPTION stk String Strike price Only applicable to OPTION listTime String Listing time, Unix timestamp format in milliseconds, e.g. 1597026383085 expTime String Expiry time Applicable to SPOT/MARGIN/FUTURES/SWAP/OPTION. For FUTURES/OPTION, it is natural delivery/exercise time. It is the instrument offline time when there is SPOT/MARGIN/FUTURES/SWAP/ manual offline. Update once change. lever String Max Leverage, Not applicable to SPOT, OPTION tickSz String Tick size, e.g. 0.0001 For Option, it is minimum tickSz among tick band, please use "Get option tick bands" if you want get option tickBands. lotSz String Lot size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. minSz String Minimum order size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. ctType String Contract type linear: linear contract inverse: inverse contract Only applicable to FUTURES/SWAP alias String Alias this_week next_week this_month next_month quarter next_quarter Only applicable to FUTURES Not recommended for use, users are encouraged to rely on the expTime field to determine the delivery time of the contract state String Instrument status live suspend preopen. e.g. There will be preopen before the Futures and Options new contracts state is live. test: Test pairs, can't be traded ruleType String Trading rule types normal: normal trading pre_market: pre-market trading maxLmtSz String The maximum order quantity of a single limit order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxMktSz String The maximum order quantity of a single market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. maxLmtAmt String Max USD amount for a single limit order maxMktAmt String Max USD amount for a single market order Only applicable to SPOT/MARGIN maxTwapSz String The maximum order quantity of a single TWAP order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. The minimum order quantity of a single TWAP order is minSz*2 maxIcebergSz String The maximum order quantity of a single iceBerg order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxTriggerSz String The maximum order quantity of a single trigger order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. maxStopSz String The maximum order quantity of a single stop market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. When a new contract is going to be listed, the instrument data of the new contract will be available with status preopen. When a product is going to be delisted (e.g. when a FUTURES contract is settled or OPTION contract is exercised), the instrument will not be available GET DELIVERY/EXERCISE HISTORY Retrieve delivery records of Futures and exercise records of Options in the last 3 months. RATE LIMIT: 40 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + (INSTRUMENTTYPE + ULY) HTTP REQUEST GET /api/v5/public/delivery-exercise-history > Request Example Copy to ClipboardGET /api/v5/public/delivery-exercise-history?instType=OPTION&uly=BTC-USD Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve delivery records of Futures and exercise records of Options in the last 3 months result = publicDataAPI.get_delivery_exercise_history( instType="FUTURES", uly="BTC-USD" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type FUTURES OPTION uly String Conditional Underlying, only applicable to FUTURES/OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. instFamily String Conditional Instrument family, only applicable to FUTURES/OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ts":"1597026383085", "details":[ { "type":"delivery", "insId":"BTC-USD-190927", "px":"0.016" } ] }, { "ts":"1597026383085", "details":[ { "insId":"BTC-USD-200529-6000-C", "type":"exercised", "px":"0.016" }, { "insId":"BTC-USD-200529-8000-C", "type":"exercised", "px":"0.016" } ] } ] } RESPONSE PARAMETERS Parameter Type Description ts String Delivery/exercise time, Unix timestamp format in milliseconds, e.g. 1597026383085 details String Delivery/exercise details > insId String Delivery/exercise contract ID > px String Delivery/exercise price > type String Type delivery exercised expired_otm:Out of the money GET OPEN INTEREST Retrieve the total open interest for contracts on OKX. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +INSTRUMENTID HTTP REQUEST GET /api/v5/public/open-interest > Request Example Copy to ClipboardGET /api/v5/public/open-interest?instType=SWAP Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve the total open interest for contracts on OKX result = publicDataAPI.get_open_interest( instType="SWAP", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SWAP FUTURES OPTION uly String Conditional Underlying Applicable to FUTURES/SWAP/OPTION. If instType is OPTION, either uly or instFamily is required. instFamily String Conditional Instrument family Applicable to FUTURES/SWAP/OPTION If instType is OPTION, either uly or instFamily is required. instId String No Instrument ID, e.g. BTC-USDT-SWAP Applicable to FUTURES/SWAP/OPTION > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"BTC-USDT-SWAP", "oi":"5000", "oiCcy":"555.55", "oiUsd": "50000", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID oi String Open interest in number of contracts oiCcy String Open interest in number of coin oiUsd String Open interest in number of USD ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET FUNDING RATE Retrieve funding rate. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +INSTRUMENTID HTTP REQUEST GET /api/v5/public/funding-rate > Request Example Copy to ClipboardGET /api/v5/public/funding-rate?instId=BTC-USD-SWAP Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve funding rate result = publicDataAPI.get_funding_rate( instId="BTC-USD-SWAP", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP only applicable to SWAP > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fundingRate": "0.0000792386885340", "fundingTime": "1703088000000", "instId": "BTC-USDT-SWAP", "instType": "SWAP", "method": "next_period", "maxFundingRate": "0.00375", "minFundingRate": "-0.00375", "nextFundingRate": "0.0002061194322149", "nextFundingTime": "1703116800000", "premium": "0.0001233824646391", "settFundingRate": "0.0001418433662153", "settState": "settled", "ts": "1703070685309" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type SWAP instId String Instrument ID, e.g. BTC-USD-SWAP method String Funding rate mechanism current_period next_period fundingRate String Current funding rate nextFundingRate String Forecasted funding rate for the next period The nextFundingRate will be "" if the method is current_period fundingTime String Settlement time, Unix timestamp format in milliseconds, e.g. 1597026383085 nextFundingTime String Forecasted funding time for the next period , Unix timestamp format in milliseconds, e.g. 1597026383085 minFundingRate String The lower limit of the predicted funding rate of the next cycle maxFundingRate String The upper limit of the predicted funding rate of the next cycle settState String Settlement state of funding rate processing settled settFundingRate String If settState = processing, it is the funding rate that is being used for current settlement cycle. If settState = settled, it is the funding rate that is being used for previous settlement cycle premium String Premium between the mid price of perps market and the index price ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 For some altcoins perpetual swaps with significant fluctuations in funding rates, OKX will closely monitor market changes. When necessary, the funding rate collection frequency, currently set at 8 hours, may be adjusted to higher frequencies such as 6 hours, 4 hours, 2 hours, or 1 hour. Thus, users should focus on the difference between `fundingTime` and `nextFundingTime` fields to determine the funding fee interval of a contract. GET FUNDING RATE HISTORY Retrieve funding rate history. This endpoint can retrieve data from the last 3 months. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +INSTRUMENTID HTTP REQUEST GET /api/v5/public/funding-rate-history > Request Example Copy to ClipboardGET /api/v5/public/funding-rate-history?instId=BTC-USD-SWAP Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve funding rate history result = publicDataAPI.funding_rate_history( instId="BTC-USD-SWAP", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP only applicable to SWAP before String No Pagination of data to return records newer than the requested fundingTime after String No Pagination of data to return records earlier than the requested fundingTime limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "fundingRate": "0.0000746604960499", "fundingTime": "1703059200000", "instId": "BTC-USD-SWAP", "instType": "SWAP", "method": "next_period", "realizedRate": "0.0000746572360545" }, { "fundingRate": "0.000227985782722", "fundingTime": "1703030400000", "instId": "BTC-USD-SWAP", "instType": "SWAP", "method": "next_period", "realizedRate": "0.0002279755647389" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type SWAP instId String Instrument ID, e.g. BTC-USD-SWAP fundingRate String Predicted funding rate realizedRate String Actual funding rate fundingTime String Settlement time, Unix timestamp format in milliseconds, e.g. 1597026383085 method String Funding rate mechanism current_period next_period For some altcoins perpetual swaps with significant fluctuations in funding rates, OKX will closely monitor market changes. When necessary, the funding rate collection frequency, currently set at 8 hours, may be adjusted to higher frequencies such as 6 hours, 4 hours, 2 hours, or 1 hour. Thus, users should focus on the difference between `fundingTime` and `nextFundingTime` fields to determine the funding fee interval of a contract. GET LIMIT PRICE Retrieve the highest buy limit and lowest sell limit of the instrument. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/price-limit > Request Example Copy to ClipboardGET /api/v5/public/price-limit?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve the highest buy limit and lowest sell limit of the instrument result = publicDataAPI.get_price_limit( instId="BTC-USD-SWAP", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT-SWAP > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"BTC-USDT-SWAP", "buyLmt":"17057.9", "sellLmt":"16388.9", "ts":"1597026383085", "enabled": true } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instId String Instrument ID, e.g. BTC-USDT-SWAP buyLmt String Highest buy limit Return "" when enabled is false sellLmt String Lowest sell limit Return "" when enabled is false ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 enabled Boolean Whether price limit is effective true: the price limit is effective false: the price limit is not effective GET OPTION MARKET DATA Retrieve option market data. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +ULY HTTP REQUEST GET /api/v5/public/opt-summary > Request Example Copy to ClipboardGET /api/v5/public/opt-summary?uly=BTC-USD Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve option market data result = publicDataAPI.get_opt_summary( uly="BTC-USD", ) print(result) REQUEST PARAMETERS Parameter Type Required Description uly String Conditional Underlying, only applicable to OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. instFamily String Conditional Instrument family, only applicable to OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. expTime String No Contract expiry date, the format is "YYMMDD", e.g. "200527" > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "askVol": "3.7207056835937498", "bidVol": "0", "delta": "0.8310206676289528", "deltaBS": "0.9857332101544538", "fwdPx": "39016.8143629068452065", "gamma": "-1.1965483553276135", "gammaBS": "0.000011933182397798109", "instId": "BTC-USD-220309-33000-C", "instType": "OPTION", "lever": "0", "markVol": "1.5551965233045728", "realVol": "0", "volLv": "0", "theta": "-0.0014131955002093717", "thetaBS": "-66.03526900575946", "ts": "1646733631242", "uly": "BTC-USD", "vega": "0.000018173851073258973", "vegaBS": "0.7089307622132419" }, { "askVol": "1.7968814062499998", "bidVol": "0", "delta": "-0.014668822072611904", "deltaBS": "-0.01426678984554619", "fwdPx": "39016.8143629068452065", "gamma": "0.49483062407551576", "gammaBS": "0.000011933182397798109", "instId": "BTC-USD-220309-33000-P", "instType": "OPTION", "lever": "0", "markVol": "1.5551965233045728", "realVol": "0", "volLv": "0", "theta": "-0.0014131955002093717", "thetaBS": "-54.93377294845015", "ts": "1646733631242", "uly": "BTC-USD", "vega": "0.000018173851073258973", "vegaBS": "0.7089307622132419" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type OPTION instId String Instrument ID, e.g. BTC-USD-200103-5500-C uly String Underlying delta String Sensitivity of option price to uly price gamma String The delta is sensitivity to uly price vega String Sensitivity of option price to implied volatility theta String Sensitivity of option price to remaining maturity deltaBS String Sensitivity of option price to uly price in BS mode gammaBS String The delta is sensitivity to uly price in BS mode vegaBS String Sensitivity of option price to implied volatility in BS mode thetaBS String Sensitivity of option price to remaining maturity in BS mode lever String Leverage markVol String Mark volatility bidVol String Bid volatility askVol String Ask volatility realVol String Realized volatility (not currently used) volLv String Implied volatility of at-the-money options fwdPx String Forward price ts String Data update time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET ESTIMATED DELIVERY/EXERCISE PRICE Retrieve the estimated delivery price which will only have a return value one hour before the delivery/exercise. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +INSTID HTTP REQUEST GET /api/v5/public/estimated-price > Request Example Copy to ClipboardGET /api/v5/public/estimated-price?instId=BTC-USDT-191227 Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve estimated delivery/exercise price result = publicDataAPI.get_estimated_price( instId="BTC-USDT-220916", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-200214 only applicable to FUTURES/OPTION > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"FUTURES", "instId":"BTC-USDT-201227", "settlePx":"200", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type FUTURES OPTION instId String Instrument ID, e.g. BTC-USDT-SWAP settlePx String Estimated delivery price ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET DISCOUNT RATE AND INTEREST-FREE QUOTA Retrieve discount rate level and interest-free quota. RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/discount-rate-interest-free-quota > Request Example Copy to ClipboardGET /api/v5/public/discount-rate-interest-free-quota?ccy=BTC Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve discount rate level and interest-free quota result = publicDataAPI.discount_interest_free_quota() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency discountLv String No Discount level (Deprecated) > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "0", "ccy": "BTC", "details": [ { "discountRate": "0.98", "liqPenaltyRate": "0.02", "maxAmt": "20", "minAmt": "0", "tier": "1", "disCcyEq": "1000" }, { "discountRate": "0.9775", "liqPenaltyRate": "0.0225", "maxAmt": "25", "minAmt": "20", "tier": "2", "disCcyEq": "2000" } ], "discountInfo": [ { "discountRate": "1", "maxAmt": "5000000", "minAmt": "0" }, { "discountRate": "0.975", "maxAmt": "10000000", "minAmt": "5000000" } ], "discountLv": "1", "minDiscountRate": "0" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency amt String Interest-free quota discountLv String Discount rate level.(Deprecated) discountInfo Array Original discount details. It will be removed once the adjustment of discount rate rules is completed. Advice you to prepare in advance. > discountRate String Discount rate > maxAmt String Tier - upper bound, "" means positive infinity > minAmt String Tier - lower bound, the minimum is 0 minDiscountRate String Minimum discount rate when it exceeds the maximum amount of the last tier. details Array New discount details. > discountRate String Discount rate > maxAmt String Tier - upper bound, "" means positive infinity > minAmt String Tier - lower bound, the minimum is 0 > tier String Tiers > liqPenaltyRate String Liquidation penalty rate > disCcyEq String Discount equity in currency for quick calculation if your equity is themaxAmt GET SYSTEM TIME Retrieve API server time. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/time > Request Example Copy to ClipboardGET /api/v5/public/time Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve API server time result = publicDataAPI.get_system_time() print(result) > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description ts String System time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET MARK PRICE Retrieve mark price. We set the mark price based on the SPOT index and at a reasonable basis to prevent individual users from manipulating the market and causing the contract price to fluctuate. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP +INSTRUMENTID HTTP REQUEST GET /api/v5/public/mark-price > Request Example Copy to ClipboardGET /api/v5/public/mark-price?instType=SWAP Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve mark price result = publicDataAPI.get_mark_price( instType="SWAP", ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type MARGIN SWAP FUTURES OPTION uly String No Underlying Applicable to FUTURES/SWAP/OPTION instFamily String No Instrument family Applicable to FUTURES/SWAP/OPTION instId String No Instrument ID, e.g. BTC-USD-SWAP > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "instType":"SWAP", "instId":"BTC-USDT-SWAP", "markPx":"200", "ts":"1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type MARGIN SWAP FUTURES OPTION instId String Instrument ID, e.g. BTC-USD-200214 markPx String Mark price ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET POSITION TIERS Retrieve position tiers information, maximum leverage depends on your borrowings and margin ratio. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/position-tiers > Request Example Copy to ClipboardGET /api/v5/public/position-tiers?tdMode=cross&instType=SWAP&instFamily=BTC-USDT Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve position tiers information result = publicDataAPI.get_position_tiers( instType="SWAP", tdMode="cross", uly="BTC-USD" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type MARGIN SWAP FUTURES OPTION tdMode String Yes Trade mode Margin mode cross isolated uly String Conditional Single underlying or multiple underlyings (no more than 3) separated with comma. If instType is SWAP/FUTURES/OPTION, either uly or instFamily is required. If both are passed, instFamily will be used. instFamily String Conditional Single instrument familiy or multiple instrument families (no more than 5) separated with comma. If instType is SWAP/FUTURES/OPTION, either uly or instFamily is required. If both are passed, instFamily will be used. instId String Conditional Single instrument or multiple instruments (no more than 5) separated with comma. Either instId or ccy is required, if both are passed, instId will be used, ignore when instType is one of SWAP,FUTURES,OPTION ccy String Conditional Margin currency Only applicable to cross MARGIN. It will return borrowing amount for Multi-currency margin and Portfolio margin when ccy takes effect. tier String No Tiers > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "baseMaxLoan": "50", "imr": "0.1", "instId": "BTC-USDT", "maxLever": "10", "maxSz": "50", "minSz": "0", "mmr": "0.03", "optMgnFactor": "0", "quoteMaxLoan": "500000", "tier": "1", "uly": "", "instFamily": "" } ] } RESPONSE PARAMETERS Parameter Type Description uly String Underlying Applicable to FUTURES/SWAP/OPTION instFamily String Instrument family Applicable to FUTURES/SWAP/OPTION instId String Instrument ID tier String Tiers minSz String The minimum borrowing amount or position of this gear is only applicable to margin/options/perpetual/delivery, the minimum position is 0 by default It will return the minimum borrowing amount when ccy takes effect. maxSz String The maximum borrowing amount or number of positions held in this position is only applicable to margin/options/perpetual/delivery It will return the maximum borrowing amount when ccy takes effect. mmr String Maintenance margin requirement rate imr String Initial margin requirement rate maxLever String Maximum available leverage optMgnFactor String Option Margin Coefficient (only applicable to options) quoteMaxLoan String Quote currency borrowing amount (only applicable to leverage and the case when instId takes effect) baseMaxLoan String Base currency borrowing amount (only applicable to leverage and the case when instId takes effect) GET INTEREST RATE AND LOAN QUOTA Retrieve interest rate RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/interest-rate-loan-quota > Request Example Copy to ClipboardGET /api/v5/public/interest-rate-loan-quota Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Retrieve interest rate and loan quota result = publicDataAPI.get_interest_rate_loan_quota() print(result) > Response Example Copy to Clipboard{ "code": "0", "data": [ { "basic": [ { "ccy": "USDT", "quota": "500000", "rate": "0.00043728" }, { "ccy": "BTC", "quota": "10", "rate": "0.00019992" } ], "vip": [ { "irDiscount": "", "loanQuotaCoef": "6", "level": "VIP1" }, { "irDiscount": "", "loanQuotaCoef": "7", "level": "VIP2" } ], "regular": [ { "irDiscount": "", "loanQuotaCoef": "1", "level": "Lv1" }, { "irDiscount": "", "loanQuotaCoef": "2", "level": "Lv2" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description basic Array Basic interest rate > ccy String Currency > rate String Daily rate > quota String Max borrow vip Array Interest info for vip users > level String VIP Level, e.g. VIP1 > loanQuotaCoef String Loan quota coefficient. Loan quota = quota * level > irDiscount String Interest rate discount(Deprecated) regular Array Interest info for regular users > level String Regular user Level, e.g. Lv1 > loanQuotaCoef String Loan quota coefficient. Loan quota = quota * level > irDiscount String Interest rate discount(Deprecated) GET INTEREST RATE AND LOAN QUOTA FOR VIP LOANS RATE LIMIT: 2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/vip-interest-rate-loan-quota > Request Example Copy to ClipboardGET /api/v5/public/vip-interest-rate-loan-quota Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Get interest rate and loan quota for VIP loans result = publicDataAPI.get_vip_interest_rate_loan_quota() print(result) > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "ENJ", "levelList": [ { "level": "VIP5", "loanQuota": "100000.00000000" }, { "level": "VIP6", "loanQuota": "110000.00000000" }, { "level": "VIP7", "loanQuota": "120000.00000000" }, { "level": "VIP8", "loanQuota": "130000.00000000" } ], "quota": "10000.0000", "rate": "0.00048000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC rate String Daily rate quota String Max borrow(Deprecated) levelList Array Loan quota information under different VIP levels > level String VIP Level, e.g. VIP5 > loanQuota String Loan quota GET UNDERLYING RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/underlying > Request Example Copy to ClipboardGET /api/v5/public/underlying?instType=FUTURES Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Get underlying result = publicDataAPI.get_underlying( instType="FUTURES" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type SWAP FUTURES OPTION > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "LTC-USDT", "BTC-USDT", "ETC-USDT" ] ] } RESPONSE PARAMETERS Parameter Type Description uly Array Underlying GET INSURANCE FUND Get insurance fund balance information RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/insurance-fund > Request Example Copy to ClipboardGET /api/v5/public/insurance-fund?instType=SWAP&uly=BTC-USD Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Get insurance fund balance information result = publicDataAPI.get_insurance_fund( instType="SWAP", uly="BTC-USD" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type MARGIN SWAP FUTURES OPTION type String No Type regular_update liquidation_balance_deposit bankruptcy_loss platform_revenue adl: ADL historical data The default is all type uly String Conditional Underlying Required for FUTURES/SWAP/OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. instFamily String Conditional Instrument family Required for FUTURES/SWAP/OPTION Either uly or instFamily is required. If both are passed, instFamily will be used. ccy String Conditional Currency, only applicable to MARGIN before String No Pagination of data to return records newer than the requested ts after String No Pagination of data to return records earlier than the requested ts limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "details": [ { "adlType": "", "amt": "", "balance": "1343.1308", "ccy": "ETH", "decRate": "", "maxBal": "", "maxBalTs": "", "ts": "1704883083000", "type": "regular_update" } ], "instFamily": "ETH-USD", "instType": "OPTION", "total": "1369179138.7489" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description total String The total balance of insurance fund, in USD instFamily String Instrument family Applicable to FUTURES/SWAP/OPTION instType String Instrument type details Array of objects Insurance fund data > balance String The balance of insurance fund > amt String The change in the balance of insurance fund Applicable when type is liquidation_balance_deposit, bankruptcy_loss or platform_revenue > ccy String The currency of insurance fund > type String The type of insurance fund > maxBal String Maximum insurance fund balance in the past eight hours Only applicable when type is adl > maxBalTs String Timestamp when insurance fund balance reached maximum in the past eight hours, Unix timestamp format in milliseconds, e.g. 1597026383085 Only applicable when type is adl > decRate String Real-time insurance fund decline rate (compare balance and maxBal) Only applicable when type is adl > adlType String ADL related events rate_adl_start: ADL begins due to high insurance fund decline rate bal_adl_start: ADL begins due to insurance fund balance falling pos_adl_start:ADL begins due to the volume of liquidation orders falls to a certain level (only applicable to premarket symbols) adl_end: ADL ends Only applicable when type is adl > ts String The update timestamp of insurance fund. Unix timestamp format in milliseconds, e.g. 1597026383085 The enumeration value `regular_update` of type field is used to present up-to-minute insurance fund change. The amt field will be used to present the difference of insurance fund balance when the type field is `liquidation_balance_deposit`, `bankruptcy_loss` or `platform_revenue`, which is generated once per day around 08:00 am (UTC). When type is `regular_update`, the amt field will be returned as "". UNIT CONVERT Convert the crypto value to the number of contracts, or vice versa RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/convert-contract-coin > Request Example Copy to ClipboardGET /api/v5/public/convert-contract-coin?instId=BTC-USD-SWAP&px=35000&sz=0.888 Copy to Clipboardimport okx.PublicData as PublicData flag = "0" # Production trading: 0, Demo trading: 1 publicDataAPI = PublicData.PublicAPI(flag=flag) # Convert the crypto value to the number of contracts, or vice versa result = publicDataAPI.get_convert_contract_coin( instId="BTC-USD-SWAP", px="35000", sz="0.888" ) print(result) REQUEST PARAMETERS Parameter Type Required Description type String No Convert type 1: Convert currency to contract 2: Convert contract to currency The default is 1 instId String Yes Instrument ID only applicable to FUTURES/SWAP/OPTION sz String Yes Quantity to buy or sell It is quantity of currency while converting currency to contract; It is quantity of contract while converting contract to currency. px String Conditional Order price For crypto-margined contracts, it is necessary while converting. For USDT-margined contracts, it is necessary while converting between usdt and contract. It is optional while converting between coin and contract. For OPTION, it is optional. unit String No The unit of currency coin usds: USDT/USDC only applicable to USDⓈ-margined contracts from FUTURES/SWAP opType String No Order type open: round down sz when opening positions close: round sz to the nearest when closing positions The default is close Applicable to FUTURES SWAP > Response Example Copy to Clipboard{ "code": "0", "data": [ { "instId": "BTC-USD-SWAP", "px": "35000", "sz": "311", "type": "1", "unit": "coin" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description type String Convert type 1: Convert currency to contract 2: Convert contract to currency instId String Instrument ID px String Order price sz String Quantity to buy or sell It is quantity of contract while converting currency to contract It is quantity of currency while contract to currency. unit String The unit of currency coin usds: USDT/USDC GET OPTION TICK BANDS Get option tick bands information RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/instrument-tick-bands > Request Example Copy to ClipboardGET /api/v5/public/instrument-tick-bands?instType=OPTION REQUEST PARAMETERS Parameter Type Required Description instType String Yes Instrument type OPTION instFamily String No Instrument family Only applicable to OPTION > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instType": "OPTION", "instFamily": "BTC-USD", "tickBand": [ { "minPx": "0", "maxPx": "100", "tickSz": "0.1" }, { "minPx": "100", "maxPx": "10000", "tickSz": "1" } ] }, { "instType": "OPTION", "instFamily": "ETH-USD", "tickBand": [ { "minPx": "0", "maxPx": "100", "tickSz": "0.1" }, { "minPx": "100", "maxPx": "10000", "tickSz": "1" } ] } ] } RESPONSE PARAMETERS Parameter Type Description instType String Instrument type instFamily String Instrument family tickBand String Tick size band > minPx String Minimum price while placing an order > maxPx String Maximum price while placing an order > tickSz String Tick size, e.g. 0.0001 GET PREMIUM HISTORY It will return premium data in the past 6 months. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/premium-history > Request Example Copy to ClipboardGET /api/v5/public/premium-history?instId=BTC-USDT-SWAP Copy to Clipboard REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USDT-SWAP Applicable to SWAP after String No Pagination of data to return records earlier than the requested ts(not included) before String No Pagination of data to return records newer than the requested ts(not included) limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "instId": "BTC-USDT-SWAP", "premium": "0.0000578896878167", "ts": "1713925924000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Instrument ID, e.g. BTC-USDT-SWAP premium String Premium between the mid price of perps market and the index price ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET INDEX TICKERS Retrieve index tickers. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/index-tickers > Request Example Copy to ClipboardGET /api/v5/market/index-tickers?instId=BTC-USDT Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve index tickers result = marketDataAPI.get_index_tickers( instId="BTC-USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description quoteCcy String Conditional Quote currency Currently there is only an index with USD/USDT/BTC/USDC as the quote currency. instId String Conditional Index, e.g. BTC-USD Either quoteCcy or instId is required. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "instId": "BTC-USDT", "idxPx": "43350", "high24h": "43649.7", "sodUtc0": "43444.1", "open24h": "43640.8", "low24h": "43261.9", "sodUtc8": "43328.7", "ts": "1649419644492" } ] } RESPONSE PARAMETERS Parameter Type Description instId String Index idxPx String Latest index price high24h String Highest price in the past 24 hours low24h String Lowest price in the past 24 hours open24h String Open price in the past 24 hours sodUtc0 String Open price in the UTC 0 sodUtc8 String Open price in the UTC 8 ts String Index price update time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET INDEX CANDLESTICKS Retrieve the candlestick charts of the index. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/index-candles > Request Example Copy to ClipboardGET /api/v5/market/index-candles?instId=BTC-USD Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the candlestick charts of the index result = marketDataAPI.get_index_candlesticks( instId="BTC-USD" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Index, e.g. BTC-USD after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/1Wutc/1Mutc/3Mutc] limit String No Number of results per request. The maximum is 100. The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "0" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. The candlestick data may be incomplete, and should not be polled repeatedly. The data returned will be arranged in an array like this: [ts,o,h,l,c,confirm]. GET INDEX CANDLESTICKS HISTORY Retrieve the candlestick charts of the index from recent years. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/history-index-candles > Request Example Copy to ClipboardGET /api/v5/market/history-index-candles?instId=BTC-USD REQUEST PARAMETERS Parameter Type Required Description instId String Yes Index, e.g. BTC-USD after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/1W/1M] UTC time opening price k-line: [/6Hutc/12Hutc/1Dutc/1Wutc/1Mutc] limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "1" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. The data returned will be arranged in an array like this: [ts,o,h,l,c,confirm]. GET MARK PRICE CANDLESTICKS Retrieve the candlestick charts of mark price. This endpoint can retrieve the latest 1,440 data entries. Charts are returned in groups based on the requested bar. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/mark-price-candles > Request Example Copy to ClipboardGET /api/v5/market/mark-price-candles?instId=BTC-USD-SWAP Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve the candlestick charts of mark price result = marketDataAPI.get_mark_price_candlesticks( instId="BTC-USD-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/1Wutc/1Mutc/3Mutc] limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "0" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. The candlestick data may be incomplete, and should not be polled repeatedly. The data returned will be arranged in an array like this: [ts,o,h,l,c,confirm] GET MARK PRICE CANDLESTICKS HISTORY Retrieve the candlestick charts of mark price from recent years. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/history-mark-price-candles > Request Example Copy to ClipboardGET /api/v5/market/history-mark-price-candles?instId=BTC-USD-SWAP REQUEST PARAMETERS Parameter Type Required Description instId String Yes Instrument ID, e.g. BTC-USD-SWAP after String No Pagination of data to return records earlier than the requested ts before String No Pagination of data to return records newer than the requested ts. The latest data will be returned when using before individually bar String No Bar size, the default is 1m e.g. [1m/3m/5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/1W/1M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/1Wutc/1Mutc] limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1597026383085", "3.721", "3.743", "3.677", "3.708", "1" ], [ "1597026383085", "3.731", "3.799", "3.494", "3.72", "1" ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 o String Open price h String highest price l String Lowest price c String Close price confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. The data returned will be arranged in an array like this: [ts,o,h,l,c,confirm] GET ORACLE Get the crypto price of signing using Open Oracle smart contract. RATE LIMIT: 1 REQUEST PER 5 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/open-oracle > Request Example Copy to ClipboardGET /api/v5/market/open-oracle Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Get the crypto price of signing using Open Oracle smart contract result = marketDataAPI.get_oracle() print(result) > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "messages":[ "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000616d3b1400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000e70528b800000000000000000000000000000000000000000000000000000000000000006707269636573000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034254430000000000000000000000000000000000000000000000000000000000" ], "prices":{ "BTC":"62014" }, "signatures":[ "0xf18330e59eaf42373c2c40f1f9e24113ba21d4ed734dd3ed3bc1d12290fa74ba5623fca1113c5d245a1202dc065e333615b90f810f12132ce4a1ecacb8c6b24a000000000000000000000000000000000000000000000000000000000000001b" ], "timestamp":"1634548500" } ] } RESPONSE PARAMETERS Parameter Type Description messages String ABI-encoded values [kind, timestamp, key, value], where kind equals 'prices', timestamp is the time when price was obtained, key is the asset ticker (e.g. btc) and value is the asset price. prices String Readable asset prices signatures String Ethereum-compatible ECDSA signatures for each message timestamp String Time of latest datapoint, Unix timestamp, e.g. 1597026387 OKX Oracle public key is 85615b076615317c80f14cbad6501eec031cd51c GET EXCHANGE RATE This interface provides the average exchange rate data for 2 weeks RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/exchange-rate > Request Example Copy to ClipboardGET /api/v5/market/exchange-rate Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Retrieve average exchange rate data for 2 weeks result = marketDataAPI.get_exchange_rate() print(result) > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "usdCny": "7.162" } ] } RESPONSE PARAMETERS Parameter Type Description usdCny String Exchange rate GET INDEX COMPONENTS Get the index component information data on the market RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/market/index-components > Request Example Copy to ClipboardGET /api/v5/market/index-components?index=BTC-USD Copy to Clipboardimport okx.MarketData as MarketData flag = "0" # Production trading:0 , demo trading:1 marketDataAPI = MarketData.MarketAPI(flag=flag) # Get the index component information data on the market result = marketDataAPI.get_index_components( index="BTC-USD" ) print(result) REQUEST PARAMETERS Parameter Type Required Description index String Yes index, e.g BTC-USDT > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": { "components": [ { "symbol": "BTC/USDT", "symPx": "52733.2", "wgt": "0.25", "cnvPx": "52733.2", "exch": "OKX" }, { "symbol": "BTC/USDT", "symPx": "52739.87000000", "wgt": "0.25", "cnvPx": "52739.87000000", "exch": "Binance" }, { "symbol": "BTC/USDT", "symPx": "52729.1", "wgt": "0.25", "cnvPx": "52729.1", "exch": "Huobi" }, { "symbol": "BTC/USDT", "symPx": "52739.47929397", "wgt": "0.25", "cnvPx": "52739.47929397", "exch": "Poloniex" } ], "last": "52735.4123234925", "index": "BTC-USDT", "ts": "1630985335599" } } RESPONSE PARAMETERS Parameter Type Description index String Index last String Latest Index Price ts String Data generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 components String Components > exch String Name of Exchange > symbol String Name of Exchange Trading Pairs > symPx String Price of Exchange Trading Pairs > wgt String Weights > cnvPx String Price converted to index GET ECONOMIC CALENDAR DATA Authentication is required for this endpoint. This endpoint is only supported in production environment. Get the macro-economic calendar data within 3 months. Historical data from 3 months ago is only available to users with trading fee tier VIP1 and above. RATE LIMIT: 1 REQUEST PER 5 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/public/economic-calendar > Request Example Copy to ClipboardGET /api/v5/public/economic-calendar REQUEST PARAMETERS Parameter Type Required Description region string No Country, region or entity afghanistan, albania, algeria, andorra, angola, antigua_and_barbuda, argentina, armenia, aruba, australia, austria, azerbaijan, bahamas, bahrain, bangladesh, barbados, belarus, belgium, belize, benin, bermuda, bhutan, bolivia, bosnia_and_herzegovina, botswana, brazil, brunei, bulgaria, burkina_faso, burundi, cambodia, cameroon, canada, cape_verde, cayman_islands, central_african_republic, chad, chile, china, colombia, comoros, congo, costa_rica, croatia, cuba, cyprus, czech_republic, denmark, djibouti, dominica, dominican_republic, east_timor, ecuador, egypt, el_salvador, equatorial_guinea, eritrea, estonia, ethiopia, euro_area, european_union, faroe_islands, fiji, finland, france, g20, g7, gabon, gambia, georgia, germany, ghana, greece, greenland, grenada, guatemala, guinea, guinea_bissau, guyana, hungary, haiti, honduras, hong_kong, hungary, imf, indonesia, iceland, india, indonesia, iran, iraq, ireland, isle_of_man, israel, italy, ivory_coast, jamaica, japan, jordan, kazakhstan, kenya, kiribati, kosovo, kuwait, kyrgyzstan, laos, latvia, lebanon, lesotho, liberia, libya, liechtenstein, lithuania, luxembourg, macau, macedonia, madagascar, malawi, malaysia, maldives, mali, malta, mauritania, mauritius, mexico, micronesia, moldova, monaco, mongolia, montenegro, morocco, mozambique, myanmar, namibia, nepal, netherlands, new_caledonia, new_zealand, nicaragua, niger, nigeria, north_korea, northern_mariana_islands, norway, opec, oman, pakistan, palau, palestine, panama, papua_new_guinea, paraguay, peru, philippines, poland, portugal, puerto_rico, qatar, russia, republic_of_the_congo, romania, russia, rwanda, slovakia, samoa, san_marino, sao_tome_and_principe, saudi_arabia, senegal, serbia, seychelles, sierra_leone, singapore, slovakia, slovenia, solomon_islands, somalia, south_africa, south_korea, south_sudan, spain, sri_lanka, st_kitts_and_nevis, st_lucia, sudan, suriname, swaziland, sweden, switzerland, syria, taiwan, tajikistan, tanzania, thailand, togo, tonga, trinidad_and_tobago, tunisia, turkey, turkmenistan, uganda, ukraine, united_arab_emirates, united_kingdom, united_states, uruguay, uzbekistan, vanuatu, venezuela, vietnam, world, yemen, zambia, zimbabwe importance string No Level of importance 1: low 2: medium 3: high before String No Pagination of data to return records newer than the requested ts based on the date parameter. Unix timestamp format in milliseconds. after String No Pagination of data to return records earlier than the requested ts based on the date parameter. Unix timestamp format in milliseconds. The default is the timestamp of the request moment. limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "actual": "7.8%", "calendarId": "330631", "category": "Harmonised Inflation Rate YoY", "ccy": "", "date": "1700121600000", "dateSpan": "0", "event": "Harmonised Inflation Rate YoY", "forecast": "7.8%", "importance": "1", "prevInitial": "", "previous": "9%", "refDate": "1698710400000", "region": "Slovakia", "uTime": "1700121605007", "unit": "%" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description calendarId string Calendar ID date string Estimated release time of the value of actual field, millisecond format of Unix timestamp, e.g. 1597026383085 region string Country, region or entity category string Category name event string Event name refDate string Date for which the datapoint refers to actual string The actual value of this event previous string Latest actual value of the previous period The value will be revised if revision is applicable forecast string Average forecast among a representative group of economists dateSpan string 0: The time of the event is known 1: we only know the date of the event, the exact time of the event is unknown. importance string Level of importance 1: low 2: medium 3: high uTime string Update time of this record, millisecond format of Unix timestamp, e.g. 1597026383085 prevInitial string The initial value of the previous period Only applicable when revision happens ccy string Currency of the data unit string Unit of the data WEBSOCKET INSTRUMENTS CHANNEL The instruments will be pushed if there is any change to the instrument’s state (such as delivery of FUTURES, exercise of OPTION, listing of new contracts / trading pairs, trading suspension, etc.). (The full instrument list is not pushed since December 28, 2022, you can click here to view details) URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "instruments", "instType": "SPOT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name instruments > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES OPTION > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "instruments", "instType": "SPOT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"instruments\", \"instType\" : \"FUTURES\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type SPOT MARGIN SWAP FUTURES OPTION code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "instruments", "instType": "SPOT" }, "data": [ { "alias": "", "baseCcy": "BTC", "category": "1", "ctMult": "", "ctType": "", "ctVal": "", "ctValCcy": "", "expTime": "", "instFamily": "", "instId": "BTC-USDT", "instType": "SPOT", "lever": "10", "listTime": "1606468572000", "lotSz": "0.00000001", "maxIcebergSz": "9999999999.0000000000000000", "maxLmtAmt": "1000000", "maxLmtSz": "9999999999", "maxMktAmt": "1000000", "maxMktSz": "", "maxStopSz": "", "maxTriggerSz": "9999999999.0000000000000000", "maxTwapSz": "9999999999.0000000000000000", "minSz": "0.00001", "optType": "", "quoteCcy": "USDT", "settleCcy": "", "state": "live", "ruleType": "normal", "stk": "", "tickSz": "0.1", "uly": "" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Subscribed channel > channel String Channel name > instType String Instrument type data Array Subscribed data > instType String Instrument type > instId String Instrument ID, e.g. BTC-UST > uly String Underlying, e.g. BTC-USD Only applicable to FUTURES/SWAP/OPTION > instFamily String Instrument family, e.g. BTC-USD Only applicable to FUTURES/SWAP/OPTION > category String Currency category. Note: this parameter is already deprecated > baseCcy String Base currency, e.g. BTC in BTC-USDT Only applicable to SPOT/MARGIN > quoteCcy String Quote currency, e.g. USDT in BTC-USDT Only applicable to SPOT/MARGIN > settleCcy String Settlement and margin currency, e.g. BTC Only applicable to FUTURES/SWAP/OPTION > ctVal String Contract value > ctMult String Contract multiplier > ctValCcy String Contract value currency > optType String Option type C: Call P: Put Only applicable to OPTION > stk String Strike price Only applicable to OPTION > listTime String Listing time Only applicable to FUTURES/SWAP/OPTION > expTime String Expiry time Applicable to SPOT/MARGIN/FUTURES/SWAP/OPTION. For FUTURES/OPTION, it is the delivery/exercise time. It can also be the delisting time of the trading instrument. Update once change. > lever String Max Leverage Not applicable to SPOT/OPTION, used to distinguish between MARGIN and SPOT. > tickSz String Tick size, e.g. 0.0001 For Option, it is minimum tickSz among tick band. > lotSz String Lot size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency > minSz String Minimum order size If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency > ctType String Contract type linear: linear contract inverse: inverse contract Only applicable to FUTURES/SWAP > alias String Alias this_week next_week this_month next_month quarter next_quarter Only applicable to FUTURES Not recommended for use, users are encouraged to rely on the expTime field to determine the delivery time of the contract > state String Instrument status live suspend expired preopen. e.g. There will be preopen before the Futures and Options new contracts state is live. test: Test pairs, can't be traded > ruleType String Trading rule types normal: normal trading pre_market: pre-market trading > maxLmtSz String The maximum order quantity of a single limit order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > maxMktSz String The maximum order quantity of a single market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. > maxTwapSz String The maximum order quantity of a single TWAP order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > maxIcebergSz String The maximum order quantity of a single iceBerg order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > maxTriggerSz String The maximum order quantity of a single trigger order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in base currency. > maxStopSz String The maximum order quantity of a single stop market order. If it is a derivatives contract, the value is the number of contracts. If it is SPOT/MARGIN, the value is the quantity in USDT. Instrument status will trigger pushing of incremental data from instruments channel. When a new contract is going to be listed, the instrument data of the new contract will be available with status preopen. When a product is going to be delisted (e.g. when a FUTURES contract is settled or OPTION contract is exercised), the instrument status will be changed to expired. OPEN INTEREST CHANNEL Retrieve the open interest. Data will be pushed every 3 seconds when there are updates. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "open-interest", "instId": "LTC-USD-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name open-interest > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "open-interest", "instId": "LTC-USD-SWAP" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"open-interest\", \"instId\" : \"LTC-USD-SWAP\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "open-interest", "instId": "LTC-USD-SWAP" }, "data": [ { "instType": "SWAP", "instId": "LTC-USD-SWAP", "oi": "5000", "oiCcy": "555.55", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID, e.g. LTC-USD-SWAP > oi String Open interest, in units of contracts. > oiCcy String Open interest, in currency units > ts String The time when the data was updated, Unix timestamp format in milliseconds, e.g. 1597026383085 FUNDING RATE CHANNEL Retrieve funding rate. Data will be pushed in 30s to 90s. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "funding-rate", "instId": "BTC-USD-SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name funding-rate > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "funding-rate", "instId": "BTC-USD-SWAP" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"funding-rate\", \"instId\" : \"BTC-USD-SWAP\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String yes Channel name > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"funding-rate", "instId":"BTC-USD-SWAP" }, "data":[ { "fundingRate":"0.0001875391284828", "fundingTime":"1700726400000", "instId":"BTC-USD-SWAP", "instType":"SWAP", "method": "next_period", "maxFundingRate":"0.00375", "minFundingRate":"-0.00375", "nextFundingRate":"0.0002608059239328", "nextFundingTime":"1700755200000", "premium": "0.0001233824646391", "settFundingRate":"0.0001699799259033", "settState":"settled", "ts":"1700724675402" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type, SWAP > instId String Instrument ID, e.g. BTC-USD-SWAP > method String Funding rate mechanism current_period next_period > fundingRate String Current funding rate > fundingTime String Funding time of the upcoming settlement, Unix timestamp format in milliseconds, e.g. 1597026383085. > nextFundingRate String Forecasted funding rate for the next period > nextFundingTime String Forecasted funding time for the next period, Unix timestamp format in milliseconds, e.g. 1597026383085 > minFundingRate String The lower limit of the predicted funding rate of the next cycle > maxFundingRate String The upper limit of the predicted funding rate of the next cycle > settState String Settlement state of funding rate processing settled > settFundingRate String If settState = processing, it is the funding rate that is being used for current settlement cycle. If settState = settled, it is the funding rate that is being used for previous settlement cycle > premium String Premium between the mid price of perps market and the index price > ts String Data return time, Unix timestamp format in milliseconds, e.g. 1597026383085 For some altcoins perpetual swaps with significant fluctuations in funding rates, OKX will closely monitor market changes. When necessary, the funding rate collection frequency, currently set at 8 hours, may be adjusted to higher frequencies such as 6 hours, 4 hours, 2 hours, or 1 hour. Thus, users should focus on the difference between `fundingTime` and `nextFundingTime` fields to determine the funding fee interval of a contract. PRICE LIMIT CHANNEL Retrieve the maximum buy price and minimum sell price of instruments. Data will be pushed every second when there are changes in limits, and will not be pushed when there is no changes on limit. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "price-limit", "instId": "LTC-USD-190628" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name price-limit > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "price-limit", "instId": "LTC-USD-190628" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"price-limit\", \"instId\" : \"LTC-USD-190628\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "price-limit", "instId": "LTC-USD-190628" }, "data": [{ "instId": "LTC-USD-190628", "buyLmt": "200", "sellLmt": "300", "ts": "1597026383085", "enabled": true }] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID, e.g. BTC-USDT > buyLmt String Maximum buy price Return "" when enabled is false > sellLmt String Minimum sell price Return "" when enabled is false > ts String Price update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > enabled Boolean Whether price limit is effective true: the price limit is effective false: the price limit is not effective OPTION SUMMARY CHANNEL Retrieve detailed pricing information of all OPTION contracts. Data will be pushed at once. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "opt-summary", "instFamily": "BTC-USD" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name opt-summary > instFamily String Yes Instrument family > Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "opt-summary", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Failure example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"opt-summary\", \"uly\" : \"BTC-USD\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instFamily String Yes Instrument family code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "opt-summary", "instFamily": "BTC-USD" }, "data": [ { "instType": "OPTION", "instId": "BTC-USD-200103-5500-C", "uly": "BTC-USD", "delta": "0.7494223636", "gamma": "-0.6765419039", "theta": "-0.0000809873", "vega": "0.0000077307", "deltaBS": "0.7494223636", "gammaBS": "-0.6765419039", "thetaBS": "-0.0000809873", "vegaBS": "0.0000077307", "realVol": "0", "bidVol": "", "askVol": "1.5625", "markVol": "0.9987", "volLv": "0", "lever": "4.0342", "fwdPx": "39016.8143629068452065", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instFamily String Instrument family data Array Subscribed data > instType String Instrument type, OPTION > instId String Instrument ID > uly String Underlying > delta String Sensitivity of option price to uly price > gamma String The delta is sensitivity to uly price > vega String Sensitivity of option price to implied volatility > theta String Sensitivity of option priceo remaining maturity > deltaBS String Sensitivity of option price to uly price in BS mode > gammaBS String The delta is sensitivity to uly price in BS mode > vegaBS String Sensitivity of option price to implied volatility in BS mode > thetaBS String Sensitivity of option price to remaining maturity in BS mode > lever String Leverage > markVol String Mark volatility > bidVol String Bid volatility > askVol String Ask Volatility > realVol String Realized volatility (not currently used) > volLv String Implied volatility of at-the-money options > fwdPx String Forward price > ts String Price update time, Unix timestamp format in milliseconds, e.g. 1597026383085 ESTIMATED DELIVERY/EXERCISE PRICE CHANNEL Retrieve the estimated delivery/exercise price of SWAP, FUTURES and OPTION contracts. Only the estimated delivery/exercise price will be pushed an hour before delivery/exercise, and will be pushed if there is any price change. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "estimated-price", "instType": "FUTURES", "instFamily": "BTC-USD" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name estimated-price > instType String Yes Instrument type OPTION FUTURES SWAP > instFamily String Conditional Instrument family Either instFamily or instId is required. > instId String Conditional Instrument ID Either instFamily or instId is required. > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "estimated-price", "instType": "FUTURES", "instFamily": "BTC-USD" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"estimated-price\", \"instId\" : \"FUTURES\",\"uly\" :\"BTC-USD\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instType String Yes Instrument type OPTION FUTURES SWAP > instFamily String Conditional Instrument family > instId String Conditional Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "estimated-price", "instType": "FUTURES", "instFamily": "BTC-USD" }, "data": [ { "instType": "FUTURES", "instId": "BTC-USD-170310", "settlePx": "200", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instType String Instrument type FUTURES OPTION SWAP > instFamily String Instrument family > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID, e.g. BTC-USD-170310 > settlePx String Estimated delivery/exercise price > ts String Data update time, Unix timestamp format in milliseconds, e.g. 1597026383085 MARK PRICE CHANNEL Retrieve the mark price. Data will be pushed every 200 ms when the mark price changes, and will be pushed every 10 seconds when the mark price does not change. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "mark-price", "instId": "LTC-USD-190628" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name mark-price > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "mark-price", "instId": "LTC-USD-190628" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"mark-price\", \"instId\" : \"LTC-USD-190628\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String No Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "mark-price", "instId": "LTC-USD-190628" }, "data": [ { "instType": "FUTURES", "instId": "LTC-USD-190628", "markPx": "0.1", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID > markPx String Mark price > ts String Price update time, Unix timestamp format in milliseconds, e.g. 1597026383085 INDEX TICKERS CHANNEL Retrieve index tickers data. Push data every 100ms if there are any changes, otherwise push once a minute. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "index-tickers", "instId": "BTC-USDT" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name index-tickers > instId String Yes Index with USD, USDT, BTC, USDC as the quote currency, e.g. BTC-USDT > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "index-tickers", "instId": "BTC-USDT" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"index-tickers\", \"instId\" : \"BTC-USDT\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name index-tickers > instId String Yes Index with USD, USDT, BTC, USDC as the quote currency, e.g. BTC-USDT code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "index-tickers", "instId": "BTC-USDT" }, "data": [ { "instId": "BTC-USDT", "idxPx": "0.1", "high24h": "0.5", "low24h": "0.1", "open24h": "0.1", "sodUtc0": "0.1", "sodUtc8": "0.1", "ts": "1597026383085" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Index with USD, USDT, or BTC as quote currency, e.g. BTC-USDT. data Array Subscribed data > instId String Index > idxPx String Latest Index Price > open24h String Open price in the past 24 hours > high24h String Highest price in the past 24 hours > low24h String Lowest price in the past 24 hours > sodUtc0 String Open price in the UTC 0 > sodUtc8 String Open price in the UTC 8 > ts String Update time of the index ticker, Unix timestamp format in milliseconds, e.g. 1597026383085 MARK PRICE CANDLESTICKS CHANNEL Retrieve the candlesticks data of the mark price. The push frequency is the fastest interval 1 second push the data. URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "mark-price-candle1D", "instId": "BTC-USD-190628" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name mark-price-candle3M mark-price-candle1M mark-price-candle1W mark-price-candle1D mark-price-candle2D mark-price-candle3D mark-price-candle5D mark-price-candle12H mark-price-candle6H mark-price-candle4H mark-price-candle2H mark-price-candle1H mark-price-candle30m mark-price-candle15m mark-price-candle5m mark-price-candle3m mark-price-candle1m mark-price-candle1Yutc mark-price-candle3Mutc mark-price-candle1Mutc mark-price-candle1Wutc mark-price-candle1Dutc mark-price-candle2Dutc mark-price-candle3Dutc mark-price-candle5Dutc mark-price-candle12Hutc mark-price-candle6Hutc > instId String Yes Instrument ID > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "mark-price-candle1D", "instId": "BTC-USD-190628" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"mark-price-candle1D\", \"instId\" : \"BTC-USD-190628\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name > instId String Yes Instrument ID code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "mark-price-candle1D", "instId": "BTC-USD-190628" }, "data": [ ["1597026383085", "3.721", "3.743", "3.677", "3.708","0"], ["1597026383085", "3.731", "3.799", "3.494", "3.72","1"] ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 > o String Open price > h String Highest price > l String Lowest price > c String Close price > confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. INDEX CANDLESTICKS CHANNEL Retrieve the candlesticks data of the index. The push frequency is the fastest interval 1 second push the data. . URL PATH /ws/v5/business > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "index-candle30m", "instId": "BTC-USD" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name index-candle3M index-candle1M index-candle1W index-candle1D index-candle2D index-candle3D index-candle5D index-candle12H index-candle6H index-candle4H index -candle2H index-candle1H index-candle30m index-candle15m index-candle5m index-candle3m index-candle1m index-candle3Mutc index-candle1Mutc index-candle1Wutc index-candle1Dutc index-candle2Dutc index-candle3Dutc index-candle5Dutc index-candle12Hutc index-candle6Hutc > instId String Yes Index, e.g. BTC-USD > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "index-candle30m", "instId": "BTC-USD" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"index-candle30m\", \"instId\" : \"BTC-USD\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes subscribe unsubscribe arg Object No Subscribed channel > channel String Yes Channel name > instId String No Index, e.g. BTC-USD code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "index-candle30m", "instId": "BTC-USD" }, "data": [["1597026383085", "3811.31", "3811.31", "3811.31", "3811.31", "0"]] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Index data Array Subscribed data > ts String Opening time of the candlestick, Unix timestamp format in milliseconds, e.g. 1597026383085 > o String Open price > h String Highest price > l String Lowest price > c String Close price > confirm String The state of candlesticks. 0 represents that it is uncompleted, 1 represents that it is completed. The order of the returned values is: [ts,o,h,l,c,confirm] LIQUIDATION ORDERS CHANNEL Retrieve the recent liquidation orders. For futures and swaps, each contract will only show a maximum of one order per one-second period. This data doesn’t represent the total number of liquidations on OKX. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "liquidation-orders", "instType": "SWAP" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name liquidation-orders > instType String Yes Instrument type SWAP FUTURES MARGIN OPTION > Response Example Copy to Clipboard{ "arg": { "channel": "liquidation-orders", "instType": "SWAP" }, "data": [ { "details": [ { "bkLoss": "0", "bkPx": "0.007831", "ccy": "", "posSide": "short", "side": "buy", "sz": "13", "ts": "1692266434010" } ], "instFamily": "IOST-USDT", "instId": "IOST-USDT-SWAP", "instType": "SWAP", "uly": "IOST-USDT" } ] } RESPONSE PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name > instId String Instrument ID data Array Subscribed data > instType String Instrument type > instId String Instrument ID, e.g. BTC-USD-SWAP > uly String Underlying, only applicable to FUTURES/SWAP/OPTION > details Array Liquidation details >> side String Order side, buy sell, only applicable to FUTURES/SWAP >> posSide String Position side, long short Combination of side and posSide, sell/long : Close long ; buy/short:Close short, only applicable to FUTURES/SWAP >> bkPx String Bankruptcy price. The price of the transaction with the system's liquidation account, only applicable to FUTURES/SWAP >> sz String Quantity of liquidation, only applicable to MARGIN/FUTURES/SWAP >> bkLoss String Bankruptcy loss >> ccy String Liquidation currency, only applicable to MARGIN >> ts String Liquidation time, Unix timestamp format in milliseconds, e.g. 1597026383085 ADL WARNING CHANNEL Auto-deleveraging warning channel. In the normal state, data will be pushed once every minute to display the balance of insurance fund and etc. In the warning state or when there is ADL risk (warning/adl), data will be pushed every second to display information such as the real-time decline rate of insurance fund. For more ADL details, please refer to Introduction to Auto-deleveraging URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [{ "channel": "adl-warning", "instType": "FUTURES", "instFamily": "BTC-USDT" }] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name adl-warning > instType String Yes Instrument type SWAP FUTURES OPTION > instFamily String No Instrument family > Successful Response Example Copy to Clipboard{ "event":"subscribe", "arg":{ "channel":"adl-warning", "instType":"FUTURES", "instFamily":"BTC-USDT" }, "connId":"48d8960a" } > Failure Response Example Copy to Clipboard{ "event":"error", "msg":"Illegal request: { \"event\": \"subscribe\", \"arg\": { \"channel\": \"adl-warning\", \"instType\": \"FUTURES\", \"instFamily\": \"BTC-USDT\" } }", "code":"60012", "connId":"48d8960a" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name adl-warning > instType String Yes Instrument type > instFamily String No Instrument family code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg":{ "channel":"adl-warning", "instType":"FUTURES", "instFamily":"BTC-USDT" }, "data":[ { "decRate":"", "maxBal":"", "adlRecRate":"0.25", "adlRecBal":"8000.0", "bal":"280784384.9564228289548144", "instType":"FUTURES", "adlRate":"0.5", "ccy": "USDT", "instFamily":"BTC-USDT", "maxBalTs":"", "adlType":"", "state":"normal", "adlBal":"0", "ts":"1700210763001" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Subscribed channel > channel String Channel name adl-warning > instType String Instrument type > instFamily String Instrument family data Array Subscribed data > instType String Instrument type > instFamily String Instrument family > state String state normal warning adl > bal String Real-time insurance fund balance > ccy String The corresponding currency of insurance fund balance > maxBal String Maximum insurance fund balance in the past eight hours Applicable when state is warning or adl > maxBalTs String Timestamp when insurance fund balance reached maximum in the past eight hours, Unix timestamp format in milliseconds, e.g. 1597026383085 > decRate String Real-time insurance fund decline rate (compare bal and maxBal) Applicable when state is warning or adl > adlType String ADL related events rate_adl_start: ADL begins due to high insurance fund decline rate bal_adl_start: ADL begins due to insurance fund balance falling pos_adl_start:ADL begins due to the volume of liquidation orders falls to a certain level (only applicable to premarket symbols) adl_end: ADL ends > adlBal String Insurance fund balance that triggers ADL > adlRate String Insurance fund decline rate that triggers ADL > adlRecBal String Insurance fund balance that turns off ADL > adlRecRate String Insurance fund decline rate that turns off ADL > ts String Data push time, Unix timestamp format in milliseconds, e.g. 1597026383085 ECONOMIC CALENDAR CHANNEL This endpoint is only supported in production environment. Retrieve the most up-to-date economic calendar data. This endpoint is only applicable to VIP 1 and above users in the trading fee tier. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "economic-calendar" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name economic-calendar > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "economic-calendar" } } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"mark-price\", \"instId\" : \"LTC-USD-190628\"}]}" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Event subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "economic-calendar" }, "data": [ { "calendarId": "319275", "date": "1597026383085", "region": "United States", "category": "Manufacturing PMI", "event": "S&P Global Manufacturing PMI Final", "refDate": "1597026383085", "actual": "49.2", "previous": "47.3", "forecast": "49.3", "importance": "2", "prevInitial": "", "ccy": "", "unit": "", "ts": "1698648096590" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name data Array Subscribed data > event string Event name > region string Country, region or entity > category string Category name > actual string The actual value of this event > previous string Latest actual value of the previous period The value will be revised if revision is applicable > forecast string Average forecast among a representative group of economists > prevInitial string The initial value of the previous period Only applicable when revision happens > date string Estimated release time of the value of actual field, millisecond format of Unix timestamp, e.g. 1597026383085 > refDate string Date for which the datapoint refers to > calendarId string Calendar ID > unit string Unit of the data > ccy string Currency of the data > importance string Level of importance 1: low 2: medium 3: high > ts string The time of the latest update TRADING STATISTICS REST API The API endpoints of Trading Statistics do not require authentication. GET SUPPORT COIN Retrieve the currencies supported by the trading statistics endpoints. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/trading-data/support-coin > Request Example Copy to ClipboardGET /api/v5/rubik/stat/trading-data/support-coin Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the currencies supported by the trading statistics endpoints result = tradingDataAPI.get_support_coin() print(result) > Response Example Copy to Clipboard{ "code": "0", "data": { "contract": [ "ADA", "BTC" ], "option": [ "BTC" ], "spot": [ "ADA", "BTC" ] }, "msg": "" } RESPONSE PARAMETERS Parameter Type Description contract Array of string Currency supported by derivatives trading data option Array of string Currency supported by option trading data spot Array of string Currency supported by spot trading data GET CONTRACT OPEN INTEREST HISTORY Retrieve the contract open interest statistics of futures and perp. This endpoint returns a maximum of 1440 records. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTID HTTP REQUEST GET /api/v5/rubik/stat/contracts/open-interest-history > Request example Copy to ClipboardGET /api/v5/rubik/stat/contracts/open-interest-history?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the open interest history result = tradingDataAPI.get_open_interest_history( instId="BTC-USDT-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId string Yes Instrument ID, eg: BTC-USDT-SWAP Only applicable to FUTURES, SWAP period string No Bar size, the default is 5m, e.g. [5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/2D/3D/5D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/5Dutc/1Wutc/1Mutc/3Mutc] end string No Pagination of data to return records earlier than the requested ts begin string No return records newer than the requested ts limit string No Number of results per request. The maximum is 100. The default is 100. > Response example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1701417600000", // timestamp "731377.57500501", // open interest (oi, contracts) "111", // open interest (oiCcy, coin) "8888888" // open interest (oiUsd, USD) ], [ "1701417500000", // timestamp "731377.57500501", // open interest (oi, contracts) "111", // open interest (oiCcy, coin) "8888888" // open interest (oiUsd, USD) ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp, millisecond format of Unix timestamp, e.g. 1597026383085 oi String Open interest in the unit of contracts oiCcy String Open interest in the unit of crypto oiUsd String Open interest in the unit of USD The data returned will be arranged in an array like this: [ts, oi, oiCcy, oiUsd]. GET TAKER VOLUME Retrieve the taker volume for both buyers and sellers. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/taker-volume > Request Example Copy to ClipboardGET /api/v5/rubik/stat/taker-volume?ccy=BTC&instType=SPOT Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the taker volume for both buyers and sellers result = tradingDataAPI.get_taker_volume( ccy="BTC", instType="SPOT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency instType String Yes Instrument type SPOT CONTRACTS begin String No Begin time, Unix timestamp format in milliseconds, e.g. 1597026383085 end String No End time, Unix timestamp format in milliseconds, e.g. 1597026383011 period String No Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only query data within two days at most 1H granularity can only query data within 30 days at most 1D granularity can only query data within 180 days at most > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630425600000", "7596.2651", "7149.4855" ], [ "1630339200000", "5312.7876", "7002.7541" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp sellVol String Sell volume buyVol String Buy volume The return value array order is: [ts,sellVol,buyVol] GET CONTRACT TAKER VOLUME Retrieve the contract taker volume for both buyers and sellers. This endpoint returns a maximum of 1440 records. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTID HTTP REQUEST GET /api/v5/rubik/stat/taker-volume-contract > Request example Copy to ClipboardGET /api/v5/rubik/stat/taker-volume-contract?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the contract taker volume for both buyers and sellers result = tradingDataAPI.get_contract_taker_volume( instId="BTC-USDT-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId string Yes Instrument ID, eg: BTC-USDT-SWAP Only applicable to FUTURES, SWAP period string No Bar size, the default is 5m, e.g. [5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line:[6H/12H/1D/2D/3D/5D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/5Dutc/1Wutc/1Mutc/3Mutc] unit string No The unit of buy/sell volume, the default is 1 0: Crypto 1: Contracts 2: U end string No return records earlier than the requested ts begin string No return records newer than the requested ts limit string No Number of results per request. The maximum is 100. The default is 100. > Response example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1701417600000", // timestamp "200", // taker sell volume "380" // taker buy volume ], [ "1701417600000", // timestamp "100", // taker sell volume "300" // taker buy volume ] ] } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp, millisecond format of Unix timestamp, e.g. 1597026383085 sellVol String taker sell volume buyVol String taker buy volume The data returned will be arranged in an array like this: [ts, sellVol, buyVol]. GET MARGIN LENDING RATIO Retrieve the ratio of cumulative amount of quote currency to base currency. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/margin/loan-ratio > Request Example Copy to ClipboardGET /api/v5/rubik/stat/margin/loan-ratio?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the ratio of cumulative amount between currency margin quote currency and base currency result = tradingDataAPI.get_margin_lending_ratio( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency begin String No Begin time, e.g. 1597026383085 end String No End time, e.g. 1597026383085 period String No Period m: Minute, H: Hour, D: Day the default is 5m, e.g. [5m/1H/1D] <br>5mgranularity can only query data within two days at most<br>1Hgranularity can only query data within 30 days at most<br>1D` granularity can only query data within 180 days at most > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630492800000", "0.4614" ], [ "1630492500000", "0.5767" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp ratio String Margin lending ratio The return value array order is: [ts,ratio] GET TOP TRADERS CONTRACT LONG/SHORT RATIO Retrieve the account net long/short ratio of a contract for top traders. Top traders refer to the top 5% of traders with the largest open position value. This endpoint returns a maximum of 1440 records. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTID HTTP REQUEST GET /api/v5/rubik/stat/contracts/long-short-account-ratio-contract-top-trader > Request Example Copy to ClipboardGET /api/v5/rubik/stat/contracts/long-short-account-ratio-contract-top-trader?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the top trader long short account ratio result = tradingDataAPI.get_top_trader_long_short_account_ratio( instId="BTC-USDT-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId string Yes Instrument ID, eg: BTC-USDT-SWAP Only applicable to FUTURES, SWAP period string No Bar size, the default is 5m, e.g. [5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/2D/3D/5D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/5Dutc/1Wutc/1Mutc/3Mutc] end string No return records earlier than the requested ts begin string No return records newer than the requested ts limit string No Number of results per request. The maximum is 100. The default is 100. > Response example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1701417600000", // timestamp "1.1739" // long/short account num ratio of top traders ], [ "1701417600000", // timestamp "0.1236" // long/short account num ratio of top traders ], ] } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp, millisecond format of Unix timestamp, e.g. 1597026383085 longShortAcctRatio String Long/short account num ratio of top traders The data returned will be arranged in an array like this: [ts, longShortAcctRatio]. GET TOP TRADERS CONTRACT LONG/SHORT RATIO (BY POSITION) Retrieve the position long/short ratio of a contract for top traders. Top traders refer to the top 5% of traders with the largest open position value. This endpoint returns a maximum of 1440 records. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTID HTTP REQUEST GET /api/v5/rubik/stat/contracts/long-short-position-ratio-contract-top-trader > Request example Copy to ClipboardGET /api/v5/rubik/stat/contracts/long-short-position-ratio-contract-top-trader?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the top trader long short position ratio result = tradingDataAPI.get_top_trader_long_short_position_ratio( instId="BTC-USDT-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId string Yes Instrument ID, eg: BTC-USDT-SWAP Only applicable to FUTURES, SWAP period string No Bar size, the default is 5m, e.g. [5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line: [6H/12H/1D/2D/3D/5D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/5Dutc/1Wutc/1Mutc/3Mutc] end string No return records earlier than the requested ts begin string No return records newer than the requested ts limit string No Number of results per request. The maximum is 100. The default is 100. > Response example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1701417600000", // timestamp "1.1739" // long/short position num ratio of top traders ], [ "1701417600000", // timestamp "0.1236" // long/short position num ratio of top traders ], ] } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp, millisecond format of Unix timestamp, e.g. 1597026383085 longShortPosRatio String Long/short position ratio of top traders The data returned will be arranged in an array like this: [ts, longShortPosRatio]. GET CONTRACT LONG/SHORT RATIO Retrieve the account long/short ratio of a contract. This endpoint returns a maximum of 1440 records. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP + INSTRUMENTID HTTP REQUEST GET /api/v5/rubik/stat/contracts/long-short-account-ratio-contract > Request example Copy to ClipboardGET /api/v5/rubik/stat/contracts/long-short-account-ratio-contract?instId=BTC-USDT-SWAP Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the account long short ratio of a contract result = tradingDataAPI.get_contract_long_short_ratio( instId="BTC-USDT-SWAP" ) print(result) REQUEST PARAMETERS Parameter Type Required Description instId string Yes Instrument ID, eg: BTC-USDT-SWAP Only applicable to FUTURES, SWAP period string No Bar size, the default is 5m, e.g. [5m/15m/30m/1H/2H/4H] Hong Kong time opening price k-line:[6H/12H/1D/2D/3D/5D/1W/1M/3M] UTC time opening price k-line: [6Hutc/12Hutc/1Dutc/2Dutc/3Dutc/5Dutc/1Wutc/1Mutc/3Mutc] end string No return records earlier than the requested ts begin string No return records newer than the requested ts limit string No Number of results per request. The maximum is 100. The default is 100. > Response example Copy to Clipboard{ "code":"0", "msg":"", "data":[ [ "1701417600000", // timestamp "1.1739" // long/short account num ratio of traders ], [ "1701417600000", // timestamp "0.1236" // long/short account num ratio of traders ], ] } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp, millisecond format of Unix timestamp, e.g. 1597026383085 longShortAcctRatio String Long/short position num ratio of all traders The data returned will be arranged in an array like this: [ts, longAcctPosRatio]. GET LONG/SHORT RATIO Retrieve the ratio of users with net long vs net short positions for Expiry Futures and Perpetual Futures. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/contracts/long-short-account-ratio > Request Example Copy to ClipboardGET /api/v5/rubik/stat/contracts/long-short-account-ratio?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the ratio of users with net long vs net short positions for Expiry Futures and Perpetual Futures result = tradingDataAPI.get_long_short_ratio( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency begin String No Begin time, e.g. 1597026383085 end String No End time, e.g. 1597026383011 period String No Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only query data within two days at most 1H granularity can only query data within 30 days at most 1D granularity can only query data within 180 days at most > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630502100000", "1.25" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp ratio String Long/Short ratio The return value array order is: [ts,ratio] GET CONTRACTS OPEN INTEREST AND VOLUME Retrieve the open interest and trading volume for Expiry Futures and Perpetual Futures. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/contracts/open-interest-volume > Request Example Copy to ClipboardGET /api/v5/rubik/stat/contracts/open-interest-volume?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the open interest and trading volume for Expiry Futures and Perpetual Futures result = tradingDataAPI.get_contracts_interest_volume( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency begin String No Begin time, e.g. 1597026383085 end String No End time, e.g. 1597026383011 period String No Period, the default is 5m, e.g. [5m/1H/1D] 5m granularity can only query data within two days at most 1H granularity can only query data within 30 days at most 1D granularity can only query data within 180 days at most > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630502400000", "1713028741.6898", "39800873.554" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp oi String Total open interest(USD) vol String Total trading volume(USD) The return value array order is: [ts,oi,vol] GET OPTIONS OPEN INTEREST AND VOLUME Retrieve the open interest and trading volume for options. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/option/open-interest-volume > Request Example Copy to ClipboardGET /api/v5/rubik/stat/option/open-interest-volume?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the open interest and trading volume for options result = tradingDataAPI.get_options_interest_volume( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency period String No Period, the default is 8H. e.g. [8H/1D] Each granularity can only query 72 pieces of data at the earliest > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630368000000", "3458.1000", "78.8000" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp oi String Total open interest , unit in ccy (in request parameter) vol String Total trading volume , unit in ccy (in request parameter) The return value array order is: [ts,oi,vol] GET PUT/CALL RATIO Retrieve the open interest ratio and trading volume ratio of calls vs puts. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/option/open-interest-volume-ratio > Request Example Copy to ClipboardGET /api/v5/rubik/stat/option/open-interest-volume-ratio?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the open interest ratio and trading volume ratio of calls vs puts result = tradingDataAPI.get_put_call_ratio( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency period String No Period, the default is 8H. e.g. [8H/1D] Each granularity can only query 72 pieces of data at the earliest > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630512000000", "2.7261", "2.3447" ], [ "1630425600000", "2.8101", "2.3438" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp of data generation time oiRatio String Long/Short open interest ratio volRatio String Long/Short trading volume ratio The return value array order is: [ts,oiRatio,volRatio] GET OPEN INTEREST AND VOLUME (EXPIRY) Retrieve the open interest and trading volume of calls and puts for each upcoming expiration. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/option/open-interest-volume-expiry > Request Example Copy to ClipboardGET /api/v5/rubik/stat/option/open-interest-volume-expiry?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the open interest and trading volume of calls and puts for each upcoming expiration result = tradingDataAPI.get_interest_volume_expiry( ccy="BTC" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency period String No Period, the default is 8H. e.g. [8H/1D] Each granularity can provide only one latest piece of data > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630540800000", "20210902", "6.4", "18.4", "0.7", "0.4" ], [ "1630540800000", "20210903", "47", "36.6", "1", "10.7" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp expTime String Contract expiry date, the format is YYYYMMDD, e.g. 20210623 callOI String Total call open interest (coin as the unit) putOI String Total put open interest (coin as the unit) callVol String Total call trading volume (coin as the unit) putVol String Total put trading volume (coin as the unit) The return value array order is: [ts,expTime,callOI,putOI,callVol,putVol] GET OPEN INTEREST AND VOLUME (STRIKE) Retrieve the taker volume for both buyers and sellers of calls and puts. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/option/open-interest-volume-strike > Request Example Copy to ClipboardGET /api/v5/rubik/stat/option/open-interest-volume-strike?ccy=BTC&expTime=20210901 Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # Retrieve the taker volume for both buyers and sellers of calls and puts result = tradingDataAPI.get_interest_volume_strike( ccy="BTC", expTime="20210623" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency expTime String Yes Contract expiry date, the format is YYYYMMdd, e.g. 20210623 period String No Period, the default is 8H. e.g. [8H/1D] Each granularity can provide only one latest piece of data > Response Example Copy to Clipboard{ "code": "0", "data": [ [ "1630540800000", "10000", "0", "0.5", "0", "0" ], [ "1630540800000", "14000", "0", "5.2", "0", "0" ] ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp strike String Strike price callOI String Total call open interest (coin as the unit) putOI String Total put open interest (coin as the unit) callVol String Total call trading volume (coin as the unit) putVol String Total put trading volume (coin as the unit) The return value array order is: [ts,strike,callOI,putOI,callVol,putVol] GET TAKER FLOW This shows the relative buy/sell volume for calls and puts. It shows whether traders are bullish or bearish on price and volatility. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/rubik/stat/option/taker-block-volume > Request Example Copy to ClipboardGET /api/v5/rubik/stat/option/taker-block-volume?ccy=BTC Copy to Clipboardimport okx.TradingData as TradingData_api flag = "0" # Production trading:0 , demo trading:1 tradingDataAPI = TradingData_api.TradingDataAPI(flag=flag) # This shows the relative buy/sell volume for calls and puts. It shows whether traders are bullish or bearish on price and volatility result = tradingDataAPI.get_taker_block_volume( ccy="BTC", ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes currency period String No period, the default is 8H. e.g. [8H/1D] Each granularity can provide only one latest piece of data > Response Example Copy to Clipboard{ "code": "0", "data": [ "1630512000000", "8.55", "67.3", "16.05", "16.3", "126.4", "40.7" ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Timestamp callBuyVol String call option buy volume, in settlement currency callSellVol String call option sell volume, in settlement currency putBuyVol String put option buy volume, in settlement currency putSellVol String put option sell volume, in settlement currency callBlockVol String call block volume putBlockVol String put block volume The return value array order is: [ts,callBuyVol,callSellVol,putBuyVol,putSellVol,callBlockVol,putBlockVol] FUNDING ACCOUNT The API endpoints of Funding Account require authentication. REST API GET CURRENCIES Retrieve a list of all currencies available which are related to the current account's KYC entity. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/currencies > Request Example Copy to ClipboardGET /api/v5/asset/currencies Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get currencies result = fundingAPI.get_currencies() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Single currency or multiple currencies separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "canDep": true, "canInternal": true, "canWd": true, "ccy": "BTC", "chain": "BTC-Bitcoin", "depQuotaFixed": "", "depQuoteDailyLayer2": "", "logoLink": "https://static.coinall.ltd/cdn/oksupport/asset/currency/icon/btc.png", "mainNet": true, "maxFee": "0.0004", "maxFeeForCtAddr": "0.0004", "maxWd": "500", "minDep": "0.00005", "minDepArrivalConfirm": "1", "minFee": "0.0002", "minFeeForCtAddr": "0.0002", "minWd": "0.001", "minWdUnlockConfirm": "3", "name": "Bitcoin", "needTag": false, "usedDepQuotaFixed": "", "usedWdQuota": "0", "wdQuota": "200", "wdTickSz": "8" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC name String Name of currency. There is no related name when it is not shown. logoLink String The logo link of currency chain String Chain name, e.g. USDT-ERC20, USDT-TRC20 canDep Boolean The availability to deposit from chain false: not available true: available canWd Boolean The availability to withdraw to chain false: not available true: available canInternal Boolean The availability to internal transfer false: not available true: available minDep String The minimum deposit amount of currency in a single transaction minWd String The minimum on-chain withdrawal amount of currency in a single transaction maxWd String The maximum amount of currency on-chain withdrawal in a single transaction wdTickSz String The withdrawal precision, indicating the number of digits after the decimal point. The withdrawal fee precision kept the same as withdrawal precision. The accuracy of internal transfer withdrawal is 8 decimal places. wdQuota String The withdrawal limit in the past 24 hours (including on-chain withdrawal and internal transfer), unit in USD usedWdQuota String The amount of currency withdrawal used in the past 24 hours, unit in USD minFee String The minimum withdrawal fee for normal address Apply to on-chain withdrawal maxFee String The maximum withdrawal fee for normal address Apply to on-chain withdrawal minFeeForCtAddr String The minimum withdrawal fee for contract address Apply to on-chain withdrawal maxFeeForCtAddr String The maximum withdrawal fee for contract address Apply to on-chain withdrawal mainNet Boolean If current chain is main net, then it will return true, otherwise it will return false needTag Boolean Whether tag/memo information is required for withdrawal, e.g. EOS will return true minDepArrivalConfirm String The minimum number of blockchain confirmations to acknowledge fund deposit. The account is credited after that, but the deposit can not be withdrawn minWdUnlockConfirm String The minimum number of blockchain confirmations required for withdrawal of a deposit depQuotaFixed String The fixed deposit limit, unit in USD Return empty string if there is no deposit limit usedDepQuotaFixed String The used amount of fixed deposit quota, unit in USD Return empty string if there is no deposit limit depQuoteDailyLayer2 String The layer2 network daily deposit limit GET BALANCE Retrieve the funding account balances of all the assets and the amount that is available or on hold. Only asset information of a currency with a balance greater than 0 will be returned. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/balances > Request Example Copy to ClipboardGET /api/v5/asset/balances Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get balane result = fundingAPI.get_balances() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "availBal": "37.11827078", "bal": "37.11827078", "ccy": "ETH", "frozenBal": "0" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency bal String Balance frozenBal String Frozen balance availBal String Available balance GET NON-TRADABLE ASSETS RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/non-tradable-assets > Request Example Copy to ClipboardGET /api/v5/asset/non-tradable-assets Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) result = fundingAPI.get_non_tradable_assets() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "bal": "989.84719571", "canWd": true, "ccy": "CELT", "chain": "CELT-OKTC", "ctAddr": "f403fb", "fee": "2", "logoLink": "https://static.coinall.ltd/cdn/assets/imgs/221/460DA8A592400393.png", "minWd": "0.1", "name": "", "needTag": false, "wdAll": false, "wdTickSz": "8" }, { "bal": "0.001", "canWd": true, "ccy": "MEME", "chain": "MEME-ERC20", "ctAddr": "09b760", "fee": "5", "logoLink": "https://static.coinall.ltd/cdn/assets/imgs/207/2E664E470103C613.png", "minWd": "0.001", "name": "MEME Inu", "needTag": false, "wdAll": false, "wdTickSz": "8" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. CELT name String Chinese name of currency. There is no related name when it is not shown. logoLink String Logo link of currency bal String Withdrawable balance canWd Boolean Availability to withdraw to chain. false: not available true: available chain String Chain for withdrawal minWd String Minimum withdrawal amount of currency in a single transaction wdAll Boolean Whether all assets in this currency must be withdrawn at one time fee String Fixed withdrawal fee Withdrawal fee precision is 8 digits after the decimal point. ctAddr String Last 6 digits of contract address wdTickSz String Withdrawal precision, indicating the number of digits after the decimal point needTag Boolean Whether tag/memo information is required for withdrawal GET ACCOUNT ASSET VALUATION View account asset valuation RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/asset-valuation > Request Example Copy to ClipboardGET /api/v5/asset/asset-valuation Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get account asset valuation result = fundingAPI.get_asset_valuation() print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Asset valuation calculation unit BTC, USDT USD, CNY, JP, KRW, RUB, EUR VND, IDR, INR, PHP, THB, TRY AUD, SGD, ARS, SAR, AED, IQD The default is the valuation in BTC. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "details": { "classic": "124.6", "earn": "1122.73", "funding": "0.09", "trading": "2544.28" }, "totalBal": "3790.09", "ts": "1637566660769" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description totalBal String Valuation of total account assets ts String Unix timestamp format in milliseconds, e.g.1597026383085 details Object Asset valuation details for each account > funding String Funding account > trading String Trading account > classic String [Deprecated] Classic account > earn String Earn account FUNDS TRANSFER Only API keys with Trade privilege can call this endpoint. This endpoint supports the transfer of funds between your funding account and trading account, and from the master account to sub-accounts. Sub-account can transfer out to master account by default. Need to call Set permission of transfer out to grant privilege first if you want sub-account transferring to another sub-account (sub-accounts need to belong to same master account.) Failure of the request does not mean the transfer has failed. Recommend to call "Get funds transfer state" to confirm the status. RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID + CURRENCY HTTP REQUEST POST /api/v5/asset/transfer > Request Example Copy to Clipboard# Transfer 1.5 USDT from funding account to Trading account when current account is master-account POST /api/v5/asset/transfer body { "ccy":"USDT", "amt":"1.5", "from":"6", "to":"18" } # Transfer 1.5 USDT from funding account to subAccount when current account is master-account POST /api/v5/asset/transfer body { "ccy":"USDT", "type":"1", "amt":"1.5", "from":"6", "to":"6", "subAcct":"mini" } # Transfer 1.5 USDT from funding account to subAccount when current account is sub-account POST /api/v5/asset/transfer body { "ccy":"USDT", "type":"4", "amt":"1.5", "from":"6", "to":"6", "subAcct":"mini" } Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Funds transfer result = fundingAPI.funds_transfer( ccy="USDT", amt="1.5", from_="6", to="18" ) print(result) REQUEST PARAMETERS Parameter Type Required Description type String No Transfer type 0: transfer within account 1: master account to sub-account (Only applicable to API Key from master account) 2: sub-account to master account (Only applicable to API Key from master account) 3: sub-account to master account (Only applicable to APIKey from sub-account) 4: sub-account to sub-account (Only applicable to APIKey from sub-account, and target account needs to be another sub-account which belongs to same master account. Sub-account directly transfer out permission is disabled by default, set permission please refer to Set permission of transfer out) The default is 0. If you want to make transfer between sub-accounts by master account API key, refer to Master accounts manage the transfers between sub-accounts ccy String Yes Transfer currency, e.g. USDT amt String Yes Amount to be transferred from String Yes The remitting account 6: Funding account 18: Trading account to String Yes The beneficiary account 6: Funding account 18: Trading account subAcct String Conditional Name of the sub-account When type is 1/2/4, this parameter is required. loanTrans Boolean No Whether or not borrowed coins can be transferred out under Multi-currency margin and Portfolio margin true: borrowed coins can be transferred out false: borrowed coins cannot be transferred out the default is false omitPosRisk String No Ignore position risk Default is false Applicable to Portfolio margin clientId String No Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "transId": "754147", "ccy": "USDT", "clientId": "", "from": "6", "amt": "0.1", "to": "18" } ] } RESPONSE PARAMETERS > Response Example Parameter Type Description transId String Transfer ID clientId String Client-supplied ID ccy String Currency from String The remitting account amt String Transfer amount to String The beneficiary account GET FUNDS TRANSFER STATE Retrieve the transfer state data of the last 2 weeks. RATE LIMIT: 10 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/transfer-state > Request Example Copy to ClipboardGET /api/v5/asset/transfer-state?transId=1&type=1 Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get funds transfer state result = fundingAPI.transfer_state( transId="248424899", type="0" ) print(result) REQUEST PARAMETERS Parameter Type Required Description transId String Conditional Transfer ID Either transId or clientId is required. If both are passed, transId will be used. clientId String Conditional Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. type String No Transfer type 0: transfer within account 1: master account to sub-account (Only applicable to API Key from master account) 2: sub-account to master account (Only applicable to API Key from master account) 3: sub-account to master account (Only applicable to APIKey from sub-account) 4: sub-account to sub-account (Only applicable to APIKey from sub-account, and target account needs to be another sub-account which belongs to same master account) The default is 0 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "1.5", "ccy": "USDT", "clientId": "", "from": "18", "instId": "", //deprecated "state": "success", "subAcct": "test", "to": "6", "toInstId": "", //deprecated "transId": "1", "type": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description transId String Transfer ID clientId String Client-supplied ID ccy String Currency, e.g. USDT amt String Amount to be transferred type String Transfer type 0: transfer within account 1: master account to sub-account (Only applicable to API Key from master account) 2: sub-account to master account (Only applicable to APIKey from master account) 3: sub-account to master account (Only applicable to APIKey from sub-account) 4: sub-account to sub-account (Only applicable to APIKey from sub-account, and target account needs to be another sub-account which belongs to same master account) from String The remitting account 6: Funding account 18: Trading account to String The beneficiary account 6: Funding account 18: Trading account subAcct String Name of the sub-account instId String deprecated toInstId String deprecated state String Transfer state success pending failed ASSET BILLS DETAILS Query the billing record in the past month. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/bills > Request Example Copy to ClipboardGET /api/v5/asset/bills Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get asset bills details result = fundingAPI.get_bills() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency type String No Bill type 1: Deposit 2: Withdrawal 13: Canceled withdrawal 20: Transfer to sub account (for master account) 21: Transfer from sub account (for master account) 22: Transfer out from sub to master account (for sub-account) 23: Transfer in from master to sub account (for sub-account) 28: Manually claimed Airdrop 47: System reversal 48: Event Reward 49: Event Giveaway 61: [Convert] Exchange between crypto 68: Fee rebate (by rebate card) 72: Token received 73: Token given away 74: Token refunded 75: Subscription to savings 76: Redemption to savings 77: Jumpstart distribute 78: Jumpstart lock up 80: DEFI/Staking purchase 82: DEFI/Staking redemption 83: Staking yield 84: Violation fee 116: [Fiat] Place an order 117: [Fiat] Fulfill an order 118: [Fiat] Cancel an order 124: Jumpstart unlocking 130: Transferred from Trading account 131: Transferred to Trading account 132: [P2P] Frozen by customer service 133: [P2P] Unfrozen by customer service 134: [P2P] Transferred by customer service 135: Cross chain exchange 136: ETH 2.0 staking system account increase ETH (for on-chain operation) 137: ETH 2.0 Subscription 138: ETH 2.0 Swapping 139: ETH 2.0 Earnings 146: Customer feedback 150: Affiliate commission 151: Referral reward 152: Broker reward 160: Dual Investment subscribe 161: Dual Investment collection 162: Dual Investment profit 163: Dual Investment refund 172: [Affiliate] Sub-affiliate commission 173: [Affiliate] Fee rebate (by trading fee) 174: Jumpstart Pay 175: Locked collateral 176: Loan 177: Added collateral 178: Returned collateral 179: Repayment 180: Unlocked collateral 181: Airdrop payment 185: [Broker] Convert reward 187: [Broker] Convert transfer 189: Mystery box bonus 195: Untradable asset withdrawal 196: Untradable asset withdrawal revoked 197: Untradable asset deposit 198: Untradable asset collection reduce 199: Untradable asset collection increase 200: Buy 202: Price Lock Subscribe 203: Price Lock Collection 204: Price Lock Profit 205: Price Lock Refund 207: Dual Investment Lite Subscribe 208: Dual Investment Lite Collection 209: Dual Investment Lite Profit 210: Dual Investment Lite Refund 212: [Flexible loan] Multi-collateral loan collateral locked 214: [Flexible loan] Collateral returned to users 216: [Flexible loan] Loan transfer into user's funding account 218: [Flexible loan] Multi-collateral loan repaid 220: Delisted crypto 221: Blockchain's withdrawal fee 222: Withdrawal fee refund 223: SWAP lead trading profit share 225: Shark Fin subscribe 226: Shark Fin collection 227: Shark Fin profit 228: Shark Fin refund 229: Airdrop 233: Broker rebate compensation 240: Snowball subscribe 241: Snowball refund 242: Snowball profit 243: Snowball trading failed 249: Seagull subscribe 250: Seagull collection 251: Seagull profit 252: Seagull refund 263: Strategy bots profit share 265: Signal revenue 266: SPOT lead trading profit share 270: DCD broker transfer 271: DCD broker rebate 272: [Convert] Buy Crypto/Fiat 273: [Convert] Sell Crypto/Fiat 284: [Custody] Transfer out trading sub-account 285: [Custody] Transfer in trading sub-account 286: [Custody] Transfer out custody funding account 287: [Custody] Transfer in custody funding account 288: [Custody] Fund delegation 289: [Custody] Fund undelegation 299: Affiliate recommendation commission 300: Fee discount rebate 303: Snowball market maker transfer 304: Simple Earn Fixed order submission 305: Simple Earn Fixed order redemption 306: Simple Earn Fixed principal distribution 307: Simple Earn Fixed interest distribution (early termination compensation) 308: Simple Earn Fixed interest distribution 309: Simple Earn Fixed interest distribution (extension compensation) 311: Crypto dust auto-transfer in clientId String No Client-supplied ID for transfer or withdrawal A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "billId": "12344", "ccy": "BTC", "clientId": "", "balChg": "2", "bal": "12", "type": "1", "ts": "1597026383085" }] } RESPONSE PARAMETERS Parameter Type Description billId String Bill ID ccy String Account balance currency clientId String Client-supplied ID for transfer or withdrawal balChg String Change in balance at the account level bal String Balance at the account level type String Bill type ts String Creation time, Unix timestamp format in milliseconds, e.g.1597026383085 GET DEPOSIT ADDRESS Retrieve the deposit addresses of currencies, including previously-used addresses. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/deposit-address > Request Example Copy to ClipboardGET /api/v5/asset/deposit-address?ccy=BTC Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get deposit address result = fundingAPI.get_deposit_address( ccy="USDT" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "data": [ { "chain": "BTC-Bitcoin", "ctAddr": "", "ccy": "BTC", "to": "6", "addr": "39XNxK1Ryqgg3Bsyn6HzoqV4Xji25pNkv6", "verifiedName":"John Corner", "selected": true }, { "chain": "BTC-OKC", "ctAddr": "", "ccy": "BTC", "to": "6", "addr": "0x66d0edc2e63b6b992381ee668fbcb01f20ae0428", "verifiedName":"John Corner", "selected": true }, { "chain": "BTC-ERC20", "ctAddr": "5807cf", "ccy": "BTC", "to": "6", "addr": "0x66d0edc2e63b6b992381ee668fbcb01f20ae0428", "verifiedName":"John Corner", "selected": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description addr String Deposit address tag String Deposit tag (This will not be returned if the currency does not require a tag for deposit) memo String Deposit memo (This will not be returned if the currency does not require a memo for deposit) pmtId String Deposit payment ID (This will not be returned if the currency does not require a payment_id for deposit) addrEx Object Deposit address attachment (This will not be returned if the currency does not require this) e.g. TONCOIN attached tag name is comment, the return will be {'comment':'123456'} ccy String Currency, e.g. BTC chain String Chain name, e.g. USDT-ERC20, USDT-TRC20 to String The beneficiary account 6: Funding account 18: Trading account verifiedName String Verified name (for recipient) selected Boolean Return true if the current deposit address is selected by the website page ctAddr String Last 6 digits of contract address GET DEPOSIT HISTORY Retrieve the deposit records according to the currency, deposit status, and time range in reverse chronological order. The 100 most recent records are returned by default. Websocket API is also available, refer to Deposit info channel. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/deposit-history > Request Example Copy to Clipboard GET /api/v5/asset/deposit-history # Query deposit history from 2022-06-01 to 2022-07-01 GET /api/v5/asset/deposit-history?ccy=BTC&after=1654041600000&before=1656633600000 Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get deposit history result = fundingAPI.get_deposit_history() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency, e.g. BTC depId String No Deposit ID fromWdId String No Internal transfer initiator's withdrawal ID If the deposit comes from internal transfer, this field displays the withdrawal ID of the internal transfer initiator txId String No Hash record of the deposit type String No Deposit Type 3: internal transfer 4: deposit from chain state String No Status of deposit 0: waiting for confirmation 1: deposit credited 2: deposit successful 8: pending due to temporary deposit suspension on this crypto currency 11: match the address blacklist 12: account or deposit is frozen 13: sub-account deposit interception 14: KYC limit after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1654041600000 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1656633600000 limit string No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "actualDepBlkConfirm": "2", "amt": "1", "areaCodeFrom": "", "ccy": "USDT", "chain": "USDT-TRC20", "depId": "88****33", "from": "", "fromWdId": "", "state": "2", "to": "TN4hGjVXMzy*********9b4N1aGizqs", "ts": "1674038705000", "txId": "fee235b3e812********857d36bb0426917f0df1802" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency chain String Chain name amt String Deposit amount from String Deposit account If the deposit comes from an internal transfer, this field displays the account information of the internal transfer initiator, which can be a mobile phone number, email address, account name, and will return "" in other cases areaCodeFrom String If from is a phone number, this parameter return area code of the phone number to String Deposit address If the deposit comes from the on-chain, this field displays the on-chain address, and will return "" in other cases txId String Hash record of the deposit ts String The timestamp that the deposit record is created, Unix timestamp format in milliseconds, e.g. 1655251200000 state String Status of deposit 0: Waiting for confirmation 1: Deposit credited 2: Deposit successful 8: Pending due to temporary deposit suspension on this crypto currency 11: Match the address blacklist 12: Account or deposit is frozen 13: Sub-account deposit interception 14: KYC limit depId String Deposit ID fromWdId String Internal transfer initiator's withdrawal ID If the deposit comes from internal transfer, this field displays the withdrawal ID of the internal transfer initiator, and will return "" in other cases actualDepBlkConfirm String The actual amount of blockchain confirmed in a single deposit About deposit state Waiting for confirmation is that the required number of blockchain confirmations has not been reached. Deposit credited is that there is sufficient number of blockchain confirmations for the currency to be credited to the account, but it cannot be withdrawn yet. Deposit successful means the crypto has been credited to the account and it can be withdrawn. WITHDRAWAL Withdrawal of tokens. Common sub-account does not support withdrawal. The API can only make withdrawal to verified addresses/account, and verified addresses can be set by WEB/APP. About tag Some token deposits require a deposit address and a tag (e.g. Memo/Payment ID), which is a string that guarantees the uniqueness of your deposit address. Follow the deposit procedure carefully, or you may risk losing your assets. For currencies with labels, if it is a withdrawal between OKX users, please use internal transfer instead of online withdrawal The following content only applies to users residing in the United Arab Emirates Due to local laws and regulations in your country or region, a certain ratio of user assets must be stored in cold wallets. We will perform cold-to-hot wallet asset transfers from time to time. However, if assets in hot wallets are not sufficient to meet user withdrawal demands, an extra step is needed to transfer cold wallet assets to the hot wallet. This may cause delays of up to 24 hours to receive withdrawals. Learn more (https://www.okx.com/help/what-is-a-segregated-wallet-and-why-is-my-withdrawal-delayed) RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/asset/withdrawal > Request Example Copy to Clipboard# on-chain withdrawal POST /api/v5/asset/withdrawal body { "amt":"1", "fee":"0.0005", "dest":"4", "ccy":"BTC", "chain":"BTC-Bitcoin", "toAddr":"17DKe3kkkkiiiiTvAKKi2vMPbm1Bz3CMKw" } # internal withdrawal POST /api/v5/asset/withdrawal body { "amt":"10", "fee":"0", "dest":"3", "ccy":"USDT", "areaCode":"86", "toAddr":"15651000000" } # Specific entity users need to provide receiver's info POST /api/v5/asset/withdrawal body { "amt":"1", "fee":"0.0005", "dest":"4", "ccy":"BTC", "chain":"BTC-Bitcoin", "toAddr":"17DKe3kkkkiiiiTvAKKi2vMPbm1Bz3CMKw", "rcvrInfo":{ "walletType":"exchange", "exchId":"did:ethr:0xfeb4f99829a9acdf52979abee87e83addf22a7e1", "rcvrFirstName":"Bruce", "rcvrLastName":"Wayne" } } Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Withdrawal result = fundingAPI.withdrawal( ccy="USDT", toAddr="TXtvfb7cdrn6VX9H49mgio8bUxZ3DGfvYF", amt="100", fee="0.0005", dest="4", chain="USDT-TRC20" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency, e.g. USDT amt String Yes Withdrawal amount Withdrawal fee is not included in withdrawal amount. dest String Yes Withdrawal method 3: internal transfer 4: on-chain withdrawal toAddr String Yes toAddr should be a trusted address/account. If your dest is 4, some crypto currency addresses are formatted as 'address:tag', e.g. 'ARDOR-7JF3-8F2E-QUWZ-CAN7F:123456' If your dest is 3,toAddr should be a recipient address which can be email, phone or login account name (account name is only for sub-account). fee String Yes Transaction fee You can get fee amount by the endpoint of Get currencies. For internal transfer, transaction fee is always 0. chain String Conditional Chain name There are multiple chains under some currencies, such as USDT has USDT-ERC20, USDT-TRC20 If the parameter is not filled in, the default will be the main chain. When you withdrawal the non-tradable asset, if the parameter is not filled in, the default will be the unique withdrawal chain. Apply to on-chain withdrawal. You can get supported chain name by the endpoint of Get currencies. areaCode String Conditional Area code for the phone number, e.g. 86 If toAddr is a phone number, this parameter is required. Apply to internal transfer rcvrInfo Object Conditional Recipient information For the specific entity users to do on-chain withdrawal/lightning withdrawal, this information is required. > walletType String Yes Wallet Type exchange: Withdraw to exchange wallet private: Withdraw to private wallet If withdrawal to the exchange wallet, relevant information about the recipient must be provided. For the exchange wallet belongs to business recipient, rcvrFirstName may input the company name, rcvrLastName may input "N/A", location info may input the registered address of the company. Withdrawal to a private wallet does not require providing recipient information. > exchId String Conditional Exchange ID You can query supported exchanges through the endpoint of Get exchange list (public) If the exchange is not in the exchange list, fill in '0' in this field. Apply to walletType = exchange > rcvrFirstName String Conditional Receiver's first name, e.g. Bruce Apply to walletType = exchange > rcvrLastName String Conditional Receiver's last name, e.g. Wayne Apply to walletType = exchange > rcvrCountry String Conditional The recipient's country, e.g. United States You must enter an English country name or a two letter country code (ISO 3166-1). Please refer to the Country Name and Country Code in the country information table below. Apply to walletType = exchange > rcvrCountrySubDivision String Conditional State/Province of the recipient, e.g. California Apply to walletType = exchange > rcvrTownName String Conditional The town/city where the recipient is located, e.g. San Jose Apply to walletType = exchange > rcvrStreetName String Conditional Recipient's street address, e.g. Clementi Avenue 1 Apply to walletType = exchange clientId String No Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "amt": "0.1", "wdId": "67485", "ccy": "BTC", "clientId": "", "chain": "BTC-Bitcoin" }] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency chain String Chain name, e.g. USDT-ERC20, USDT-TRC20 amt String Withdrawal amount wdId String Withdrawal ID clientId String Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. COUNTRY INFORMATION Country name Country code Afghanistan AF Albania AL Algeria DZ Andorra AD Angola AO Anguilla AI Antigua and Barbuda AG Argentina AR Armenia AM Australia AU Austria AT Azerbaijan AZ Bahamas BS Bahrain BH Bangladesh BD Barbados BB Belarus BY Belgium BE Belize BZ Benin BJ Bermuda BM Bhutan BT Bolivia BO Bosnia and Herzegovina BA Botswana BW Brazil BR British Virgin Islands VG Brunei BN Bulgaria BG Burkina Faso BF Burundi BI Cambodia KH Cameroon CM Canada CA Cape Verde CV Cayman Islands KY Central African Republic CF Chad TD Chile CL Colombia CO Comoros KM Congo (Republic) CG Congo (Democratic Republic) CD Costa Rica CR Cote d´Ivoire (Ivory Coast) CI Croatia HR Cuba CU Cyprus CY Czech Republic CZ Denmark DK Djibouti DJ Dominica DM Dominican Republic DO Ecuador EC Egypt EG El Salvador SV Equatorial Guinea GQ Eritrea ER Estonia EE Ethiopia ET Fiji FJ Finland FI France FR Gabon GA Gambia GM Georgia GE Germany DE Ghana GH Greece GR Grenada GD Guatemala GT Guinea GN Guinea-Bissau GW Guyana GY Haiti HT Honduras HN Hong Kong HK Hungary HU Iceland IS India IN Indonesia ID Iran IR Iraq IQ Ireland IE Israel IL Italy IT Jamaica JM Japan JP Jordan JO Kazakhstan KZ Kenya KE Kiribati KI North Korea KP South Korea KR Kuwait KW Kyrgyzstan KG Laos LA Latvia LV Lebanon LB Lesotho LS Liberia LR Libya LY Liechtenstein LI Lithuania LT Luxembourg LU Macau MO Macedonia MK Madagascar MG Malawi MW Malaysia MY Maldives MV Mali ML Malta MT Marshall Islands MH Mauritania MR Mauritius MU Mexico MX Micronesia FM Moldova MD Monaco MC Mongolia MN Montenegro ME Morocco MA Mozambique MZ Myanmar (Burma) MM Namibia NA Nauru NR Nepal NP Netherlands NL New Zealand NZ Nicaragua NI Niger NE Nigeria NG Norway NO Oman OM Pakistan PK Palau PW Panama PA Papua New Guinea PG Paraguay PY Peru PE Philippines PH Poland PL Portugal PT Qatar QA Romania RO Russia RU Rwanda RW Saint Kitts and Nevis KN Saint Lucia LC Saint Vincent and the Grenadines VC Samoa WS San Marino SM Sao Tome and Principe ST Saudi Arabia SA Senegal SN Serbia RS Seychelles SC Sierra Leone SL Singapore SG Slovakia SK Slovenia SI Solomon Islands SB Somalia SO South Africa ZA Spain ES Sri Lanka LK Sudan SD Suriname SR Swaziland SZ Sweden SE Switzerland CH Syria SY Taiwan TW Tajikistan TJ Tanzania TZ Thailand TH Timor-Leste (East Timor) TL Togo TG Tonga TO Trinidad and Tobago TT Tunisia TN Turkey TR Turkmenistan TM Tuvalu TV U.S. Virgin Islands VI Uganda UG Ukraine UA United Arab Emirates AE United Kingdom GB United States US Uruguay UY Uzbekistan UZ Vanuatu VU Vatican City VA Venezuela VE Vietnam VN Yemen YE Zambia ZM Zimbabwe ZW Kosovo XK South Sudan SS China CN Palestine PS Curacao CW Dominican Republic DO Dominican Republic DO Gibraltar GI New Caledonia NC Cook Islands CK Reunion RE Guernsey GG Guadeloupe GP Martinique MQ French Polynesia PF Faroe Islands FO Greenland GL Jersey JE Aruba AW Puerto Rico PR Isle of Man IM Guam GU Sint Maarten SX Turks and Caicos TC Åland Islands AX Caribbean Netherlands BQ British Indian Ocean Territory IO Christmas as Island CX Cocos (Keeling) Islands CC Falkland Islands (Islas Malvinas) FK Mayotte YT Niue NU Norfolk Island NF Northern Mariana Islands MP Pitcairn Islands PN Saint Helena, Ascension and Tristan da Cunha SH Collectivity of Saint Martin MF Saint Pierre and Miquelon PM Tokelau TK Wallis and Futuna WF American Samoa AS CANCEL WITHDRAWAL You can cancel normal withdrawal requests, but you cannot cancel withdrawal requests on Lightning. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/asset/cancel-withdrawal > Request Example Copy to ClipboardPOST /api/v5/asset/cancel-withdrawal body { "wdId":"1123456" } Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Cancel withdrawal result = fundingAPI.cancel_withdrawal( wdId="123456" ) print(result) REQUEST PARAMETERS Parameter Type Required Description wdId String Yes Withdrawal ID > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "wdId": "1123456" } ] } RESPONSE PARAMETERS Parameter Type Description wdId String Withdrawal ID If the code is equal to 0, it cannot be strictly considered that the withdrawal has been revoked. It only means that your request is accepted by the server. The actual result is subject to the status in the withdrawal history. GET WITHDRAWAL HISTORY Retrieve the withdrawal records according to the currency, withdrawal status, and time range in reverse chronological order. The 100 most recent records are returned by default. Websocket API is also available, refer to Withdrawal info channel. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/withdrawal-history > Request Example Copy to Clipboard GET /api/v5/asset/withdrawal-history # Query withdrawal history from 2022-06-01 to 2022-07-01 GET /api/v5/asset/withdrawal-history?ccy=BTC&after=1654041600000&before=1656633600000 REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency, e.g. BTC wdId String No Withdrawal ID clientId String No Client-supplied ID A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. txId String No Hash record of the deposit type String No Withdrawal type 3: Internal transfer 4: On-chain withdrawal state String No Status of withdrawal Stage 1 : Pending withdrawal10: Waiting transfer 0: Waiting withdrawal 4/5/6/8/9/12: Waiting manual review 7: Approved Stage 2 : Withdrawal in progress (Applicable to on-chain withdrawals, internal transfers do not have this stage)1: Broadcasting your transaction to chain 15: Pending transaction validation 16: Due to local laws and regulations, your withdrawal may take up to 24 hours to arrive -3: Canceling Final stage-2: Canceled -1: Failed 2: Success after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1654041600000 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1656633600000 limit String No Number of results per request. The maximum is 100; The default is 100 > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "chain": "ETH-Ethereum", "fee": "0.007", "ccy": "ETH", "clientId": "", "amt": "0.029809", "txId": "0x35c******b360a174d", "from": "156****359", "areaCodeFrom": "86", "to": "0xa30d1fab********7CF18C7B6C579", "areaCodeTo": "", "state": "2", "ts": "1655251200000", "wdId": "15447421" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency chain String Chain name, e.g. USDT-ERC20, USDT-TRC20 nonTradableAsset Boolean Whether it is a non-tradable asset or not true: non-tradable asset, false: tradable asset amt String Withdrawal amount ts String Time the withdrawal request was submitted, Unix timestamp format in milliseconds, e.g. 1655251200000. from String Withdrawal account It can be email/phone/sub-account name areaCodeFrom String Area code for the phone number If from is a phone number, this parameter returns the area code for the phone number to String Receiving address areaCodeTo String Area code for the phone number If to is a phone number, this parameter returns the area code for the phone number tag String Some currencies require a tag for withdrawals. This is not returned if not required. pmtId String Some currencies require a payment ID for withdrawals. This is not returned if not required. memo String Some currencies require this parameter for withdrawals. This is not returned if not required. addrEx Object Withdrawal address attachment (This will not be returned if the currency does not require this) e.g. TONCOIN attached tag name is comment, the return will be {'comment':'123456'} txId String Hash record of the withdrawal This parameter will return "" for internal transfers. fee String Withdrawal fee amount feeCcy String Withdrawal fee currency, e.g. USDT state String Status of withdrawal wdId String Withdrawal ID clientId String Client-supplied ID GET DEPOSIT WITHDRAW STATUS Retrieve deposit's and withdrawal's detailed status and estimated complete time. RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/deposit-withdraw-status > Request Example Copy to Clipboard# For deposit GET /api/v5/asset/deposit-withdraw-status?txId=xxxxxx&to=1672734730284&ccy=USDT&chain=USDT-ERC20 # For withdrawal GET /api/v5/asset/deposit-withdraw-status?wdId=200045249 REQUEST PARAMETERS Parameters Types Required Description wdId String Conditional Withdrawl ID, use to retrieve withdrawal status Required to input one and only one of wdId and txId txId String Conditional Hash record of the deposit, use to retrieve deposit status Required to input one and only one of wdId and txId ccy String Conditional Currency type, e.g. USDT Required when retrieving deposit status with txId to String Conditional To address, the destination address in deposit Required when retrieving deposit status with txId chain String Conditional Currency chain infomation, e.g. USDT-ERC20 Required when retrieving deposit status with txId > Response Example Copy to Clipboard{ "code":"0", "data":[ { "wdId": "200045249", "txId": "16f3638329xxxxxx42d988f97", "state": "Pending withdrawal: Wallet is under maintenance, please wait.", "estCompleteTime": "01/09/2023, 8:10:48 PM" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description estCompleteTime String Estimated complete time The timezone is UTC+8. The format is MM/dd/yyyy, h:mm:ss AM/PM estCompleteTime is only an approximate estimated time, for reference only. state String The detailed stage and status of the deposit/withdrawal The message in front of the colon is the stage; the message after the colon is the ongoing status. txId String Hash record on-chain For withdrawal, if the txId has already been generated, it will return the value, otherwise, it will return "". wdId String Withdrawal ID When retrieving deposit status, wdId returns blank "". Stage References Deposit Stage 1: On-chain transaction detection Stage 2: Push deposit data to associated account Stage 3: Receiving account credit Final stage: Deposit complete Withdrawal Stage 1: Pending withdrawal Stage 2: Withdrawal in progress Final stage: Withdrawal complete / cancellation complete SMALL ASSETS CONVERT Convert small assets in funding account to OKB. Only 5 convert is allowed within 24 hours. RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/asset/convert-dust-assets > Request Example Copy to ClipboardPOST /api/v5/asset/convert-dust-assets body { "ccy":["BTC","USDT"] } Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Small assets convert result = fundingAPI.convert_dust_assets( ccy=["BTC","USDT"] ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy Array of strings Yes Small assets needed to be converted, e.g. ["BTC","USDT"] > Response Example Copy to Clipboard{ "code": "0", "data": [ { "details": [ { "amt": "1", "ccy": "USDT", "cnvAmt": "0.04771642808422", "fee": "0.00097380465478" } ], "totalCnvAmt": "0.04771642" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description totalCnvAmt String Total quantity of OKB after conversion details Array of objects Details of asset conversion > ccy String Currency, e.g. BTC > amt String Quantity of currency assets before conversion > cnvAmt String Quantity of OKB after conversion > fee String Fee for conversion, unit in OKB GET EXCHANGE LIST (PUBLIC) Authentication is not required for this public endpoint. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/asset/exchange-list > Request Example Copy to ClipboardGET /api/v5/asset/exchange-list Copy to Clipboard REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "exchId": "did:ethr:0xfeb4f99829a9acdf52979abee87e83addf22a7e1", "exchName": "1xbet" } ] } RESPONSE PARAMETERS Parameter Type Description exchName String Exchange name, e.g. 1xbet exchId String Exchange ID, e.g. did:ethr:0xfeb4f99829a9acdf52979abee87e83addf22a7e1 APPLY FOR MONTHLY STATEMENT (LAST YEAR) Apply for monthly statement in the past year. RATE LIMIT: 20 REQUESTS PER MONTH RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/asset/monthly-statement > Request Example Copy to ClipboardPOST /api/v5/asset/monthly-statement body { "month":"Jan" } REQUEST PARAMETERS Parameter Type Required Description month String No Month,last month by default. Valid value is Jan, Feb, Mar, Apr,May, Jun, Jul,Aug, Sep,Oct,Nov,Dec > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ts": "1646892328000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ts String Download link generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET MONTHLY STATEMENT (LAST YEAR) Retrieve monthly statement in the past year. RATE LIMIT: 10 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/monthly-statement > Request Example Copy to ClipboardGET /api/v5/asset/monthly-statement?month=Jan REQUEST PARAMETERS Parameter Type Required Description month String Yes Month, valid value is Jan, Feb, Mar, Apr,May, Jun, Jul,Aug, Sep,Oct,Nov,Dec > Response Example Copy to Clipboard{ "code": "0", "data": [ { "fileHref": "http://xxx", "state": "finished", "ts": "1646892328000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description fileHref String Download file link ts String Download link generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 state String Download link status "finished" "ongoing" GET CONVERT CURRENCIES RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/convert/currencies > Request Example Copy to ClipboardGET /api/v5/asset/convert/currencies RESPONSE PARAMETERS none > Response Example Copy to Clipboard{ "code": "0", "data": [ { "min": "", // Deprecated "max": "", // Deprecated "ccy": "BTC" }, { "min": "", "max": "", "ccy": "ETH" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC min String Minimum amount to convert ( Deprecated ) max String Maximum amount to convert ( Deprecated ) GET CONVERT CURRENCY PAIR RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/convert/currency-pair > Request Example Copy to ClipboardGET /api/v5/asset/convert/currency-pair?fromCcy=USDT&toCcy=BTC RESPONSE PARAMETERS Parameters Types Required Description fromCcy String Yes Currency to convert from, e.g. USDT toCcy String Yes Currency to convert to, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "data": [ { "baseCcy": "BTC", "baseCcyMax": "0.5", "baseCcyMin": "0.0001", "instId": "BTC-USDT", "quoteCcy": "USDT", "quoteCcyMax": "10000", "quoteCcyMin": "1" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description instId String Currency pair, e.g. BTC-USDT baseCcy String Base currency, e.g. BTC in BTC-USDT baseCcyMax String Maximum amount of base currency baseCcyMin String Minimum amount of base currency quoteCcy String Quote currency, e.g. USDT in BTC-USDT quoteCcyMax String Maximum amount of quote currency quoteCcyMin String Minimum amount of quote currency ESTIMATE QUOTE RATE LIMIT: 10 REQUESTS PER SECOND RATE LIMIT RULE: USERID RATE LIMIT: 1 REQUEST PER 5 SECONDS RATE LIMIT RULE: INSTRUMENT HTTP REQUEST POST /api/v5/asset/convert/estimate-quote > Request Example Copy to ClipboardPOST /api/v5/asset/convert/estimate-quote body { "baseCcy": "ETH", "quoteCcy": "USDT", "side": "buy", "rfqSz": "30", "rfqSzCcy": "USDT" } REQUEST PARAMETERS Parameters Types Required Description baseCcy String Yes Base currency, e.g. BTC in BTC-USDT quoteCcy String Yes Quote currency, e.g. USDT in BTC-USDT side String Yes Trade side based on baseCcy buy sell rfqSz String Yes RFQ amount rfqSzCcy String Yes RFQ currency clQReqId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag Applicable to broker user > Response Example Copy to Clipboard{ "code": "0", "data": [ { "baseCcy": "ETH", "baseSz": "0.01023052", "clQReqId": "", "cnvtPx": "2932.40104429", "origRfqSz": "30", "quoteCcy": "USDT", "quoteId": "quoterETH-USDT16461885104612381", "quoteSz": "30", "quoteTime": "1646188510461", "rfqSz": "30", "rfqSzCcy": "USDT", "side": "buy", "ttlMs": "10000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description quoteTime String Quotation generation time, Unix timestamp format in milliseconds, e.g. 1597026383085 ttlMs String Validity period of quotation in milliseconds clQReqId String Client Order ID as assigned by the client quoteId String Quote ID baseCcy String Base currency, e.g. BTC in BTC-USDT quoteCcy String Quote currency, e.g. USDT in BTC-USDT side String Trade side based on baseCcy origRfqSz String Original RFQ amount rfqSz String Real RFQ amount rfqSzCcy String RFQ currency cnvtPx String Convert price based on quote currency baseSz String Convert amount of base currency quoteSz String Convert amount of quote currency CONVERT TRADE You should make estimate quote before convert trade. RATE LIMIT: 10 REQUESTS PER SECOND RATE LIMIT RULE: USERID For the same side (buy/sell), there's a trading limit of 1 request per 5 seconds. HTTP REQUEST POST /api/v5/asset/convert/trade > Request Example Copy to ClipboardPOST /api/v5/asset/convert/trade body { "baseCcy": "ETH", "quoteCcy": "USDT", "side": "buy", "sz": "30", "szCcy": "USDT", "quoteId": "quoterETH-USDT16461885104612381" } REQUEST PARAMETERS Parameters Types Required Description quoteId String Yes Quote ID baseCcy String Yes Base currency, e.g. BTC in BTC-USDT quoteCcy String Yes Quote currency, e.g. USDT in BTC-USDT side String Yes Trade side based on baseCcy buy sell sz String Yes Quote amount The quote amount should no more then RFQ amount szCcy String Yes Quote currency clTReqId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. tag String No Order tag Applicable to broker user > Response Example Copy to Clipboard{ "code": "0", "data": [ { "baseCcy": "ETH", "clTReqId": "", "fillBaseSz": "0.01023052", "fillPx": "2932.40104429", "fillQuoteSz": "30", "instId": "ETH-USDT", "quoteCcy": "USDT", "quoteId": "quoterETH-USDT16461885104612381", "side": "buy", "state": "fullyFilled", "tradeId": "trader16461885203381437", "ts": "1646188520338" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description tradeId String Trade ID quoteId String Quote ID clTReqId String Client Order ID as assigned by the client state String Trade state fullyFilled: success rejected: failed instId String Currency pair, e.g. BTC-USDT baseCcy String Base currency, e.g. BTC in BTC-USDT quoteCcy String Quote currency, e.g. USDT in BTC-USDT side String Trade side based on baseCcy buy sell fillPx String Filled price based on quote currency fillBaseSz String Filled amount for base currency fillQuoteSz String Filled amount for quote currency ts String Convert trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET CONVERT HISTORY RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/convert/history > Request Example Copy to ClipboardGET /api/v5/asset/convert/history REQUEST PARAMETERS Parameters Types Required Description clTReqId String No Client Order ID as assigned by the client A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 32 characters. after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. tag String No Order tag Applicable to broker user If the convert trading used tag, this parameter is also required. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "clTReqId": "", "instId": "ETH-USDT", "side": "buy", "fillPx": "2932.401044", "baseCcy": "ETH", "quoteCcy": "USDT", "fillBaseSz": "0.01023052", "state": "fullyFilled", "tradeId": "trader16461885203381437", "fillQuoteSz": "30", "ts": "1646188520000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description tradeId String Trade ID clTReqId String Client Order ID as assigned by the client state String Trade state fullyFilled : success rejected : failed instId String Currency pair, e.g. BTC-USDT baseCcy String Base currency, e.g. BTC in BTC-USDT quoteCcy String Quote currency, e.g. USDT in BTC-USDT side String Trade side based on baseCcy buy sell fillPx String Filled price based on quote currency fillBaseSz String Filled amount for base currency fillQuoteSz String Filled amount for quote currency ts String Convert trade time, Unix timestamp format in milliseconds, e.g. 1597026383085 WEBSOCKET DEPOSIT INFO CHANNEL A push notification is triggered when a deposit is initiated or the deposit status changes. Supports subscriptions for accounts * If it is a master account subscription, you can receive the push of the deposit info of both the master account and the sub-account. * If it is a sub-account subscription, only the push of sub-account deposit info you can receive. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "deposit-info" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name deposit-info > ccy String No Currency, e.g. BTC > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "deposit-info" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"deposit-info\""}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name deposit-info > ccy String No Currency, e.g. BTC code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "deposit-info", "uid": "289320****60975104" }, "data": [{ "actualDepBlkConfirm": "0", "amt": "1", "areaCodeFrom": "", "ccy": "USDT", "chain": "USDT-TRC20", "depId": "88165462", "from": "", "fromWdId": "", "pTime": "1674103661147", "state": "0", "subAcct": "test", "to": "TEhFAqpuHa3LY*****8ByNoGnrmexeGMw", "ts": "1674103661123", "txId": "bc5376817*****************dbb0d729f6b", "uid": "289320****60975104" }] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > ccy String Currency, e.g. BTC data Array Subscribed data > uid String User Identifier of the message producer > subAcct String Sub-account name If the message producer is master account, the parameter will return "" > pTime String Push time, the millisecond format of the Unix timestamp, e.g. 1597026383085 > ccy String Currency > chain String Chain name > amt String Deposit amount > from String Deposit account Only the internal OKX account is returned, not the address on the blockchain. > areaCodeFrom String If from is a phone number, this parameter return area code of the phone number > to String Deposit address > txId String Hash record of the deposit > ts String Time of deposit record is created, Unix timestamp format in milliseconds, e.g. 1655251200000 > state String Status of deposit 0: waiting for confirmation 1: deposit credited 2: deposit successful 8: pending due to temporary deposit suspension on this crypto currency 11: match the address blacklist 12: account or deposit is frozen 13: sub-account deposit interception 14: KYC limit > depId String Deposit ID > fromWdId String Internal transfer initiator's withdrawal ID If the deposit comes from internal transfer, this field displays the withdrawal ID of the internal transfer initiator, and will return "" in other cases > actualDepBlkConfirm String The actual amount of blockchain confirmed in a single deposit WITHDRAWAL INFO CHANNEL A push notification is triggered when a withdrawal is initiated or the withdrawal status changes. Supports subscriptions for accounts * If it is a master account subscription, you can receive the push of the withdrawal info of both the master account and the sub-account. * If it is a sub-account subscription, only the push of sub-account withdrawal info you can receive. URL PATH /ws/v5/business (required login) > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "withdrawal-info" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes Operation subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name withdrawal-info > ccy String No Currency, e.g. BTC > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "withdrawal-info" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"withdrawal-info\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes Operation subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name withdrawal-info > ccy String No Currency, e.g. BTC code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "withdrawal-info", "uid": "289320*****0975104" }, "data": [{ "addrEx": null, "amt": "2", "areaCodeFrom": "", "areaCodeTo": "", "ccy": "USDT", "chain": "USDT-TRC20", "clientId": "", "fee": "0.8", "feeCcy": "USDT", "from": "", "memo": "", "nonTradableAsset": false, "pTime": "1674103268578", "pmtId": "", "state": "0", "subAcct": "test", "tag": "", "to": "TN8CKTQMnpWfT******8KipbJ24ErguhF", "ts": "1674103268472", "txId": "", "uid": "289333*****1101696", "wdId": "63754560" }] } PUSH DATA PARAMETERS Parameters Types Description arg Object Successfully subscribed channel > channel String Channel name > uid String User Identifier > ccy String Currency, e.g. BTC data Array Subscribed data > uid String User Identifier of the message producer > subAcct String Sub-account name If the message producer is master account, the parameter will return "" > pTime String Push time, the millisecond format of the Unix timestamp, e.g. 1597026383085 > ccy String Currency > chain String Chain name, e.g. USDT-ERC20, USDT-TRC20 > nonTradableAsset String Whether it is a non-tradable asset or not true: non-tradable asset, false: tradable asset > amt String Withdrawal amount > ts String Time the withdrawal request was submitted, Unix timestamp format in milliseconds, e.g. 1655251200000. > from String Withdrawal account It can be email/phone/sub-account name > areaCodeFrom String Area code for the phone number If from is a phone number, this parameter returns the area code for the phone number > to String Receiving address > areaCodeTo String Area code for the phone number If to is a phone number, this parameter returns the area code for the phone number > tag String Some currencies require a tag for withdrawals > pmtId String Some currencies require a payment ID for withdrawals > memo String Some currencies require this parameter for withdrawals > addrEx Object Withdrawal address attachment, e.g. TONCOIN attached tag name is comment, the return will be {'comment':'123456'} > txId String Hash record of the withdrawal This parameter will return "" for internal transfers. > fee String Withdrawal fee amount > feeCcy String Withdrawal fee currency, e.g. USDT > state String Status of withdrawal Stage 1 : Pending withdrawal10: Waiting transfer 0: Waiting withdrawal 4/5/6/8/9/12: Waiting manual review 7: Approved Stage 2 : Withdrawal in progress (Applicable to on-chain withdrawals, internal transfers do not have this stage)1: Broadcasting your transaction to chain 15: Pending transaction validation 16: Due to local laws and regulations, your withdrawal may take up to 24 hours to arrive -3: Canceling Final stage-2: Canceled -1: Failed 2: Success > wdId String Withdrawal ID > clientId String Client-supplied ID SUB-ACCOUNT The API endpoints of sub-account require authentication. REST API GET SUB-ACCOUNT LIST Applies to master accounts only RATE LIMIT:2 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/users/subaccount/list > Request sample Copy to ClipboardGET /api/v5/users/subaccount/list Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Get sub-account list result = subAccountAPI.get_subaccount_list() print(result) REQUEST PARAMETERS Parameter Type Required Description enable String No Sub-account status true: Normal false: Frozen subAcct String No Sub-account name after String No Query the data earlier than the requested subaccount creation timestamp, the value should be a Unix timestamp in millisecond format. e.g. 1597026383085 before String No Query the data newer than the requested subaccount creation timestamp, the value should be a Unix timestamp in millisecond format. e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Returned results Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "canTransOut": false, "enable": true, "frozenFunc": [ ], "gAuth": false, "label": "D456DDDLx", "mobile": "", "subAcct": "D456DDDL", "ts": "1659334756000", "type": "1", "uid": "3400***********7413" } ] } RESPONSE PARAMETERS Parameter name Type Description type String Sub-account type 1: Standard sub-account 2: Managed trading sub-account 5: Custody sub-account - Copper enable Boolean Sub-account status true: Normal false: Frozen (global) subAcct String Sub-account name uid String Sub-account uid label String Sub-account note mobile String Mobile number that linked with the sub-account. gAuth Boolean If the sub-account switches on the Google Authenticator for login authentication. true: On false: Off frozenFunc Array of string Frozen functions trading convert transfer withdrawal deposit flexible_loan canTransOut Boolean Whether the sub-account has the right to transfer out. true: can transfer out false: cannot transfer out ts String Sub-account creation time, Unix timestamp in millisecond format. e.g. 1597026383085 RESET THE API KEY OF A SUB-ACCOUNT Applies to master accounts only and master accounts API Key must be linked to IP addresses. Only API keys with Trade privilege can call this endpoint. RATE LIMIT:1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/users/subaccount/modify-apikey > Request sample Copy to ClipboardPOST /api/v5/users/subaccount/modify-apikey body { "subAcct":"yongxu", "apiKey":"49e1b84b-6dee-4894-80ee-ce9eb7ad614f", "ip":"1.1.1.1" } Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Reset the API Key of a sub-account result = subAccountAPI.reset_subaccount_apikey( subAcct="hahawang1", apiKey="", ip="" ) print(result) REQUEST PARAMETERS Parameter name Type Required Description subAcct String Yes Sub-account name apiKey String Yes Sub-account APIKey label String No Sub-account API Key label. The label will be reset if this is passed through. perm String No Sub-account API Key permissions read_only: Read trade: Trade Separate with commas if more than one. The permission will be reset if this is passed through. ip String No Sub-account API Key linked IP addresses, separate with commas if more than one. Support up to 20 IP addresses. The IP will be reset if this is passed through. If ip is set to "", then no IP addresses is linked to the APIKey. > Returned results Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "subAcct": "yongxu", "label": "v5", "apiKey": "arg13sdfgs", "perm": "read,trade", "ip": "1.1.1.1", "ts": "1597026383085" }] } RESPONSE PARAMETERS Parameter name Type Description subAcct String Sub-account name apiKey String Sub-accountAPI public key label String Sub-account API Key label perm String Sub-account API Key permissions read_only: Read trade: Trade ip String Sub-account API Key IP addresses that linked with API Key ts String Creation time GET SUB-ACCOUNT TRADING BALANCE Query detailed balance info of Trading Account of a sub-account via the master account (applies to master accounts only) RATE LIMIT:6 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/subaccount/balances > Request sample Copy to ClipboardGET /api/v5/account/subaccount/balances?subAcct=test1 Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Get sub-account trading balance result = subAccountAPI.get_account_balance( subAcct="hahawang1" ) print(result) REQUEST PARAMETERS Parameter Type Required Description subAcct String Yes Sub-account name > Returned result Copy to Clipboard{ "code": "0", "data": [ { "adjEq": "10679688.0460531643092577", "borrowFroz": "", "details": [ { "availBal": "", "availEq": "9930359.9998", "cashBal": "9930359.9998", "ccy": "USDT", "crossLiab": "0", "disEq": "9439737.0772999514", "eq": "9930359.9998", "eqUsd": "9933041.196999946", "smtSyncEq": "0", "fixedBal": "0", "frozenBal": "0", "imr": "", "interest": "0", "isoEq": "0", "isoLiab": "0", "liab": "0", "maxLoan": "10000", "mgnRatio": "", "mmr": "", "notionalLever": "", "ordFrozen": "0", "twap": "0", "uTime": "1620722938250", "upl": "0", "uplLiab": "0", "borrowFroz": "", "spotIsoBal": "0", "spotBal": "", "openAvgPx": "", "accAvgPx": "", "spotUpl": "", "spotUplRatio": "", "totalPnl": "", "totalPnlRatio": "" }, { "availBal": "", "availEq": "33.6799714158199414", "cashBal": "33.2009985", "ccy": "BTC", "crossLiab": "0", "disEq": "1239950.9687532129092577", "eq": "33.771820625136023", "eqUsd": "1239950.9687532129092577", "smtSyncEq": "0", "fixedBal": "0", "frozenBal": "0.0918492093160816", "imr": "", "interest": "0", "isoEq": "0", "isoLiab": "0", "liab": "0", "maxLoan": "1453.92289531493594", "mgnRatio": "", "mmr": "", "notionalLever": "", "ordFrozen": "0", "twap": "0", "uTime": "1620722938250", "upl": "0.570822125136023", "uplLiab": "0", "borrowFroz": "", "spotIsoBal": "0", "spotBal": "", "openAvgPx": "", "accAvgPx": "", "spotUpl": "", "spotUplRatio": "", "totalPnl": "", "totalPnlRatio": "" } ], "imr": "3372.2942371050594217", "isoEq": "0", "mgnRatio": "70375.35408747017", "mmr": "134.8917694842024", "notionalUsd": "33722.9423710505978888", "ordFroz": "0", "totalEq": "11172992.1657531589092577", "uTime": "1623392334718", "upl": "-7.571730042000012" } ], "msg": "" } RESPONSE PARAMETERS Parameters Types Description uTime String The latest time to get account information, millisecond format of Unix timestamp, e.g. 1597026383085 totalEq String The total amount of equity in USD isoEq String Isolated margin equity in USD Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin adjEq String Adjusted / Effective equity in USD The net fiat value of the assets in the account that can provide margins for spot, expiry futures, perpetual futures and options under the cross-margin mode. In multi-ccy or PM mode, the asset and margin requirement will all be converted to USD value to process the order check or liquidation. Due to the volatility of each currency market, our platform calculates the actual USD value of each currency based on discount rates to balance market risks. Applicable to Multi-currency margin/Portfolio margin ordFroz String Margin frozen for pending cross orders in USD Applicable to Multi-currency margin imr String Initial margin requirement in USD The sum of initial margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Multi-currency margin/Portfolio margin mmr String Maintenance margin requirement in USD The sum of maintenance margins of all open positions and pending orders under cross-margin mode in USD. Applicable to Multi-currency margin/Portfolio margin borrowFroz String Potential borrowing IMR of the account in USD Only applicable to Multi-currency margin/Portfolio margin. It is "" for other margin modes. mgnRatio String Margin ratio in USD. Applicable to Multi-currency margin/Portfolio margin notionalUsd String Notional value of positions in USD Applicable to Multi-currency margin/Portfolio margin upl String Cross-margin info of unrealized profit and loss at the account level in USD Applicable to Multi-currency margin/Portfolio margin details Array Detailed asset information in all currencies > ccy String Currency > eq String Equity of currency > cashBal String Cash Balance > uTime String Update time, Unix timestamp format in milliseconds, e.g. 1597026383085 > isoEq String Isolated margin equity of currency Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > fixedBal String Frozen balance for Dip Sniper and Peak Sniper > availEq String Available equity of currency The balance that can be used on margin or futures/swap trading. Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > disEq String Discount equity of currency in USD > availBal String Available balance of currency > frozenBal String Frozen balance of currency > ordFrozen String Margin frozen for open orders Applicable to Spot mode/Spot and futures mode/Multi-currency margin > liab String Liabilities of currency Applicable to Multi-currency margin/Portfolio margin > upl String The sum of the unrealized profit & loss of all margin and derivatives positions of currency. Applicable to Spot and futures mode/Multi-currency margin/Portfolio margin > uplLiab String Liabilities due to Unrealized loss of currency Applicable to Multi-currency margin/Portfolio margin > crossLiab String Cross Liabilities of currency Applicable to Multi-currency margin/Portfolio margin > isoLiab String Isolated Liabilities of currency Applicable to Multi-currency margin/Portfolio margin > mgnRatio String Cross margin ratio of currency The index for measuring the risk of a certain asset in the account. Applicable to Spot and futures mode and when there is cross position > imr String Cross initial margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position > mmr String Cross maintenance margin requirement at the currency level Applicable to Spot and futures mode and when there is cross position > interest String Interest of currency Applicable to Multi-currency margin/Portfolio margin > twap String System's forced repayment(TWAP) indicator Divided into multiple levels from 0 to 5, the larger the number, the more likely the auto repayment will be triggered. Applicable to Multi-currency margin/Portfolio margin > maxLoan String Max loan of currency Applicable to cross of Multi-currency margin/Portfolio margin > eqUsd String Equity USD of currency > borrowFroz String Potential borrowing IMR of currency in USD Only applicable to Multi-currency margin/Portfolio margin. It is "" for other margin modes. > notionalLever String Leverage of currency Applicable to Spot and futures mode > spotIsoBal String SPOT isolated balance. only applicable to copy trading > smtSyncEq String Smark sync equity The default is "0", only applicable to copy trader > spotBal String Spot balance. The unit is currency, e.g. BTC. Clicking knows more > openAvgPx Array Spot average cost price. The unit is USD. Clicking knows more > accAvgPx Array Spot accumulated cost price. The unit is USD. Clicking knows more > spotUpl String Spot unrealized profit and loss. The unit is USD. Clicking knows more > spotUplRatio String Spot unrealized profit and loss ratio. Clicking knows more > totalPnl String Spot accumulated profit and loss. The unit is USD. Clicking knows more > totalPnlRatio String Spot accumulated profit and loss ratio. Clicking knows more "" will be returned for inapplicable fields with the current account level. GET SUB-ACCOUNT FUNDING BALANCE Query detailed balance info of Funding Account of a sub-account via the master account (applies to master accounts only) RATE LIMIT:6 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/subaccount/balances > Request sample Copy to ClipboardGET /api/v5/asset/subaccount/balances?subAcct=test1 Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Get sub-account funding balance result = subAccountAPI.get_funding_balance( subAcct="hahawang1" ) print(result) REQUEST PARAMETERS Parameter Type Required Description subAcct String Yes Sub-account name ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Returned result Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "availBal": "37.11827078", "bal": "37.11827078", "ccy": "ETH", "frozenBal": "0" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency bal String Balance frozenBal String Frozen balance availBal String Available balance GET SUB-ACCOUNT MAXIMUM WITHDRAWALS Retrieve the maximum withdrawal information of a sub-account via the master account (applies to master accounts only). If no currency is specified, the transferable amount of all owned currencies will be returned. RATE LIMIT: 20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/subaccount/max-withdrawal > Request Example Copy to ClipboardGET /api/v5/account/subaccount/max-withdrawal?subAcct=test1 REQUEST PARAMETERS Parameter Type Required Description subAcct String Yes Sub-account name ccy String No Single currency or multiple currencies (no more than 20) separated with comma, e.g. BTC or BTC,ETH. > Response Example Copy to Clipboard{ "code":"0", "data":[ { "ccy":"BTC", "maxWd":"3", "maxWdEx":"", "spotOffsetMaxWd":"3", "spotOffsetMaxWdEx":"" }, { "ccy":"ETH", "maxWd":"15", "maxWdEx":"", "spotOffsetMaxWd":"15", "spotOffsetMaxWdEx":"" }, { "ccy":"USDT", "maxWd":"10600", "maxWdEx":"", "spotOffsetMaxWd":"10600", "spotOffsetMaxWdEx":"" } ], "msg":"" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency maxWd String Max withdrawal (excluding borrowed assets under Multi-currency margin) maxWdEx String Max withdrawal (including borrowed assets under Multi-currency margin) spotOffsetMaxWd String Max withdrawal under Spot-Derivatives risk offset mode (excluding borrowed assets under Portfolio margin) Applicable to Portfolio margin spotOffsetMaxWdEx String Max withdrawal under Spot-Derivatives risk offset mode (including borrowed assets under Portfolio margin) Applicable to Portfolio margin GET HISTORY OF SUB-ACCOUNT TRANSFER Applies to master accounts only. RATE LIMIT:6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/subaccount/bills > Request sample Copy to ClipboardGET /api/v5/asset/subaccount/bills Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Get history of sub-account transfer result = subAccountAPI.bills() print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency, such as BTC type String No Transfer type 0: Transfers from master account to sub-account 1 : Transfers from sub-account to master account. subAcct String No Sub-account name after String No Query the data prior to the requested bill ID creation time (exclude), the value should be a Unix timestamp in millisecond format. e.g. 1597026383085 before String No Query the data after the requested bill ID creation time (exclude), the value should be a Unix timestamp in millisecond format. e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Returned results Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "amt": "1.1", "billId": "89887685", "ccy": "USDT", "subAcct": "hahatest1", "ts": "1712560959000", "type": "0" } ] } RESPONSE PARAMETERS Parameter name Type Description billId String Bill ID ccy String Transfer currency amt String Transfer amount type String Bill type subAcct String Sub-account name ts String Bill ID creation time, Unix timestamp in millisecond format, e.g. 1597026383085 GET HISTORY OF MANAGED SUB-ACCOUNT TRANSFER Only applicable to the trading team's master account to getting transfer records of managed sub accounts entrusted to oneself. RATE LIMIT:6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/asset/subaccount/managed-subaccount-bills > Request sample Copy to ClipboardGET /api/v5/asset/subaccount/managed-subaccount-bills REQUEST PARAMETERS Parameter Type Required Description ccy String No Currency, e.g BTC type String No Transfer type 0: Transfers from master account to sub-account 1: Transfers from sub-account to master account subAcct String No Sub-account name subUid String No Sub-account UID after String No Query the data prior to the requested bill ID creation time (exclude), Unix timestamp in millisecond format, e.g. 1597026383085 before String No Query the data after the requested bill ID creation time (exclude), Unix timestamp in millisecond format, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Returned results Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "billId": "12344", "type": "1", "ccy": "BTC", "amt": "2", "subAcct": "test-1", "subUid": "xxxxxx", "ts": "1597026383085" }] } RESPONSE PARAMETERS Parameter name Type Description billId String Bill ID ccy String Transfer currency amt String Transfer amount type String Bill type subAcct String Sub-account name subUid String Sub-account UID ts String Bill ID creation time, Unix timestamp in millisecond format, e.g. 1597026383085 MASTER ACCOUNTS MANAGE THE TRANSFERS BETWEEN SUB-ACCOUNTS Applies to master accounts only. Only API keys with Trade privilege can call this endpoint. RATE LIMIT:1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/asset/subaccount/transfer > Request sample Copy to ClipboardPOST /api/v5/asset/subaccount/transfer body { "ccy":"USDT", "amt":"1.5", "from":"6", "to":"6", "fromSubAccount":"test-1", "toSubAccount":"test-2" } Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Master accounts manage the transfers between sub-accounts result = subAccountAPI.subAccount_transfer( ccy="USDT", amt="10", froms="6", to="6", fromSubAccount="test-1", toSubAccount="test-2" ) print(result) REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency amt String Yes Transfer amount from String Yes Account type of transfer from sub-account 6: Funding Account 18: Trading account to String Yes Account type of transfer to sub-account 6: Funding Account 18: Trading account fromSubAccount String Yes Sub-account name of the account that transfers funds out. toSubAccount String Yes Sub-account name of the account that transfers funds in. loanTrans Boolean No Whether or not borrowed coins can be transferred out under Multi-currency margin/Portfolio margin The default is false omitPosRisk String No Ignore position risk Default is false Applicable to Portfolio margin > Returned results Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "transId":"12345", } ] } RESPONSE PARAMETERS Parameter name Type Description transId String Transfer ID SET PERMISSION OF TRANSFER OUT Set permission of transfer out for sub-account (only applicable to master account API key). Sub-account can transfer out to master account by default. RATE LIMIT: 1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/users/subaccount/set-transfer-out > Request Example Copy to ClipboardPOST /api/v5/users/subaccount/set-transfer-out body { "subAcct": "Test001,Test002", "canTransOut": true } Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Set permission of transfer out for sub-account result = subAccountAPI.set_permission_transfer_out( subAcct="hahawang1", canTransOut=False ) print(result) REQUEST PARAMETERS Parameter Type Required Description subAcct String Yes Name of the sub-account. Single sub-account or multiple sub-account (no more than 20) separated with comma. canTransOut Boolean No Whether the sub-account has the right to transfer out. The default is true. false: cannot transfer out true: can transfer out > Returned result Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "subAcct": "Test001", "canTransOut": true }, { "subAcct": "Test002", "canTransOut": true } ] } RESPONSE PARAMETERS Parameter Type Description subAcct String Name of the sub-account canTransOut Boolean Whether the sub-account has the right to transfer out. false: cannot transfer out true: can transfer out GET CUSTODY TRADING SUB-ACCOUNT LIST The trading team uses this interface to view the list of sub-accounts currently under escrow RATE LIMIT:1 REQUEST PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/users/entrust-subaccount-list > Request sample Copy to ClipboardGET /api/v5/users/entrust-subaccount-list Copy to Clipboardimport okx.SubAccount as SubAccount # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "1" # Production trading: 0, Demo trading: 1 subAccountAPI = SubAccount.SubAccountAPI(apikey, secretkey, passphrase, False, flag) # Get custody trading sub-account list result = subAccountAPI.get_entrust_subaccount_list() print(result) REQUEST PARAMETERS Parameter Type Required Description subAcct String No Sub-account name > Returned results Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "subAcct":"test-1" }, { "subAcct":"test-2" } ] } RESPONSE PARAMETERS Parameter name Type Description subAcct String Sub-account name SET SUB-ACCOUNTS VIP LOAN ALLOCATION Set the VIP loan allocation of sub-accounts. Only Applicable to master account API keys with Trade access. RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/account/subaccount/set-loan-allocation > Request Example Copy to ClipboardPOST /api/v5/account/subaccount/set-loan-allocation body // to enable it and update sub account allocation { "enable": true, "alloc":[ { "subAcct":"subacc1", "loanAlloc":"20.01" }, { "subAcct":"subacc2", "loanAlloc":"20.02" }, ..... ] } REQUEST PARAMETERS Parameters Types Required Description enable Boolean Yes true or false alloc Array of objects No If enable = false, this will not be validated > subAcct String Yes Name of the sub-account > loanAlloc String Yes VIP Loan allocation. The unit is percent(%). Range is [0, 100]. Precision is 0.01% (2 decimal places) "0" to remove loan allocation for the sub-account > Response Example Copy to Clipboard{ "code": "0", "data": [ { "result": true } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description result Boolean Result of the request Valid value is true or false. GET SUB-ACCOUNT BORROW INTEREST AND LIMIT Only applicable to master account API keys. Only return VIP loan information RATE LIMIT: 5 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/account/subaccount/interest-limits > Request Example Copy to ClipboardGET /api/v5/account/subaccount/interest-limits?subAcct=subaccount1&ccy=BTC REQUEST PARAMETERS Parameter Type Required Description subAcct String Yes Name of the sub-account. Can only put 1 sub account. ccy String No Loan currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "data": [ { "subAcct": "subaccount1", "debt": "97.06402000000000000000000000000000", "interest": "", "nextDiscountTime": "1637312400000", "nextInterestTime": "1637312400000", "loanAlloc": "", "records": [ { "availLoan": "0.0000000000000000", "ccy": "BTC", "interest": "", "loanQuota": "600.0000000000000000", "posLoan": "0", "rate": "0.00199200", "surplusLmt": "600.0000000000000000", "surplusLmtDetails":{ "allAcctRemainingQuota": "600.00", "curAcctRemainingQuota": "600.00", "platRemainingQuota": "600.00" }, "usedLmt": "0", "usedLoan": "0.0000000000000000" } ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description subAcct String Name of sub account debt String Current debt in USDT interest String Always return "" nextDiscountTime String Next deduct time, Unix timestamp format in milliseconds, e.g. 1597026383085 nextInterestTime String Next accrual time, Unix timestamp format in milliseconds, e.g. 1597026383085 loanAlloc String VIP Loan allocation for the current trading account 1. The unit is percent(%). Range is [0, 100]. Precision is 0.01% 2. If master account did not assign anything, then "0" 3. "" if shared between master and sub-account records Array Details for currencies > ccy String Loan currency, e.g. BTC > rate String Current daily rate > loanQuota String Borrow limit of master account If loan allocation has been assigned, then this returns the borrow limit of the current trading account (sub-account) > surplusLmt String Available amount of master account and sub-accounts If loan allocation has been assigned, then it is the available amount to borrow by the current trading account (sub-account) > surplusLmtDetails Object The details of available amount of master account and sub-accounts The value of surplusLmt is the minimum value within this array. It can help you judge the reason that surplusLmt is not enough. Only applicable to VIP loans >> allAcctRemainingQuota String Total remaining quota for master account and sub-accounts >> curAcctRemainingQuota String The remaining quota for the current sub-account Only applicable to the case in which the sub-account is assigned the loan allocation >> platRemainingQuota String Remaining quota for the platform The format like "600" will be returned when it is more than curAcctRemainingQuota or allAcctRemainingQuota > usedLmt String Borrowed amount of master account and sub-accounts If loan allocation has been assigned, then it is the borrowed amount by the current trading account (sub-account) > interest String Always return "" > posLoan String Frozen amount for current account (sub-account, within the locked quota) Only applicable to VIP loans > availLoan String Available amount for current account (sub-account, within the locked quota) Only applicable to VIP loans > usedLoan String Borrowed amount for current account (sub-account) Only applicable to VIP loans > avgRate String Average (hourly) interest of already borrowed coin only applicable to VIP loans FINANCIAL PRODUCT ON-CHAIN EARN Only the assets in the funding account can be used for purchase. More details GET / OFFERS RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/staking-defi/offers > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/offers REQUEST PARAMETERS Parameter Type Required Description productId String No Product ID protocolType String No Protocol type defi: on-chain earn ccy String No Investment currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "DOT", "productId": "101", "protocol": "Polkadot", "protocolType": "defi", "term": "0", "apy": "0.1767", "earlyRedeem": false, "state": "purchasable", "investData": [ { "bal": "0", "ccy": "DOT", "maxAmt": "0", "minAmt": "2" } ], "earningData": [ { "ccy": "DOT", "earningType": "0" } ], "redeemPeriod": [ "28D", "28D" ] } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency type, e.g. BTC productId String Product ID protocol String Protocol protocolType String Protocol type defi: on-chain earn term String Protocol term It will return the days of fixed term and will return 0 for flexible product apy String Estimated annualization If the annualization is 7% , this field is 0.07 earlyRedeem Boolean Whether the protocol supports early redemption investData Array Current target currency information available for investment > ccy String Investment currency, e.g. BTC > bal String Available balance to invest > minAmt String Minimum subscription amount > maxAmt String Maximum available subscription amount earningData Array of object Earning data > ccy String Earning currency, e.g. BTC > earningType String Earning type 0: Estimated earning 1: Cumulative earning state String Product state purchasable: Purchasable sold_out: Sold out Stop: Suspension of subscription redeemPeriod Array of string Redemption Period, format in [min time,max time] H: Hour, D: Day e.g. ["1H","24H"] represents redemption period is between 1 Hour and 24 Hours. ["14D","14D"] represents redemption period is 14 days. POST / PURCHASE RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/staking-defi/purchase > Request Example Copy to Clipboard# Invest 100ZIL 30-day staking protocol POST /api/v5/finance/staking-defi/purchase body { "productId":"1234", "investData":[ { "ccy":"ZIL", "amt":"100" } ], "term":"30" } REQUEST PARAMETERS Parameter Type Required Description productId String Yes Product ID investData Array Yes Investment data > ccy String Yes Investment currency, e.g. BTC > amt String Yes Investment amount term String Conditional Investment term Investment term must be specified for fixed-term product tag String No Order tag A combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ordId": "754147", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID tag String Order tag POST / REDEEM RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/staking-defi/redeem > Request Example Copy to Clipboard# Early redemption of investment POST /api/v5/finance/staking-defi/redeem body { "ordId":"754147", "protocolType":"defi", "allowEarlyRedeem":true } REQUEST PARAMETERS Parameter Type Required Description ordId String Yes Order ID protocolType String Yes Protocol type defi: on-chain earn allowEarlyRedeem Boolean No Whether allows early redemption Default is false > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ordId": "754147", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID tag String Order tag POST / CANCEL PURCHASES/REDEMPTIONS After cancelling, returning funds will go to the funding account. RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/staking-defi/cancel > Request Example Copy to ClipboardPOST /api/v5/finance/staking-defi/cancel body { "ordId":"754147", "protocolType":"defi" } REQUEST PARAMETERS Parameter Type Required Description ordId String Yes Order ID protocolType String Yes Protocol type defi: on-chain earn > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ordId": "754147", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description ordId String Order ID tag String Order tag GET / ACTIVE ORDERS RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/staking-defi/orders-active > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/orders-active REQUEST PARAMETERS Parameter Type Required Description productId String No Product ID protocolType String No Protocol type defi: on-chain earn ccy String No Investment currency, e.g. BTC state String No Order state 8: Pending 13: Cancelling 9: Onchain 1: Earning 2: Redeeming > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ordId":"123456", "state":"1", "ccy": "GLMR", "protocol": "glimmar", //Staking "protocolType":"staking", "term":"15", "apy":"0.5496", "investData":[ { "ccy":"GLMR", "amt":"100" } ], "earningData": [ { "ccy": "GLMR", "earningType":"1", // Daily distribution "earnings":"3", } ], "purchasedTime":"1597026383085", "estSettlementTime": "", "cancelRedemptionDeadline": "", "tag": "" }, { "ordId":"123457", "state":"1", "ccy": "USDT", "protocol": "compond", //DEFI-loan "protocolType":"defi", "term":"0", "apy":"0.12", "investData":[ { "ccy":"USDT", "amt":"20", "minAmt":"1", "maxAmt":"" } ], "earningData": [ { "ccy": "USDT", "earningType":"0", //Redeem distribution "earnings":"3", //Estimated earning }, { "ccy": "COMP", "earningType":"1", //Daily distribution "earnings":"3", //Cumulative earning } ], "purchasedTime":"1597026383085", "estSettlementTime": "", "cancelRedemptionDeadline": "", "tag": "" }, { "ordId":"123458", "state":"1", "ccy": "ETH", "protocol": "sushiswap", //DEFI "protocolType":"defi", "term":"0", "apy":"0.12", "investData":[ { "ccy":"USDT", "amt":"100" }, { "ccy":"ETH", "amt":"0.03" } ], "earningData": [ { "ccy": "SUSHI", "earningType":"1", // Daily distribution "earnings":"3" // Cumulative earning } ], "purchasedTime":"1597026383085", "estSettlementTime": "", "cancelRedemptionDeadline": "", "tag": "" }, { "ordId":"123458", "state":"3", "ccy": "LON", "protocol": "tokenlon", //DEFI-pos "protocolType":"defi", "earningCcy": ["LON"], "term":"7", "apy":"0.12", "investData":[ { "ccy":"LON", "amt":"1" } ], "earningData": [ { "ccy": "LON", "earningType":"0", //Redeem distribution "earnings":"3" //Cumulative earning } ], "purchasedTime":"1597026383085", "estSettlementTime": "", "cancelRedemptionDeadline": "", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC ordId String Order ID productId String Product ID state String Order state 8: Pending 13: Cancelling 9: Onchain 1: Earning 2: Redeeming protocol String Protocol protocolType String Protocol type defi: on-chain earn term String Protocol term It will return the days of fixed term and will return 0 for flexible product apy String Estimated APY If the estimated APY is 7% , this field is 0.07 Retain to 4 decimal places (truncated) investData Array Investment data > ccy String Investment currency, e.g. BTC > amt String Invested amount earningData Array Earning data > ccy String Earning currency, e.g. BTC > earningType String Earning type 0: Estimated earning 1: Cumulative earning > earnings String Earning amount purchasedTime String Order purchased time, Unix timestamp format in milliseconds, e.g. 1597026383085 estSettlementTime String Estimated redemption settlement time cancelRedemptionDeadline String Deadline for cancellation of redemption application tag String Order tag GET / ORDER HISTORY RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/staking-defi/orders-history > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/orders-history REQUEST PARAMETERS Parameter Type Required Description productId String No Product ID protocolType String No Protocol type defi: on-chain earn ccy String No Investment currency, e.g. BTC after String No Pagination of data to return records earlier than the requested ID. The value passed is the corresponding ordId before String No Pagination of data to return records newer than the requested ID. The value passed is the corresponding ordId limit String No Number of results per request. The default is 100. The maximum is 100. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ { "ordId": "1579252", "ccy": "DOT", "productId": "101", "state": "3", "protocol": "Polkadot", "protocolType": "defi", "term": "0", "apy": "0.1704", "investData": [ { "ccy": "DOT", "amt": "2" } ], "earningData": [ { "ccy": "DOT", "earningType": "0", "realizedEarnings": "0" } ], "purchasedTime": "1712908001000", "redeemedTime": "1712914294000", "tag": "" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC ordId String Order ID productId String Product ID state String Order state 3: Completed (including canceled and redeemed) protocol String Protocol protocolType String Protocol type defi: on-chain earn term String Protocol term It will return the days of fixed term and will return 0 for flexible product apy String Estimated APY If the estimated APY is 7% , this field is 0.07 Retain to 4 decimal places (truncated) investData Array Investment data > ccy String Investment currency, e.g. BTC > amt String Invested amount earningData Array Earning data > ccy String Earning currency, e.g. BTC > earningType String Earning type 0: Estimated earning 1: Cumulative earning > realizedEarnings String Cumulative earning of redeemed orders This field is only valid when the order is in redemption state purchasedTime String Order purchased time, Unix timestamp format in milliseconds, e.g. 1597026383085 redeemedTime String Order redeemed time, Unix timestamp format in milliseconds, e.g. 1597026383085 tag String Order tag ETH STAKING ETH Staking, also known as Ethereum Staking, is the process of participating in the Ethereum blockchain's Proof-of-Stake (PoS) consensus mechanism. Stake to receive BETH for liquidity at 1:1 ratio and earn daily BETH rewards Learn more about ETH Staking POST / PURCHASE Staking ETH for BETH Only the assets in the funding account can be used. RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/staking-defi/eth/purchase > Request Example Copy to ClipboardPOST /api/v5/finance/staking-defi/eth/purchase body { "amt":"100" } REQUEST PARAMETERS Parameter Type Required Description amt String Yes Investment amount > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ ] } RESPONSE PARAMETERS code = 0 means your request has been successfully handled. POST / REDEEM Only the assets in the funding account can be used. If your BETH is in your trading account, you can make funding transfer first. RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/staking-defi/eth/redeem > Request Example Copy to ClipboardPOST /api/v5/finance/staking-defi/eth/redeem body { "amt": "10" } REQUEST PARAMETERS Parameter Type Required Description amt String Yes Redeeming amount > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [ ] } RESPONSE PARAMETERS code = 0 means your request has been successfully handled. GET / BALANCE The balance is a snapshot summarized all BETH assets (including assets in redeeming) in account. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/staking-defi/eth/balance > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/eth/balance REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "0.63926191", "ccy": "BETH", "latestInterestAccrual": "0.00006549", "totalInterestAccrual": "0.01490596", "ts": "1699257600000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BETH amt String Currency amount latestInterestAccrual String Latest interest accrual totalInterestAccrual String Total interest accrual ts String Query data time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / PURCHASE&REDEEM HISTORY RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/staking-defi/eth/purchase-redeem-history > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/eth/purchase-redeem-history?type=purchase REQUEST PARAMETERS Parameter Type Required Description type String Yes Type purchase redeem status String No Status pending success failed after String No Pagination of data to return records earlier than the requestTime. The value passed is the corresponding timestamp before String No Pagination of data to return records newer than the requestTime. The value passed is the corresponding timestamp limit String No Number of results per request. The default is 100. The maximum is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "0.62666630", "completedTime": "1683413171000", "estCompletedTime": "", "requestTime": "1683413171000", "status": "success", "type": "purchase" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description type String Type purchase redeem amt String Purchase/Redeem amount status String Status pending success failed requestTime String Request time of make purchase/redeem, Unix timestamp format in milliseconds, e.g. 1597026383085 completedTime String Completed time of redeem settlement, Unix timestamp format in milliseconds, e.g. 1597026383085 estCompletedTime String Estimated completed time of redeem settlement, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / APY HISTORY (PUBLIC) Public endpoints don't need authorization. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/staking-defi/eth/apy-history > Request Example Copy to ClipboardGET /api/v5/finance/staking-defi/eth/apy-history?days=2 REQUEST PARAMETERS Parameter Type Required Description days String Yes Get the days of APY(Annual percentage yield) history record in the past No more than 365 days > Response Example Copy to Clipboard{ "code": "0", "data": [ { "rate": "3.74000000", "ts": "1699228800000" }, { "rate": "3.61000000", "ts": "1699142400000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description rate String APY(Annual percentage yield), e.g. 0.01 represents 1% ts String Data time, Unix timestamp format in milliseconds, e.g. 1597026383085 SIMPLE EARN FLEXIBLE Simple earn flexible (saving) is earned by lending to leveraged trading users in the lending market. learn more GET / SAVING BALANCE RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/savings/balance > Request Example Copy to ClipboardGET /api/v5/finance/savings/balance?ccy=USDT Copy to Clipboardimport okx.Funding as Funding # API initialization apikey = "YOUR_API_KEY" secretkey = "YOUR_SECRET_KEY" passphrase = "YOUR_PASSPHRASE" flag = "0" # Production trading: 0, Demo trading: 1 fundingAPI = Funding.FundingAPI(apikey, secretkey, passphrase, False, flag) # Get saving balance result = fundingAPI.get_saving_balance( ccy="USDC" ) print(result) REQUEST PARAMETERS Parameters Types Required Description ccy String No Currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "msg":"", "data": [ { "earnings": "0.0010737388791526", "redemptAmt": "", "rate": "0.0100000000000000", "ccy": "USDT", "amt": "11.0010737453457821", "loanAmt": "11.0010630707982819", "pendingAmt": "0.0000106745475002" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency amt String Currency amount earnings String Currency earnings rate String Lending rate loanAmt String Lending amount pendingAmt String Pending amount redemptAmt String Redempting amount (Deprecated) POST / SAVINGS PURCHASE/REDEMPTION Only the assets in the funding account can be used for saving. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/savings/purchase-redempt > Request Example Copy to ClipboardPOST /api/v5/finance/savings/purchase-redempt body { "ccy":"BTC", "amt":"1", "side":"purchase", "rate":"0.01" } REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency, e.g. BTC amt String Yes Purchase/redemption amount side String Yes Action type. purchase: purchase saving shares redempt: redeem saving shares rate String Yes Annual purchase rate Only applicable to purchase saving shares The interest rate of the new subscription will cover the interest rate of the last subscription The rate value range is between 1% and 365% > Response Example Copy to Clipboard{ "code":"0", "msg":"", "data":[ { "ccy":"BTC", "amt":"1", "side":"purchase", "rate": "0.01" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency amt String Purchase/Redemption amount side String Action type rate String Annual purchase rate POST / SET LENDING RATE RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/savings/set-lending-rate > Request Example Copy to ClipboardPOST /api/v5/finance/savings/set-lending-rate body { "ccy":"BTC", "rate":"0.02" } REQUEST PARAMETERS Parameter Type Required Description ccy String Yes Currency, e.g. BTC rate String Yes Annual lending rate The rate value range is between 1% and 365% > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "rate": "0.02" }] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC rate String Annual lending rate GET / LENDING HISTORY Return data in the past month. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/savings/lending-history > Request Example Copy to ClipboardGET /api/v5/finance/savings/lending-history REQUEST PARAMETERS Parameters Types Required Description ccy String No Currency, e.g. BTC after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "amt": "0.01", "earnings": "0.001", "rate": "0.01", "ts": "1597026383085" }, { "ccy": "ETH", "amt": "0.2", "earnings": "0.001", "rate": "0.01", "ts": "1597026383085" } ] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC amt String Lending amount earnings String Currency earnings rate String Lending annual interest rate ts String Lending time, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / PUBLIC BORROW INFO (PUBLIC) Authentication is not required for this public endpoint. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/savings/lending-rate-summary > Request Example Copy to ClipboardGET /api/v5/finance/savings/lending-rate-summary REQUEST PARAMETERS Parameters Types Required Description ccy String No Currency, e.g. BTC > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "avgAmt": "10000", "avgAmtUsd": "10000000000", "avgRate": "0.03", "preRate": "0.02", "estRate": "0.01" }] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC avgAmt String 24H average borrowing amount avgAmtUsd String 24H average borrowing amount in USD value avgRate String 24H average lending rate preRate String Last annual interest rate estRate String Next estimate annual interest rate GET / PUBLIC BORROW HISTORY (PUBLIC) Authentication is not required for this public endpoint. Only returned records after December 14, 2021. RATE LIMIT: 6 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/savings/lending-rate-history > Request Example Copy to ClipboardGET /api/v5/finance/savings/lending-rate-history REQUEST PARAMETERS Parameters Types Required Description ccy String No Currency, e.g. BTC after String No Pagination of data to return records earlier than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 before String No Pagination of data to return records newer than the requested ts, Unix timestamp format in milliseconds, e.g. 1597026383085 limit String No Number of results per request. The maximum is 100. The default is 100. If ccy is not specified, all data under the same ts will be returned, not limited by limit > Response Example Copy to Clipboard{ "code": "0", "msg": "", "data": [{ "ccy": "BTC", "amt": "0.01", "rate": "0.001", "ts": "1597026383085" }] } RESPONSE PARAMETERS Parameter Type Description ccy String Currency, e.g. BTC amt String Lending amount rate String Lending annual interest rate ts String Time, Unix timestamp format in milliseconds, e.g. 1597026383085 SIMPLE EARN FIXED GET / LENDING OFFERS (PUBLIC) Get lending-supported currencies and estimated APY. RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/fixed-loan/lending-offers > Request Example Copy to ClipboardGET /api/v5/finance/fixed-loan/lending-offers Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ccy String No Lending currency, e.g. BTC term String No Fixed term for lending order 30D: 30 days > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "BTC", "lendQuota": "0.5", "minLend": "0.02", "rate": "0.0058", "term": "30D" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Lending currency, e.g. BTC term String Fixed term for lending order 30D: 30 days rate String Latest lending APY, in decimal. e.g. 0.01 represent 1% minLend String Minimum lending amount lendQuota String Lending quota GET / LENDING APY HISTORY (PUBLIC) RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/fixed-loan/lending-apy-history > Request Example Copy to ClipboardGET /api/v5/finance/fixed-loan/lending-apy-history?ccy=USDT&term=30D Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ccy String Yes Lending currency, e.g. BTC term String Yes Fixed term for lending order 30D: 30 days > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "rate": "0.0100", "ts": "1712559600000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Lending currency, e.g. BTC rate String Lending APY, in decimal. e.g. 0.01 represent 1% ts String Timestamp for lending, Unix timestamp format in milliseconds, e.g. 1597026383085 GET / LENDING VOLUME (PUBLIC) RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: IP HTTP REQUEST GET /api/v5/finance/fixed-loan/pending-lending-volume > Request Example Copy to ClipboardGET /api/v5/finance/fixed-loan/pending-lending-volume?ccy=BTC&term=30D Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ccy String Yes Lending currency, e.g. BTC term String Yes Fixed term for lending order 30D: 30 days > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ccy": "USDT", "pendingVol": "1000", "rateRangeFrom": "0.001", "rateRangeTo": "0.031", "term": "30D" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ccy String Lending currency, e.g. BTC term String Fixed term for lending order 30D: 30 days rateRangeFrom String Lending APR of the lower range, e.g. 0.0100 represent 1% rateRangeTo String Lending APR of the higher range, e.g. 0.0100 represent 1% pendingVol String Lending volume pending to match POST / PLACE LENDING ORDER RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/fixed-loan/lending-order > Request Example Copy to ClipboardPOST /api/v5/finance/fixed-loan/lending-order body { "ccy": "USDT", "amt": "1", "rate": "0.01", "term": "30D", "autoRenewal": true } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ccy String Yes Lending currency, e.g. BTC amt String Yes Lending amount rate String Yes Lending APR, in decimal. e.g. 0.01 represents 1%. term String Yes Fixed term for Lending order autoRenewal Boolean No Whether or not auto-renewal when the term is due true: auto-renewal false: not auto-renewal Default is false. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Lending order ID POST / AMEND LENDING ORDER RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST POST /api/v5/finance/fixed-loan/amend-lending-order > Request Example Copy to ClipboardPOST /api/v5/finance/fixed-loan/amend-lending-order body { "ordId":"2405162053378222", "changeAmt":"-100" } Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Order ID changeAmt String No Redemption Amount, e.g. -0.1 represents redemption amount is 0.1. rate String No Lending APR, in decimal. e.g. 0.01 represents 1%. autoRenewal Boolean No Whether or not auto-renewal when the term is due true: auto-renewal false: not auto-renewal > Response Example Copy to Clipboard{ "code": "0", "data": [ { "ordId":"2405162053378222" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Lending order ID GET / LENDING ORDER LIST RATE LIMIT: 3 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/fixed-loan/lending-orders-list > Request Example Copy to ClipboardGET /api/v5/finance/fixed-loan/lending-orders-list Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String No Lending order ID ccy String No Lending currency, e.g. BTC state String No State pending earning expired settled after String No Pagination of data to return records earlier than the requested ordId before String No Pagination of data to return records newer than the requested ordId limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "amt": "10", "autoRenewal": true, "cTime": "1718955882000", "ccy": "USDT", "earningAmt": "0", "ordId": "2406211544415051", "pendingAmt": "10", "rate": "0.01", "settledTime": "", "startTime": "", "state": "pending", "term": "30D", "totalInterest": "0", "uTime": "1718955881000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Lending order ID state String State ccy String Lending currency, e.g. BTC amt String Lending amount rate String lending APR, in decimal. e.g. 0.01 represent 1% term String Fixed term for lending order, e.g. 30D autoRenewal Boolean Whether or not auto-renewal when the term is due true: auto-renewal false: not auto-renewal totalInterest String Total interest pendingAmt String Pending amount earningAmt String Earning amount startTime String Start earning time, Unix timestamp format in milliseconds, e.g. 1597026383085 settledTime String Settled time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time for lending order, unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Update time for lending order, unix timestamp format in milliseconds, e.g. 1597026383085 GET / LENDING SUB ORDER LIST RATE LIMIT: 2 REQUESTS PER SECOND RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/finance/fixed-loan/lending-sub-orders > Request Example Copy to ClipboardGET /api/v5/finance/fixed-loan/lending-sub-orders?ordId=2405231639344615 Copy to Clipboard REQUEST PARAMETERS Parameters Types Required Description ordId String Yes Lending order ID state String No State earning expired settled after String No Pagination of data to return records earlier than the requested subOrdId before String No Pagination of data to return records newer than the requested subOrdId limit String No Number of results per request. The maximum is 100. The default is 100. > Response Example Copy to Clipboard{ "code": "0", "data": [ { "accruedInterest": "", "amt": "100", "cTime": "1716453989000", "ccy": "USDT", "earlyTerminatedPenalty": "0.0209", "expiryTime": "1719045989000", "finalSettlementTime": "1721637989000", "ordId": "2405231639344615", "overdueInterest": "0", "rate": "0.01", "settledTime": "1716454032000", "state": "settled", "subOrdId": "2405231646292913", "term": "30D", "totalInterest": "0", "uTime": "1716454032000" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description ordId String Lending order ID subOrdId String Sub-order ID state String Sub-order state ccy String Sub-order currency, e.g. BTC amt String Sub-order lending amount rate String Sub-order lending APR, in decimal, e.g. 0.01 represent 1% term String Fixed term for sub-order, e.g. 30D expiryTime String Sub-order expiration time, Unix timestamp format in milliseconds, e.g. 1597026383085 totalInterest String Sub-order total interest accruedInterest String Sub-order accrued interest earlyTerminatedPenalty String Sub-order early terminated penalty overdueInterest String Sub-order overdue interest finalSettlementTime String Sub-order final settlement time, Unix timestamp format in milliseconds, e.g. 1597026383085 settledTime String Sub-order actual settlement time, Unix timestamp format in milliseconds, e.g. 1597026383085 cTime String Creation time for sub-order, unix timestamp format in milliseconds, e.g. 1597026383085 uTime String Update time for sub-order, unix timestamp format in milliseconds, e.g. 1597026383085 AFFILIATE The Affiliate API offers affiliate users a flexible function to query the invitee information. Simply enter the UID of your direct invitee to access their relevant information, empowering your affiliate business growth and day-to-day business operation. If you have additional data requirements regarding the Affiliate API, please don't hesitate to contact your BD. We will reach out to you through your BD to provide more comprehensive API support. REST API GET THE INVITEE'S DETAIL RATE LIMIT:20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/affiliate/invitee/detail > Request sample Copy to ClipboardGET /api/v5/affiliate/invitee/detail?uid=11111111 REQUEST PARAMETERS Parameter Type Required Description uid String Yes UID of the invitee. Only applicable to the UID of invitee master account > Returned results Copy to Clipboard{ "msg": "", "code": "0", "data": [ { "accFee": "0", "affiliateCode": "HIIIIII", "depAmt": "0", "firstTradeTime": "", "inviteeLevel": "2", "inviteeRebateRate": "0.39", "joinTime": "1712546713000", "kycTime": "", "level": "Lv1", "region": "Vietnam", "totalCommission": "0", "volMonth": "0" } ] } RESPONSE PARAMETERS Parameter name Type Description inviteeLv String Invitee's relative level to the affiliate If the user is a invitee, the level will be 2. joinTime String Timestamp that the rebate relationship is established, Unix timestamp in millisecond format, e.g. 1597026383085 inviteeRebateRate String Self rebate rate of the invitee (in decimal), e.g. 0.01 represents 10% totalCommission String Total commission earned from the invitee, unit in USDT firstTradeTime String Timestamp that the first trade is completed after the latest rebate relationship is established with the parent affiliate Unix timestamp in millisecond format, e.g. 1597026383085 If user has not traded, "" will be returned level String Invitee trading fee level, e.g. Lv1 depAmt String Accumulated amount of deposit in USDT If user has not deposited, 0 will be returned volMonth String Accumulated Trading volume in the current month in USDT If user has not traded, 0 will be returned accFee String Accumulated Amount of trading fee in USDT If there is no any fee, 0 will be returned kycTime String KYC2 verification time. Unix timestamp in millisecond format and the precision is in day If user has not passed KYC2, "" will be returned region String User country or region. e.g. "United Kingdom" affiliateCode String Affiliate invite code that the invitee registered/recalled via GET THE USER'S AFFILIATE REBATE INFORMATION This endpoint will be offline soon, please use Get the invitee's detail It is used to get the user's affiliate rebate information for affiliate. RATE LIMIT:20 REQUESTS PER 2 SECONDS RATE LIMIT RULE: USERID HTTP REQUEST GET /api/v5/users/partner/if-rebate > Request sample Copy to ClipboardGET /api/v5/users/partner/if-rebate?apiKey=86b02e93-67ab-497d-9970-8cce00a028c3 REQUEST PARAMETERS Parameter Type Required Description apiKey String Yes The user's API key. Only applicable to the API key of invitee master account > Returned results Copy to Clipboard{ "code": "0", "msg": "", "data": { "result": true, "type": "0" } } RESPONSE PARAMETERS Parameter name Type Description result Boolean Whether the user is invited by the current affiliate. true, false type String Whether there is affiliate rebate. 0 There is affiliate rebate 1 There is no affiliate rebate. Because the account which is requesting this endpoint is not affiliate 2 There is no affiliate rebate. Because there is no relationship of invitation or recall, e.g. api key does not exist 4 There is no affiliate rebate. Because the user level is equal to or more than VIP6 STATUS GET / STATUS Get event status of system upgrade. Planned system maintenance that may result in short interruption (lasting less than 5 seconds) or websocket disconnection (users can immediately reconnect) will not be announced. The maintenance will only be performed during times of low market volatility. RATE LIMIT: 1 REQUEST PER 5 SECONDS HTTP REQUESTS GET /api/v5/system/status > Request Example Copy to ClipboardGET /api/v5/system/status GET /api/v5/system/status?state=canceled Copy to Clipboardimport okx.Status as Status flag = "0" # Production trading: 0, Demo trading: 1 statusAPI = Status.StatusAPI( domain="https://www.okx.com", flag=flag, ) # Get event status of system upgrade result = statusAPI.status() print(result) REQUEST PARAMETERS Parameter Type Required Description state String No System maintenance status scheduled: waiting ongoing: processing pre_open: pre_open completed: completed canceled: canceled Generally, pre_open last about 10 minutes. There will be pre_open when the time of upgrade is too long. If this parameter is not filled, the data with status scheduled, ongoing and pre_open will be returned by default > Response Example Copy to Clipboard{ "code": "0", "data": [ { "begin": "1672823400000", "end": "1672823520000", "href": "", "preOpenBegin": "", "scheDesc": "", "serviceType": "8", "state": "completed", "maintType": "1", "env": "1", "system": "unified", "title": "Trading account system upgrade (in batches of accounts)" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description title String The title of system maintenance instructions state String System maintenance status begin String Begin time of system maintenance, Unix timestamp format in milliseconds, e.g. 1617788463867 end String Time of resuming trading totally. Unix timestamp format in milliseconds, e.g. 1617788463867. It is expected end time before completed, changed to actual end time after completed. preOpenBegin String The time of pre_open. Canceling orders, placing Post Only orders, and transferring funds to trading accounts are back after preOpenBegin. href String Hyperlink for system maintenance details, if there is no return value, the default value will be empty. e.g. "" serviceType String Service type 0: WebSocket 5: Trading service 6: Block trading 7: Trading bot 8: Trading service (in batches of accounts) 9: Trading service (in batches of products) 10: Spread trading 11: Copy trading 99: Others (e.g. Suspend partial instruments) system String System unified: Trading account scheDesc String Rescheduled description, e.g. Rescheduled from 2021-01-26T16:30:00.000Z to 2021-01-28T16:30:00.000Z maintType String Maintenance type 1: Scheduled maintenance 2: Unscheduled maintenance 3: System disruption env String Environment 1: Production Trading 2: Demo Trading WS / STATUS CHANNEL Get the status of system maintenance and push when rescheduling and the system maintenance status and end time changes. First subscription: "Push the latest change data"; every time there is a state change, push the changed content. Planned system maintenance that may result in short interruption (lasting less than 5 seconds) or websocket disconnection (users can immediately reconnect) will not be announced. The maintenance will only be performed during times of low market volatility. URL PATH /ws/v5/public > Request Example Copy to Clipboard{ "op": "subscribe", "args": [ { "channel": "status" } ] } REQUEST PARAMETERS Parameter Type Required Description op String Yes subscribe unsubscribe args Array Yes List of subscribed channels > channel String Yes Channel name status > Successful Response Example Copy to Clipboard{ "event": "subscribe", "arg": { "channel": "status" }, "connId": "a4d3ae55" } > Failure Response Example Copy to Clipboard{ "event": "error", "code": "60012", "msg": "Invalid request: {\"op\": \"subscribe\", \"argss\":[{ \"channel\" : \"statuss\"}]}", "connId": "a4d3ae55" } RESPONSE PARAMETERS Parameter Type Required Description event String Yes subscribe unsubscribe error arg Object No Subscribed channel > channel String Yes Channel name status code String No Error code msg String No Error message connId String Yes WebSocket connection ID > Push Data Example Copy to Clipboard{ "arg": { "channel": "status" }, "data": [ { "begin": "1672823400000", "end": "1672825980000", "href": "", "preOpenBegin": "", "scheDesc": "", "serviceType": "0", "state": "completed", "system": "unified", "maintType": "1", "env": "1", "title": "Trading account WebSocket system upgrade", "ts": "1672826038470" } ] } PUSH DATA PARAMETERS Parameter Type Description arg Object Successfully subscribed channel > channel String Channel name data Array Subscribed data > title String The title of system maintenance instructions > state String System maintenance status,scheduled: waiting; ongoing: processing; pre_open: pre_open; completed: completed ;canceled: canceled. Generally, pre_open last about 10 minutes. There will be pre_open when the time of upgrade is too long. > begin String Start time of system maintenance, Unix timestamp format in milliseconds, e.g. 1617788463867 > end String Time of resuming trading totally. Unix timestamp format in milliseconds, e.g. 1617788463867. It is expected end time before completed, changed to actual end time after completed. > preOpenBegin String The time of pre_open. Canceling orders, placing Post Only orders, and transferring funds to trading accounts are back after preOpenBegin. > href String Hyperlink for system maintenance details, if there is no return value, the default value will be empty. e.g. “” > serviceType String Service type, 0: WebSocket ; 5: Trading service; 6: Block trading; 7: Trading bot; 8: Trading service (in batches of accounts); 9: Trading service (in batches of products); 10: Spread trading; 11: Copy trading; 99: Others (e.g. Suspend partial instruments) > system String System, unified: Trading account > scheDesc String Rescheduled description, e.g. Rescheduled from 2021-01-26T16:30:00.000Z to 2021-01-28T16:30:00.000Z > maintType String Maintenance type 1: Scheduled maintenance; 2: Unscheduled maintenance; 3: System disruption > env String Environment. 1: Production Trading, 2: Demo Trading > ts String Push time due to change event, Unix timestamp format in milliseconds, e.g. 1617788463867 ANNOUNCEMENT GET / ANNOUNCEMENTS Get announcements, the response is sorted by pTime with the most recent first. The sort will not be affected if the announcement is updated. Every page has 20 records Authentication is optional for this endpoint. It will be regarded as private endpoint and authentication is required if OK-ACCESS-KEY in HTTP header is delivered. It will be regarded as public endpoint and authentication isn't required if OK-ACCESS-KEY in HTTP header isn't delivered. There are differences between public endpoint and private endpoint. For public endpoint, the response is restricted based on your request IP. For private endpoint, the response is restricted based on your country of residence. RATE LIMIT: 5 REQUEST PER 2 SECONDS RATE LIMIT RULE: USERID(PRIVATE) OR IP(PUBLIC) HTTP REQUESTS GET /api/v5/support/announcements > Request Example Copy to ClipboardGET /api/v5/support/announcements REQUEST PARAMETERS Parameter Type Required Description annType String No Announcement type. Delivering the annType from "GET / Announcement types" Returning all when it is not posted page String No Page for pagination. The default is 1 > Response Example Copy to Clipboard{ "code": "0", "data": [ { "details": [ { "annType": "announcements-latest-announcements", "pTime": "1726128000000", "title": "OKX to delist KISHU margin trading pairs", "url": "https://www.okx.com/help/okx-to-delist-kishu-margin-trading-pairs" }, { "annType": "announcements-latest-announcements", "pTime": "1725967800000", "title": "OKX completed MATIC token migration", "url": "https://www.okx.com/help/okx-completed-matic-token-migration" } ], "totalPage": "90" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description totalPage String Total number of pages details String List of announcements > title String Announcement title > annType String Announcement type > pTime String Publish time. Unix timestamp format in milliseconds, e.g. 1597026383085 > url String Announcement url GET / ANNOUNCEMENT TYPES Authentication is not required for this public endpoint. Get announcements types RATE LIMIT: 1 REQUEST PER 2 SECONDS RATE LIMIT RULE: IP HTTP REQUESTS GET /api/v5/support/announcement-types > Request Example Copy to ClipboardGET /api/v5/support/announcement-types REQUEST PARAMETERS None > Response Example Copy to Clipboard{ "code": "0", "data": [ { "annType": "announcements-latest-announcements", "annTypeDesc": "Latest announcements" }, { "annType": "announcements-latest-events", "annTypeDesc": "Latest events" } ], "msg": "" } RESPONSE PARAMETERS Parameter Type Description annType String Announcement type annTypeDesc String Announcement type description ERROR CODE Here is the REST API Error Code REST API REST API Error Code is from 50000 to 59999. PUBLIC Error Code from 50000 to 53999 GENERAL CLASS Error Code HTTP Status Code Error Message 0 200 1 200 Operation failed. 2 200 Bulk operation partially succeeded. 50000 400 Body for POST request cannot be empty. 50001 503 Service temporarily unavailable. Try again later 50002 400 JSON syntax error 50004 400 API endpoint request timeout (does not mean that the request was successful or failed, please check the request result). 50005 410 API is offline or unavailable. 50006 400 Invalid Content-Type. Please use "application/JSON". 50007 200 Account blocked. 50008 200 User does not exist. 50009 200 Account is suspended due to ongoing liquidation. 50010 200 User ID cannot be empty. 50011 200 Rate limit reached. Please refer to API documentation and throttle requests accordingly. 50011 429 Too Many Requests 50012 200 Account status invalid. Check account status 50013 429 Systems are busy. Please try again later. 50014 400 Parameter {param0} cannot be empty. 50015 400 Either parameter {param0} or {param1} is required. 50016 400 Parameter {param0} and {param1} is an invalid pair. 50017 200 Position frozen and related operations restricted due to auto-deleveraging (ADL). Try again later 50018 200 {param0} frozen and related operations restricted due to auto-deleveraging (ADL). Try again later 50019 200 Account frozen and related operations restricted due to auto-deleveraging (ADL). Try again later 50020 200 Position frozen and related operations are restricted due to liquidation. Try again later 50021 200 {param0} frozen and related operations are restricted due to liquidation. Try again later 50022 200 Account frozen and related operations are restricted due to liquidation. Try again later 50023 200 Funding fees frozen and related operations are restricted. Try again later 50024 200 Either parameter {param0} or {param1} should be submitted. 50025 200 Parameter {param0} count exceeds the limit {param1}. 50026 500 System error. Try again later 50027 200 This account is restricted from trading. Please contact customer support for assistance. 50028 200 Unable to take the order, please reach out to support center for details. 50029 200 Your account has triggered OKX risk control and is temporarily restricted from conducting transactions. Please check your email registered with OKX for contact from our customer support team. 50030 200 You don't have permission to use this API endpoint 50032 200 Your account has been set to prohibit transactions in this currency. Please confirm and try again 50033 200 Instrument blocked. Please verify trading this instrument is allowed under account settings and try again. 50035 403 This endpoint requires that APIKey must be bound to IP 50036 200 The expTime can't be earlier than the current system time. Please adjust the expTime and try again. 50037 200 Order expired. 50038 200 This feature is unavailable in demo trading 50039 200 Parameter "before" isn't supported for timestamp pagination 50040 200 Too frequent operations, please try again later 50041 200 Your user ID hasn’t been allowlisted. Please contact customer service for assistance. 50044 200 Must select one broker type 50047 200 {param0} has already settled. To check the relevant candlestick data, please use {param1} 50048 200 Switching risk unit may lead position risk increases and be forced liquidated. Please adjust position size, make sure margin is in a safe status. 50049 200 No information on the position tier. The current instrument doesn’t support margin trading. 50050 200 You’ve already activated options trading. Please don’t activate it again. 50051 200 Due to compliance restrictions in your country or region, you cannot use this feature. 50052 200 Due to local laws and regulations, you cannot trade with your chosen crypto. 50053 200 This feature is only available in demo trading. 50055 200 Reset unsuccessful. Assets can only be reset up to 5 times per day. 50056 200 You have pending orders or open positions with this currency. Please reset after canceling all the pending orders/closing all the open positions. 50057 200 Reset unsuccessful. Try again later. 50058 200 This crypto is not supported in an asset reset. 50059 200 Before you continue, you'll need to complete additional steps as required by your local regulators. Please visit the website or app for more details. 50060 200 For security and compliance purposes, please complete the identity verification process to continue using our services. 50061 200 You've reached the maximum order rate limit for this account. 50063 200 You can't activate the credits as they might have expired or are already activated. 50064 200 The borrowing system is unavailable. Try again later. API CLASS Error Code HTTP Status Code Error Message 50100 400 API frozen, please contact customer service. 50101 401 APIKey does not match current environment. 50102 401 Timestamp request expired. 50103 401 Request header "OK-ACCESS-KEY" cannot be empty. 50104 401 Request header "OK-ACCESS-PASSPHRASE" cannot be empty. 50105 401 Request header "OK-ACCESS-PASSPHRASE" incorrect. 50106 401 Request header "OK-ACCESS-SIGN" cannot be empty. 50107 401 Request header "OK-ACCESS-TIMESTAMP" cannot be empty. 50108 401 Exchange ID does not exist. 50109 401 Exchange domain does not exist. 50110 401 Your IP {param0} is not included in your API key's IP whitelist. 50111 401 Invalid OK-ACCESS-KEY. 50112 401 Invalid OK-ACCESS-TIMESTAMP. 50113 401 Invalid signature. 50114 401 Invalid authorization. 50115 405 Invalid request method. 50116 200 Fast API is allowed to create only one API key 50118 200 To link the app using your API key, your broker needs to share their IP to be whitelisted 50119 200 API key doesn't exist 50120 200 This API key doesn't have permission to use this function 50120 200 This API key doesn't have permission to use this function 50121 200 You can't access our services through the IP address ({param0}) 50122 200 Order amount must exceed minimum amount TRADE CLASS Error Code HTTP Status code Error Message 51000 400 Parameter {param0} error 51001 200 Instrument ID does not exist 51002 200 Instrument ID does not match underlying index 51003 200 Either client order ID or order ID is required 51004 200 Order failed. For isolated long/short mode of {instId}, the sum of current order size, position quantity in the same direction, and pending orders in the same direction cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current order size: {size} contracts, position quantity in the same direction: {posNumber} contracts, pending orders in the same direction: {pendingNumber} contracts). 51004 200 Order failed. For cross long/short mode of {instId}, the sum of current order size, position quantity in the long and short directions, and pending orders in the long and short directions cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current order size: {size} contracts, position quantity in the long and short directions: {posLongShortNumber} contracts, pending orders in the long and short directions: {pendingLongShortNumber} contracts). 51004 200 Order failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of current order size, current instId position quantity in the long and short directions, current instId pending orders in the long and short directions, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current order size: {size} contracts, current instId position quantity in the long and short directions: {posLongShortNumber} contracts, current instId pending orders in the long and short directions: {pendingLongShortNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51004 200 Order failed. For buy/sell mode of {instId}, the sum of current buy order size, position quantity, and pending buy orders cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current buy order size: {size} contracts, position quantity: {posNumber} contracts, pending buy orders: {pendingNumber} contracts). 51004 200 Order failed. For buy/sell mode of {instId}, the sum of current sell order size, position quantity, and pending sell orders cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current sell order size: {size} contracts, position quantity: {posNumber} contracts, pending sell orders: {pendingNumber} contracts). 51004 200 Order failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of current buy order size, current instId position quantity, current instId pending buy orders, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current buy order size: {size} contracts, current instId position quantity: {posNumber} contracts, current instId pending buy orders: {pendingNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51004 200 Order failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of current sell order size, current instId position quantity, current instId pending sell orders, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, current sell order size: {size} contracts, current instId position quantity: {posNumber} contracts, current instId pending sell orders: {pendingNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51004 200 Order amendment failed. For isolated long/short mode of {instId}, the sum of increment order size by amendment, position quantity in the same direction, and pending orders in the same direction cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amendment: {size} contracts, position quantity in the same direction: {posNumber} contracts, pending orders in the same direction: {pendingNumber} contracts). 51004 200 Order amendment failed. For cross long/short mode of {instId}, the sum of increment order size by amendment, position quantity in the long and short directions, and pending orders in the long and short directions cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amendment: {size} contracts, position quantity in the long and short directions: {posLongShortNumber} contracts, pending orders in the same direction: {pendingLongShortNumber} contracts). 51004 200 Order amendment failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of increment order size by amendment, current instId position quantity in the long and short directions, current instId pending orders in the long and short directions, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amendment: {size} contracts, current instId position quantity in the long and short directions: {posLongShortNumber} contracts, current instId pending orders in the long and short directions: {pendingLongShortNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51004 200 Order amendment failed. For buy/sell mode of {instId}, the sum of increment order size by amending current buy order, position quantity, and pending buy orders cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amending current buy order: {size} contracts, position quantity: {posNumber} contracts, pending buy orders: {pendingNumber} contracts). 51004 200 Order amendment failed. For buy/sell mode of {instId}, the sum of increment order size by amending current sell order, position quantity, and pending sell orders cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amending current sell order: {size} contracts, position quantity: {posNumber} contracts, pending sell orders: {pendingNumber} contracts). 51004 200 Order amendment failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of increment order size by amending current buy order, current instId position quantity, current instId pending buy orders, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amending current buy order: {size} contracts, current instId position quantity: {posNumber} contracts, current instId pending buy orders: {pendingNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51004 200 Order amendment failed. For cross buy/sell mode of {businessType} and instFamily {instFamily}, the sum of increment order size by amending current sell order, current instId position quantity, current instId pending sell orders, and other contracts of the same instFamily cannot be more than {tierLimitQuantity}(contracts) which is the maximum position amount under current leverage. Please lower the leverage or use a new sub-account to place the order again (current leverage: {leverage}×, increment order size by amending current sell order: {size} contracts, current instId position quantity: {posNumber} contracts, current instId pending sell orders: {pendingNumber} contracts, other contracts of the same instFamily: {otherQuote} contracts). 51005 200 Your order amount exceeds the max order amount. 51006 200 Order price is not within the price limit (max buy price: {param0} min sell price: {param1}) 51007 200 Order failed. Please place orders of at least 1 contract or more. 51008 200 Order failed. Insufficient {param0} balance in account 51008 200 Order failed. Insufficient {param0} margin in account 51008 200 Order failed. Insufficient {param0} balance in account, and Auto Borrow is not enabled 51008 200 Order failed. Insufficient {param0} margin in account and auto-borrow is not enabled (Portfolio margin mode can try IOC orders to lower the risks) 51008 200 Order failed. The requested borrow amount is larger than the available {param0} borrow amount of your position tier (Existing pending orders and the new order are required to borrow {param1}, Remaining limit {param2}, Limit {param3}, Limit used {param4}) 51008 200 Order failed. Exceeds {param0} borrow limit (Limit of master account plus the allocated VIP quota for the current account) (Existing pending orders and the new order are required to borrow {param1}, Remaining limit {param2}, Limit {param3}, Limit used {param4}) 51008 200 Order failed. Insufficient {param0} crypto limitation causes insufficient available to borrow 51008 200 Order failed. Insufficient {param0} available in loan pool to borrow. 51008 200 Order failed. Insufficient account balance, and the adjusted equity in USD is less than IMR (Portfolio margin mode can try IOC orders to lower the risks) 51008 200 Order failed. The order didn't pass delta verification because if the order were to succeed, the change in adjEq would be smaller than the change in IMR. Increase adjEq or reduce IMR (Portfolio margin mode can try IOC orders to lower the risks) 51009 200 Order blocked. Please contact customer support for assistance. 51010 200 Request unsupported under current account mode 51011 200 Order ID already exists. 51012 200 Token does not exist. 51014 200 Index does not exist. 51015 200 Instrument ID does not match instrument type. 51016 200 Client order ID already exists. 51017 200 Loan amount exceeds borrowing limit. 51018 200 User with option account cannot hold net short positions. 51019 200 No net long positions can be held under cross margin mode in options. 51020 200 Order amount should be greater than the min available amount. 51021 200 The pair or contract is not yet listed 51022 200 Contract suspended. 51023 200 Position does not exist. 51024 200 Trading account is blocked. 51024 200 In accordance with the terms of service, we regret to inform you that we cannot provide services for you. If you have any questions, please contact our customer support. 51024 200 According to your request, this account has been frozen. If you have any questions, please contact our customer support. 51024 200 Your account has recently changed some security settings. To protect the security of your funds, this action is not allowed for now. If you have any questions, please contact our customer support. 51024 200 You have withdrawn all assets in the account. To protect your personal information, the account has been permanently frozen. If you have any questions, please contact our customer support. 51024 200 Your identity could not be verified. To protect the security of your funds, this action is not allowed. Please contact our customer support. 51024 200 Your verified age doesn't meet the requirement. To protect the security of your funds, we cannot proceed with your request. Please contact our customer support. 51024 200 In accordance with the terms of service, trading is currently unavailable in your verified country or region. Close all open positions or contact customer support if you have any questions. 51024 200 In accordance with the terms of service, multiple account is not allowed. To protect the security of your funds, this action is not allowed. Please contact our customer support. 51024 200 Your account is in judicial freezing, and this action is not allowed for now. If you have any questions, please contact our customer support. 51024 200 Based on your previous requests, this action is not allowed for now. If you have any questions, please contact our customer support. 51024 200 Your account has disputed deposit orders. To protect the security of your funds, this action is not allowed for now. Please contact our customer support. 51024 200 Unable to proceed. Please resolve your existing P2P disputes first. 51024 200 Your account might have compliance risk. To protect the security of your funds, this action is not allowed for now. Please contact our customer support. 51024 200 Based on your trading requests, this action is not allowed for now. If you have any questions, please contact our customer support. 51024 200 Your account has triggered risk control. This action is not allowed for now. Please contact our customer support. 51024 200 This account is temporarily unavailable. Please contact our customer support. 51024 200 Withdrawal function of this account is temporarily unavailable. Please contact our customer support. 51024 200 Transfer function of this account is temporarily unavailable. Please contact our customer support. 51024 200 You violated the "Fiat Trading Rules" when you were doing fiat trade, so we'll no longer provide fiat trading-related services for you. The deposit and withdrawal of your account and other trading functions will not be affected. 51024 200 Please kindly check your mailbox and reply to emails from the verification team. 51024 200 According to your request, this account has been closed. If you have any questions, please contact our customer support. 51024 200 Your account might have security risk. To protect the security of your funds, this action is not allowed for now. Please contact our customer support. 51024 200 Your account might have security risk. Convert is now unavailable. Please contact our customer support. 51024 200 Unable to proceed due to account restrictions. We've sent an email to your OKX registered email address regarding this matter, or you can contact customer support via Chat with AI chatbot on our support center page. 51024 200 In accordance with the terms of service, trading is currently unavailable in your verified country or region. Cancel all orders or contact customer support if you have any questions. 51024 200 In accordance with the terms of service, trading is not available in your verified country. If you have any questions, please contact our customer support. 51024 200 This product isn’t available in your country or region due to local laws and regulations. If you don’t reside in this area, you may continue using OKX Exchange products with a valid government-issued ID. 51024 200 Please note that you may not be able to transfer or trade in the first 30 minutes after establishing custody trading sub-accounts. Please kindly wait and try again later. 51024 200 Feature unavailable. Complete Advanced verification to access this feature. 51024 200 You can't trade or deposit now. Update your personal info to restore full account access immediately. 51024 200 Sub-accounts exceeding the limit aren't allowed to open new positions and can only reduce or close existing ones. Please try again with a different account. 51025 200 Order count exceeds the limit. 51026 200 Instrument type does not match underlying index. 51027 200 Contract expired. 51028 200 Contract under delivery. 51029 200 Contract is being settled. 51030 200 Funding fee is being settled. 51031 200 This order price is not within the closing price range. 51032 200 Closing all positions at market price. 51033 200 The total amount per order for this pair has reached the upper limit. 51034 200 Fill rate exceeds the limit that you've set. Please reset the market maker protection to inactive for new trades. 51035 200 Account does not have permission to submit MM quote order 51036 200 Only Options instrument of the PM account supports MMP orders. 51411 200 Account does not have permission for mass cancellation 51042 200 Under the Portfolio margin account, users can only place MMP orders in cross margin mode in Options. 51043 200 This isolated position doesn't exist. 59509 200 Account does not have permission to reset MMP status 51037 200 This account only supports placing IOC orders to reduce account risk. 51038 200 IOC order already exists under the current risk module. 51039 200 Leverage cannot be adjusted for the cross positions of Expiry Futures and Perpetual Futures under the PM account. 51040 200 Cannot adjust margins for long isolated options positions 51041 200 Portfolio margin account only supports net mode. 51044 200 The order type {param0}, {param1} is not allowed to set stop loss and take profit 51046 200 The take profit trigger price must be higher than the order price 51047 200 The stop loss trigger price must be lower than the order price 51048 200 The take profit trigger price must be lower than the order price 51049 200 The stop loss trigger price must be higher than the order price 51050 200 The take profit trigger price must be higher than the best ask price 51051 200 The stop loss trigger price must be lower than the best ask price 51052 200 The take profit trigger price must be lower than the best bid price 51053 200 The stop loss trigger price must be higher than the best bid price 51054 500 Request timed out. Please try again. 51055 200 Futures Grid is not available in Portfolio Margin mode 51056 200 Action not allowed 51057 200 This bot isn’t available in current account mode. Switch mode in Settings > Account mode to continue. 51058 200 No available position for this algo order 51059 200 Strategy for the current state does not support this operation 51065 200 algoClOrdId already exists. 51068 200 {param0} already exists within algoClOrdId and attachAlgoClOrdId. 51069 200 The option contracts related to current {param0} do not exist 51070 200 You do not meet the requirements for switching to this account mode. Please upgrade the account mode on the OKX website or App 51071 200 You've reached the maximum limit for tag level cancel all after timers. 51072 200 As a spot lead trader, you need to set tdMode to 'spot_isolated' when configured buying lead trade pairs 51073 200 As a spot lead trader, you need to use '/copytrading/close-subposition' for selling assets through lead trades 51074 200 Only the tdMode for lead trade pairs configured by spot lead traders can be set to 'spot_isolated' 51076 200 TP/SL orders in Split TPs only support one-way TP/SL. You can not use slTriggerPx&slOrdPx and tpTriggerPx&tpOrdPx at the same time. 51077 200 You cannot set ‘amendPxOnTriggerTyp’ as 1 for spot and margin trading 51078 200 You are a lead trader. Split TPs are not supported. 51079 200 The number of TP orders with Split TPs attached in a same order cannot exceed {param0} 51080 200 Take-profit trigger price types (tpTriggerPxType) must be the same in an order with Split TPs attached 51081 200 Take-profit trigger prices (tpTriggerPx) cannot be the same in an order with Split TPs attached 51082 200 Take-profit order prices (tpOrdPx) must be market prices in an order with Split TPs attached 51083 200 The total size of TP orders with Split TPs attached in a same order should equal the size of this order 51084 200 The number of SL orders with Split TPs attached in a same order cannot exceed {param0} 51085 200 The number of TP orders cannot be less than 2 when cost-price SL is enabled (amendPxOnTriggerType set as 1) for Split TPs 51086 200 The number of orders with Split TPs attached in a same order cannot exceed {param0} 51538 200 You need to use attachAlgoOrds if you used attachAlgoOrds when placing an order. attachAlgoOrds is not supported if you did not use attachAlgoOrds when placing this order. 51539 200 attachAlgoId or attachAlgoClOrdId cannot be identical when modifying any TP/SL within your split TPs order 51527 200 Order modification failed. At least 1 of the attached TP/SL orders does not exist. 51087 200 Listing canceled for this crypto 51088 200 You can only place 1 TP/SL order to close an entire position 51089 200 The size of the TP order among split TPs attached cannot be empty 51090 200 You can't modify the amount of an SL order placed with a TP limit order. 51091 200 All TP orders in one order must be of the same type. 51092 200 TP order prices (tpOrdPx) in one order must be different. 51093 200 TP limit order prices (tpOrdPx) in one order can't be –1 (market price). 51094 200 You can't place TP limit orders in spot, margin, or options trading. 51095 200 To place TP limit orders at this endpoint, you must place an SL order at the same time. 51096 200 cxlOnClosePos needs to be true to place a TP limit order 51098 200 You can't add a new TP order to an SL order placed with a TP limit order. 51099 200 You can't place TP limit orders as a lead trader. 51178 200 tpTriggerPx&tpOrdPx or slTriggerPx&slOrdPx can't be empty when using attachAlgoClOrdId. 51100 200 Unable to place order. Take profit/Stop loss conditions cannot be added to reduce-only orders. 51101 200 Order failed. The size of the current order cannot be more than {maxSzPerOrder} (contracts). 51102 200 Order failed. The number of pending orders for this instId cannot be more than {maxNumberPerInstrument} (orders). 51103 200 Order failed. The number of pending orders across all instIds under the current {businessType} instFamily cannot be more than {maxNumberPerInstFamily} (orders). 51104 200 Order failed. The aggregated contract quantity for all pending orders across all instIds under the current {businessType} instFamily cannot be more than {maxSzPerInstFamily} (contracts). 51105 200 Order failed. The maximum sum of position quantity and pending orders in the same direction for current instId cannot be more than {maxPositionSzPerInstrument} (contracts). 51106 200 Order failed. The maximum sum of position quantity and pending orders in the same direction across all instIds under the current {businessType} instFamily cannot be more than {maxPostionSzPerInstFamily51106} (contracts). 51107 200 Order failed. The maximum sum of position quantity and pending orders in both directions across all instIds under the current {businessType} instFamily cannot be more than {maxPostionSzPerInstFamily51107} (contracts). 51108 200 Positions exceed the limit for closing out with the market price. 51109 200 No available offer. 51110 200 You can only place a limit order after Call Auction has started. 51111 200 Maximum {param0} orders can be placed in bulk. 51112 200 Close order size exceeds your available size. 51113 429 Market-price liquidation requests too frequent. 51116 200 Order price or trigger price exceeds {param0}. 51117 200 Pending close-orders count exceeds limit. 51120 200 Order quantity is less than {param0}. Please try again. 51121 200 Order quantity must be a multiple of the lot size. 51122 200 Order price must be higher than the minimum price {param0}. 51124 200 You can only place limit orders during call auction. 51125 200 Currently there are pending reduce + reverse position orders in margin trading. Please cancel all pending reduce + reverse position orders and continue. 51126 200 Currently there are pending reduce only orders in margin trading. Please cancel all pending reduce only orders and continue. 51127 200 Available balance is 0. 51128 200 Multi-currency margin accounts cannot do cross-margin trading. 51129 200 The value of the position and buy order has reached the position limit. No further buying is allowed. 51130 200 Fixed margin currency error. 51131 200 Insufficient balance. 51132 200 Your position amount is negative and less than the minimum trading amount. 51133 200 Reduce-only feature is unavailable for spot transactions in multi-currency margin accounts. 51134 200 Closing failed. Please check your margin holdings and pending orders. Turn off the Reduce-only to continue. 51135 200 Your closing price has triggered the limit price. The maximum buy price is {param0}. 51136 200 Your closing price has triggered the limit price. The minimum sell price is {param0}. 51137 200 The highest price limit for buy orders is {param0} 51138 200 The lowest price limit for sell orders is {param0} 51139 200 Reduce-only feature is unavailable for the spot transactions by spot mode. 51143 200 Your inquiry failed, please try again later. 51145 200 Placing orders in advance is not supported when margins are self-tranferred in isolated mode. 51147 200 To trade options, make sure you have more than 20,000 USD worth of assets in your trading account first, then activate options trading 51148 200 Failed to place order. The new order may execute an opposite trading direction of your existing reduce-only positions. Cancel or edit pending orders to continue order 51149 500 Order timed out. Please try again. 51150 200 The precision of the number of trades or the price exceeds the limit. 51152 200 Unable to place an order that mixes automatic buy with automatic repayment or manual operation in Quick margin mode. 51155 200 Due to local compliance requirements, trading of this pair or contract is restricted. 51169 200 Failed to place order. You don’t have any positions of this contract. Turn off the Reduce-only to continue. 51170 200 Failed to place order. A reduce-only order can’t be the same trading direction as your existing positions. 51171 200 Failed to edit order. The edited order may execute an opposite trading direction of your existing reduce-only positions. Cancel or edit pending orders to continue. 51174 200 Order failed. The number of {param0} pending orders reached the upper limit of {param1} (orders). 51175 200 Parameters {param0} {param1} and {param2} cannot be empty at the same time 51176 200 Only one parameter can be filled among Parameters {param0} {param1} and {param2} 51177 200 Unavailable to amend {param1} because the price type of the current options order is {param0} 51179 200 Unavailable to place options orders using {param0} in spot mode 51180 200 The range of {param0} should be ({param1}, {param2}) 51181 200 ordType must be limit when placing {param0} orders 51182 200 The total number of pending orders under price types pxUsd and pxVol for the current account cannot exceed {param0}. 51185 200 The maximum value allowed per order is {maxOrderValue} USD 51186 200 Order failed. The leverage for {param0} in your current margin mode is {param1}x, which exceeds the platform limit of {param2}x. 51187 200 Order failed. For {param0} {param1} in your current margin mode, the sum of your current order amount, position sizes, and open orders is {param2} contracts, which exceeds the platform limit of {param3} contracts. Reduce your order amount, cancel orders, or close positions. 51201 200 Value of per market order cannot exceed 1,000,000 USDT. 51202 200 Market order amount exceeds the maximum amount. 51203 200 Order amount exceeds the limit {param0}. 51204 200 The price for the limit order cannot be empty. 51205 200 Reduce Only is not available. 51206 200 Please cancel the Reduce Only order before placing the current {param0} order to avoid opening a reverse position. 51220 200 Lead and follow bots only support “Sell” or “Close all positions” when bot stops 51221 200 The profit-sharing ratio must be between 0% and 30% 51222 200 Profit sharing isn’t supported for this type of bot 51223 200 Only lead bot creators can set profit-sharing ratio 51224 200 Profit sharing isn’t supported for this crypto pair 51225 200 Instant trigger isn’t available for follow bots 51226 200 Editing parameters isn’t available for follow bots 51250 200 Algo order price is out of the available range. 51251 200 Bot order type error occurred when placing iceberg order 51252 200 Algo order amount is out of the available range. 51253 200 Average amount exceeds the limit of per iceberg order. 51254 200 Iceberg average amount error occurred. 51255 200 Limit of per iceberg order: Total amount/1000 < x <= Total amount. 51256 200 Iceberg order price variance error. 51257 200 Trailing stop order callback rate error. The callback rate should be {min}< x<={max}%. 51258 200 Trailing stop order placement failed. The trigger price of a sell order must be higher than the last transaction price. 51259 200 Trailing stop order placement failed. The trigger price of a buy order must be lower than the last transaction price. 51260 200 Maximum of {param0} pending trailing stop orders can be held at the same time. 51261 200 Each user can hold up to {param0} pending stop orders at the same time. 51262 200 Maximum {param0} pending iceberg orders can be held at the same time. 51263 200 Maximum {param0} pending time-weighted orders can be held at the same time. 51264 200 Average amount exceeds the limit of per time-weighted order. 51265 200 Time-weighted order limit error. 51267 200 Time-weighted order strategy initiative rate error. 51268 200 Time-weighted order strategy initiative range error. 51269 200 Time-weighted order interval error. Interval must be {%min}<= x<={%max}. 51270 200 The limit of time-weighted order price variance is 0 < x <= 1%. 51271 200 Sweep ratio must be 0 < x <= 100%. 51272 200 Price variance must be 0 < x <= 1%. 51273 200 Total amount must be greater than {param0}. 51274 200 Total quantity of time-weighted order must be larger than single order limit. 51275 200 The amount of single stop-market order cannot exceed the upper limit. 51276 200 Prices cannot be specified for stop market orders. 51277 200 TP trigger price cannot be higher than the last price. 51278 200 SL trigger price cannot be lower than the last price. 51279 200 TP trigger price cannot be lower than the last price. 51280 200 SL trigger price cannot be higher than the last price. 51281 200 Trigger order do not support the tgtCcy parameter. 51282 200 The range of Price variance is {param0}~{param1} 51283 200 The range of Time interval is {param0}~{param1} 51284 200 The range of Average amount is {param0}~{param1} 51285 200 The range of Total amount is {param0}~{param1} 51286 200 The total amount should not be less than {param0} 51287 200 This bot doesn't support current instrument 51288 200 Bot is currently stopping. Do not make multiple attempts to stop. 51289 200 Bot configuration does not exist. Please try again later 51290 200 The Bot engine is being upgraded. Please try again later 51291 200 This Bot does not exist or has been stopped 51292 200 This Bot type does not exist 51293 200 This Bot does not exist 51294 200 This Bot cannot be created temporarily. Please try again later 51295 200 Portfolio margin account does not support ordType {param0} in Trading bot mode 51298 200 Trigger orders are not available in the net mode of Expiry Futures and Perpetual Futures 51299 200 Order did not go through. You can hold a maximum of {param0} orders of this type. 51300 200 TP trigger price cannot be higher than the mark price 51302 200 SL trigger price cannot be lower than the mark price 51303 200 TP trigger price cannot be lower than the mark price 51304 200 SL trigger price cannot be higher than the mark price 51305 200 TP trigger price cannot be higher than the index price 51306 200 SL trigger price cannot be lower than the index price 51307 200 TP trigger price cannot be lower than the index price 51308 200 SL trigger price cannot be higher than the index price 51309 200 Cannot create trading bot during call auction 51310 200 Strategic orders with Iceberg and TWAP order type are not supported when margins are self-transferred in isolated mode. 51311 200 Failed to place trailing stop order. Callback rate should be within {min}<x<={max} 51312 200 Failed to place trailing stop order. Order amount should be within {min}<x<={max} 51313 200 Manual transfer in isolated mode does not support bot trading 51317 200 Trigger orders are not available by margin 51327 200 closeFraction is only available for Expiry Futures and Perpetual Futures 51328 200 closeFraction is only available for reduceOnly orders 51329 200 closeFraction is only available in NET mode 51330 200 closeFraction is only available for stop market orders 51331 200 closeFraction is only available for close position orders 51332 200 closeFraction is not applicable to Portfolio Margin 51333 200 Close position order in hedge-mode or reduce-only order in one-way mode cannot attach TPSL 51340 200 Used margin must be greater than {0}{1} 51341 200 Position closing not allowed 51342 200 Closing order already exists. Please try again later 51343 200 TP price must be less than the lower price 51344 200 SL price must be greater than the upper price 51345 200 Policy type is not grid policy 51346 200 The highest price cannot be lower than the lowest price 51347 200 No profit available 51348 200 Stop loss price must be less than the lower price in the range. 51349 200 Take profit price must be greater than the highest price in the range. 51350 200 No recommended parameters 51351 200 Single income must be greater than 0 51352 200 You can have {0} to {1} trading pairs 51353 200 Trading pair {0} already exists 51354 200 The percentages of all trading pairs should add up to 100% 51355 200 Select a date within {0} - {1} 51356 200 Select a time within {0} - {1} 51357 200 Select a time zone within {0} - {1} 51358 200 The investment amount of each crypto must be greater than {amount} 51359 200 Recurring buy not supported for the selected crypto {0} 51370 200 The range of lever is {0}~{1} 51380 200 Market conditions do not meet the strategy running configuration. You can try again later or adjust your tp/sl configuration. 51381 200 Per grid profit ratio must be larger than 0.1% and less or equal to 10% 51382 200 Stop triggerAction is not supported by the current strategy 51383 200 The min_price is lower than the last price 51384 200 The trigger price must be greater than the min price 51385 200 The take profit price needs to be greater than the min price 51386 200 The min price needs to be greater than 1/2 of the last price 51387 200 Stop loss price must be less than the bottom price 51388 200 This Bot is in running status 51389 200 Trigger price should be lower than {0} 51390 200 Trigger price should be lower than the TP price 51391 200 Trigger price should be higher than the SL price 51392 200 TP price should be higher than the trigger price 51393 200 SL price should be lower than the trigger price 51394 200 Trigger price should be higher than the TP price 51395 200 Trigger price should be lower than the SL price 51396 200 TP price should be lower than the trigger price 51397 200 SL price should be higher than the trigger price 51398 200 Current market meets the stop condition. The bot cannot be created. 51399 200 Max margin under current leverage: {amountLimit} {quoteCurrency}. Enter a smaller amount and try again. 51400 200 Cancellation failed as the order has been filled, canceled or does not exist. 51400 200 Cancellation failed as the order does not exist. (Only applicable to Nitro Spread) 51401 200 Cancellation failed as the order is already canceled. (Only applicable to Nitro Spread) 51402 200 Cancellation failed as the order is already completed. (Only applicable to Nitro Spread) 51403 200 Cancellation failed as the order type does not support cancellation. 51404 200 Order cancellation unavailable during the second phase of call auction. 51405 200 Cancellation failed as you do not have any pending orders. 51406 400 Canceled order count exceeds the limit {param0}. 51407 200 Either order ID or client order ID is required. 51408 200 Pair ID or name does not match the order info. 51409 200 Either pair ID or pair name ID is required. 51410 200 Cancellation failed as the order is already under cancelling status. 51411 200 Account does not have permission for mass cancellation. 51412 200 Cancellation timed out, please try again later. 51412 200 The order has been triggered and can't be canceled. 51413 200 Cancellation failed as the order type is not supported by endpoint. 51415 200 Unable to place order. Spot trading only supports using the last price as trigger price. Please select "Last" and try again. 51500 200 You must enter a price, quantity, or TP/SL 51501 400 Maximum of {param0} orders can be modified. 51502 200 Order failed. Insufficient {param0} balance in account 51502 200 Order failed. Insufficient {param0} margin in account 51502 200 Order failed. Insufficient {param0} balance in account and Auto Borrow is not enabled 51502 200 Order failed. Insufficient {param0} margin in account and Auto Borrow is not enabled (Portfolio margin mode can try IOC orders to lower the risks) 51502 200 Order failed. The requested borrowing amount is larger than the available {param0} borrowing amount of your position tier. Existing pending orders and the new order need to borrow {param1}, remaining quota {param2}, total quota {param3}, used {param4} 51502 200 Order failed. The requested borrowing amount is larger than the available {param0} borrowing amount of your position tier. Existing pending orders and the new order need to borrow {param1}, remaining quota {param2}, total quota {param3}, used {param4} 51502 200 Order failed. The requested borrowing amount is larger than the available {param0} borrowing amount of your main account and the allocated VIP quota. Existing pending orders and the new order need to borrow {param1}, remaining quota {param2}, total quota {param3}, used {param4} 51502 200 Order failed. Insufficient available borrowing amount in {param0} crypto pair 51502 200 Order failed. Insufficient available borrowing amount in {param0} loan pool 51502 200 Order failed. Insufficient account balance and the adjusted equity in USD is smaller than the IMR (Portfolio margin mode can try IOC orders to lower the risks) 51502 200 Order failed. The order didn't pass delta verification. If the order succeeded, the change in adjEq would be smaller than the change in IMR. Increase adjEq or reduce IMR (Portfolio margin mode can try IOC orders to lower the risks) 51503 200 Order modification failed as the order has been filled, canceled or does not exist. 51503 200 Order modification failed as the order does not exist. (Only applicable to Nitro Spread) 51505 200 {instId} is not in call auction 51506 200 Order modification unavailable for the order type. 51508 200 Orders are not allowed to be modified during the call auction. 51509 200 Modification failed as the order has been canceled. (Only applicable to Nitro Spread) 51510 200 Modification failed as the order has been completed. (Only applicable to Nitro Spread) 51511 200 Operation failed as the order price did not meet the requirement for Post Only. 51512 200 Failed to amend orders in batches. You cannot have duplicate orders in the same amend-batch-orders request. 51513 200 Number of modification requests that are currently in progress for an order cannot exceed 3. 51514 200 Order modification failed. The price length must be 32 characters or shorter. 51523 200 Unable to modify the order price of a stop order that closes an entire position. Please modify the trigger price instead. 51524 200 Unable to modify the order quantity of a stop order that closes an entire position. Please modify the trigger price instead. 51525 200 Stop order modification is not available for quick margin 51526 200 Order modification unsuccessful. Take profit/Stop loss conditions cannot be added to or removed from stop orders. 51527 200 Order modification unsuccessful. The stop order does not exist. 51528 200 Unable to modify trigger price type 51529 200 Order modification unsuccessful. Stop order modification only applies to Expiry Futures and Perpetual Futures. 51530 200 Order modification unsuccessful. Take profit/Stop loss conditions cannot be added to or removed from reduce-only orders. 51531 200 Order modification unsuccessful. The stop order must have either take profit or stop loss attached. 51536 200 Unable to modify the size of the options order if the price type is pxUsd or pxVol 51537 200 pxUsd or pxVol are not supported by non-options instruments 51600 200 Status not found. 51601 200 Order status and order ID cannot exist at the same time. 51602 200 Either order status or order ID is required. 51603 200 Order does not exist. 51604 200 Initiate a download request before obtaining the hyperlink 51605 200 You can only download transaction data from the past 2 years 51606 200 Transaction data for the current quarter is not available 51607 200 Your previous download request is still being processed 51608 200 No transaction data found for the current quarter 51610 200 You can't download billing statements for the current quarter. 51611 200 You can't download billing statements for the current quarter. 51620 200 Only affiliates can perform this action 51621 200 The user isn’t your invitee 51156 200 You're leading trades in long/short mode and can't use this API endpoint to close positions 51159 200 You're leading trades in buy/sell mode. If you want to place orders using this API endpoint, the orders must be in the same direction as your existing positions and open orders. 51162 200 You have {instrument} open orders. Cancel these orders and try again 51163 200 You hold {instrument} positions. Close these positions and try again 51165 200 The number of {instrument} reduce-only orders reached the upper limit of {upLimit}. Cancel some orders to proceed. 51166 200 Currently, we don't support leading trades with this instrument 51167 200 Failed. You have block trading open order(s), please proceed after canceling existing order(s). 51168 200 Failed. You have reduce-only type of open order(s), please proceed after canceling existing order(s) 51320 200 The range of coin percentage is {0}%-{1}% 51321 200 You're leading trades. Currently, we don't support leading trades with arbitrage, iceberg, or TWAP bots 51322 200 You're leading trades that have been filled at market price. We've canceled your open stop orders to close your positions 51323 200 You're already leading trades with take profit or stop loss settings. Cancel your existing stop orders to proceed 51324 200 As a lead trader, you hold positions in {instrument}. To close your positions, place orders in the amount that equals the available amount for closing 51325 200 As a lead trader, you must use market price when placing stop orders 51326 200 As a lead trader, you must use market price when placing orders with take profit or stop loss settings 54000 200 Margin trading is not supported. 54001 200 Only Multi-currency margin account can be set to borrow coins automatically. 54004 200 Order placement or modification failed because one of the orders in the batch failed. 54005 200 Switch to isolated margin mode to trade pre-market expiry futures. 54006 200 Pre-market expiry future position limit is {posLimit} contracts. 54007 200 Instrument {instId} is not supported 54008 200 This operation is disabled by the 'mass cancel order' endpoint. Please enable it using this endpoint. 54009 200 The range of {param0} should be [{param1}, {param2}]. 54011 200 Pre-market trading contracts are only allowed to reduce the number of positions within 1 hour before delivery. Please modify or cancel the order. DATA CLASS Error Code HTTP Status Code Error Message 52000 200 No market data found. FINANCE Error Code from 51700 to 51799 Error Code HTTP Status Code Error Message 51720 200 Redeem error 51721 200 Cancel redeem error 51722 200 Redeem already complete 51723 200 Early redemption is not supported 51724 200 Redemption is currently not supported 51725 200 Cancellation is currently not supported 51726 200 Cancellation of subscriptions/redemptions is not supported 51727 200 The minimum subscription amount is {minUnit} {ccy} 51728 200 The subscription quantity is above the maximum limit 51729 200 This project has not reached the redemption date 51730 200 Sold out 51731 200 Product is currently suspended for purchase 51732 200 Required user KYC level not met 51733 200 User is under risk control 51734 200 User KYC Country is not supported 51735 200 Sub-account is not supported 51736 200 Insufficient {ccy} balance 51737 200 For security and compliance purposes, please complete the identity verification process to continue using our services. 51738 200 Your funding account is frozen. CONVERT Error Code from 52900 to 52999 Error Code HTTP Status Code Error Message 52900 200 General invalid request 52901 200 Invalid base asset 52902 200 Invalid quote asset 52903 200 Invalid quote amount 52904 200 Invalid quote side 52905 200 Invalid quote price 52907 200 Order not found 52908 200 Invalid order ID 52909 200 Duplicate Client Order Id 52910 500 Service unavailable, please try again later 52911 500 RFQ service unavailable, please try again later 52912 500 Server timeout 52913 200 Trade rejected 52915 200 Cannot quote due to large amounts of RFQ and insufficient liquidity, please try again later 52916 200 Insufficient balance in funding account 52917 200 RFQ quantity cannot be less than the lower limit 52918 200 RFQ quantity cannot be greater than the upper limit 52919 200 Parameter {param} of convert trading is inconsistent with the quotation 52920 200 Quantity of convert trading cannot exceed the quotation quantity 52921 200 Quote traded, please ask for quote again 52922 200 Quote expired, please ask for quote again 52923 200 Service unavailable. Try again later. 52924 200 Too many orders. Try again later. 52925 200 Duplicate client request ID 52926 200 {param0} has already expired 52927 200 No quote 52928 200 Quantity must be a multiple of the step size FUTURES Error Code from 55000 to 55999 Error Code HTTP Status Code Error Message 55000 200 Cannot be transferred out within 30 minutes after delivery. SWAP No OPTION No FUNDING Error Code from 58000 to 58999 Error Code HTTP Status Code Error Message 58002 200 Please activate Savings Account first. 58003 200 Savings does not support this currency type 58004 200 Account blocked 58005 200 The {behavior} amount must be equal to or less than {minNum} 58006 200 Service unavailable for token {0}. 58007 200 Assets interface is currently unavailable. Try again later 58008 200 You do not have assets in this currency. 58009 200 Crypto pair doesn't exist 58010 200 Chain {chain} isn't supported 58011 200 Due to local laws and regulations, our services are unavailable to unverified users in {region}. Please verify your account. 58012 200 Due to local laws and regulations, OKX does not support asset transfers to unverified users in {region}. Please make sure your recipient has a verified account. 58013 200 Withdrawals not supported yet, contact customer support for details 58014 200 Deposits not supported yet, contact customer support for details 58015 200 Transfers not supported yet, contact customer support for details 58016 200 The API can only be accessed and used by the trading team's main account 58100 200 The trading product triggers risk control, and the platform has suspended the fund transfer-out function with related users. Please wait patiently. 58101 200 Transfer suspended 58102 429 Rate limit reached. Please refer to API docs and throttle requests accordingly. 58103 200 This account transfer function is temporarily unavailable. Please contact customer service for details. 58104 200 Since your P2P transaction is abnormal, you are restricted from making fund transfers. Please contact customer support to remove the restriction. 58105 200 Since your P2P transaction is abnormal, you are restricted from making fund transfers. Please transfer funds on our website or app to complete identity verification. 58106 200 USD verification failed. 58107 200 Crypto verification failed. 58110 200 Transfers are suspended due to market risk control triggered by your {businessType} {instFamily} trades or positions. Please try again in a few minutes. Contact customer support if further assistance is needed. 58111 200 Fund transfers are unavailable while perpetual contracts are charging funding fees. Try again later. 58112 200 Transfer failed. Contact customer support for assistance 58113 200 Unable to transfer this crypto 58114 400 Transfer amount must be greater than 0 58115 200 Sub-account does not exist. 58116 200 Transfer exceeds the available amount. 58117 200 Transfer failed. Resolve any negative assets before transferring again 58119 200 {0} Sub-account has no permission to transfer out, please set first. 58120 200 Transfers are currently unavailable. Try again later 58121 200 This transfer will result in a high-risk level of your position, which may lead to forced liquidation. You need to re-adjust the transfer amount to make sure the position is at a safe level before proceeding with the transfer. 58122 200 A portion of your spot is being used for Delta offset between positions. If the transfer amount exceeds the available amount, it may affect current spot-derivatives risk offset structure, which will result in an increased Maintenance Margin Requirement (MMR) rate. Please be aware of your risk level. 58123 200 The From parameter cannot be the same as the To parameter. 58124 200 Your transfer is being processed, transfer id:{trId}. Please check the latest state of your transfer from the endpoint (GET /api/v5/asset/transfer-state) 58125 200 Non-tradable assets can only be transferred from sub-accounts to main accounts 58126 200 Non-tradable assets can only be transferred between funding accounts 58127 200 Main account API key does not support current transfer 'type' parameter. Please refer to the API documentation. 58128 200 Sub-account API key does not support current transfer 'type' parameter. Please refer to the API documentation. 58129 200 {param} is incorrect or {param} does not match with 'type' 58131 200 For compliance, we're unable to provide services to unverified users. Verify your identity to make a transfer. 58132 200 For compliance, we're unable to provide services to users with Basic verification (Level 1). Complete Advanced verification (Level 2) to make a transfer. 58200 200 Withdrawal from {0} to {1} is currently not supported for this currency. 58201 200 Withdrawal amount exceeds daily withdrawal limit. 58202 200 The minimum withdrawal amount for NEO is 1, and the amount must be an integer. 58203 200 Please add a withdrawal address. 58204 200 Withdrawal suspended due to your account activity triggering risk control. Please contact customer support for assistance. 58205 200 Withdrawal amount exceeds the upper limit. 58206 200 Withdrawal amount is less than the lower limit. 58207 200 Withdrawal address isn't on the verified address list. (The format for withdrawal addresses with a label is “address:label”.) 58208 200 Withdrawal failed. Please link your email. 58209 200 Sub-accounts don't support withdrawals or deposits. Please use your main account instead 58210 200 Withdrawal fee exceeds the upper limit. 58211 200 Withdrawal fee is lower than the lower limit (withdrawal endpoint: incorrect fee). 58212 200 Withdrawal fee must be {0}% of the withdrawal amount 58213 200 The internal transfer address is illegal. It must be an email, phone number, or account name 58214 200 Withdrawals suspended due to {chainName} maintenance 58215 200 Withdrawal ID does not exist. 58216 200 Operation not allowed. 58217 200 Withdrawals are temporarily suspended for your account due to a risk detected in your withdrawal address. Contact customer support for assistance 58218 200 The internal withdrawal failed. Please check the parameters toAddr and areaCode. 58219 200 You cannot withdraw crypto within 24 hours after changing your mobile number, email address, or Google Authenticator. 58220 200 Withdrawal request already canceled. 58221 200 The toAddr parameter format is incorrect, withdrawal address needs labels. The format should be "address:label". 58222 200 Invalid withdrawal address 58223 200 This is a contract address with higher withdrawal fees 58224 200 This crypto currently doesn't support on-chain withdrawals to OKX addresses. Withdraw through internal transfers instead 58225 200 Asset transfers to unverified users in {region} are not supported due to local laws and regulations. 58226 200 {chainName} is delisted and not available for crypto withdrawal. 58227 200 Withdrawal of non-tradable assets can be withdrawn all at once only 58228 200 Withdrawal of non-tradable assets requires that the API key must be bound to an IP 58229 200 Insufficient funding account balance to pay fees {fee} USDT 58230 200 According to the OKX compliance policy, you will need to complete your identity verification (Level 1) in order to withdraw 58231 200 The recipient has not completed personal info verification (Level 1) and cannot receive your transfer 58232 200 You’ve reached the personal information verification (L1) withdrawal limit, complete photo verification (L2) to increase the withdrawal limit 58233 200 For compliance, we're unable to provide services to unverified users. Verify your identity to withdraw. 58234 200 For compliance, the recipient can't receive your transfer yet. They'll need to verify their identity to receive your transfer. 58235 200 For compliance, we're unable to provide services to users with Basic verification (Level 1). Complete Advanced verification (Level 2) to withdraw. 58236 200 For compliance, a recipient with Basic verification (Level 1) is unable to receive your transfer. They'll need to complete Advanced verification (Level 2) to receive it. 58237 200 According to local laws and regulations, please provide accurate recipient information (rcvrInfo). For the exchange address, please also provide exchange information and recipient identity information ({consientParameters}). 58238 200 Incomplete info. The info of the exchange and the recipient are required if you're withdrawing to an exchange platform. 58240 200 For security and compliance purposes, please complete the identity verification process to use our services. If you prefer not to verify, contact customer support for next steps. We're committed to ensuring a safe platform for users and appreciate your understanding. 58241 200 Due to local compliance requirements, internal withdrawal is unavailable 58242 200 The recipient can't receive your transfer due to their local compliance requirements 58243 200 Your recipient can't receive your transfer as they haven't made a cash deposit yet 58244 200 Make a cash deposit to proceed 58248 200 Due to local regulations, API withdrawal isn't allowed. Withdraw using OKX app or web. 58249 200 API withdrawal for this currency is currently unavailable. Try withdrawing via our app or website. 58300 200 Deposit-address count exceeds the limit. 58301 200 Deposit-address not exist. 58302 200 Deposit-address needs tag. 58303 200 Deposit for chain {chain} is currently unavailable 58304 200 Failed to create invoice. 58305 200 Unable to retrieve deposit address, please complete identity verification and generate deposit address first. 58306 200 According to the OKX compliance policy, you will need to complete your identity verification (Level 1) in order to deposit 58307 200 You've reached the personal information verification (L1) deposit limit, the excess amount has been frozen, complete photo verification (L2) to increase the deposit limit 58308 200 For compliance, we're unable to provide services to unverified users. Verify your identity to deposit. 58309 200 For compliance, we're unable to provide services to users with Basic verification (Level 1). Complete Advanced verification (Level 2) to deposit. 58310 200 Unable to create new deposit address, try again later 58350 200 Insufficient balance. 58351 200 Invoice expired. 58352 200 Invalid invoice. 58353 200 Deposit amount must be within limits. 58354 200 You have reached the daily limit of 10,000 invoices. 58355 200 Permission denied. Please contact your account manager. 58356 200 The accounts of the same node do not support the Lightning network deposit or withdrawal. 58358 200 The fromCcy parameter cannot be the same as the toCcy parameter. 58370 200 You have exceeded the daily limit of small assets conversion. 58373 200 The minimum {ccy} conversion amount is {amount} 58374 200 Small assets should be less than the maximum limit {exchangeOKBLimitMax} {currency}. 58375 200 Small assets should be more than the minimum limit {exchangeOKBLimitMin} {currency}. ACCOUNT Error Code from 59000 to 59999 Error Code HTTP Status Code Error Message 59000 200 Settings failed. Close any open positions or orders before modifying settings. 59001 200 Switching unavailable as you have borrowings. 59002 200 Sub-account settings failed. Close any open positions, orders, or trading bots before modifying settings. 59004 200 Only IDs with the same instrument type are supported 59005 200 When margin is manually transferred in isolated mode, the value of the asset intially allocated to the position must be greater than 10,000 USDT. 59006 200 This feature is unavailable and will go offline soon. 59101 200 Leverage can't be modified. Please cancel all pending isolated margin orders before adjusting the leverage. 59102 200 Leverage exceeds the maximum limit. Please lower the leverage. 59103 200 Account margin is insufficient and leverage is too low. Please increase the leverage. 59104 200 The borrowed position has exceeded the maximum position of this leverage. Please lower the leverage. 59105 400 Leverage can't be less than {0}. Please increase the leverage. 59106 200 The max available margin corresponding to your order tier is {0}. Please adjust your margin and place a new order. 59107 200 Leverage can't be modified. Please cancel all pending cross-margin orders before adjusting the leverage. 59108 200 Your account leverage is too low and has insufficient margins. Please increase the leverage. 59109 200 Account equity less than the required margin amount after adjustment. Please adjust the leverage . 59110 200 The instrument type corresponding to this {0} does not support the tgtCcy parameter. 59111 200 Leverage query isn't supported in portfolio margin account mode 59112 200 You have isolated/cross pending orders. Please cancel them before adjusting your leverage 59113 200 According to local laws and regulations, margin trading service is not available in your region. If your citizenship is at a different region, please complete KYC2 verification. 59114 200 According to local laws and regulations, margin trading services are not available in your region 59125 200 {0} does not support the current operation. 59200 200 Insufficient account balance. 59201 200 Negative account balance. 59202 200 No access to max opening amount in cross positions for PM accounts. 59300 200 Margin call failed. Position does not exist. 59301 200 Margin adjustment failed for exceeding the max limit. 59302 200 Margin adjustment failed due to pending close order. Please cancel any pending close orders. 59303 200 Insufficient available margin, add margin or reduce the borrowing amount 59304 200 Insufficient equity for borrowing. Keep enough funds to pay interest for at least one day. 59305 200 Use VIP loan first to set the VIP loan priority 59306 200 Your borrowing amount exceeds the max limit 59307 200 You are not eligible for VIP loans 59308 200 Unable to repay VIP loan due to insufficient borrow limit 59309 200 Unable to repay an amount that exceeds the borrowed amount 59310 200 Your account does not support VIP loan 59311 200 Setup cannot continue. An outstanding VIP loan exists. 59312 200 {currency} does not support VIP loans 59313 200 Unable to repay. You haven't borrowed any ${ccy} (${ccyPair}) in Quick margin mode. 59314 200 The current user is not allowed to return the money because the order is not borrowed 59315 200 viploan is upgrade now. Wait for 10 minutes and try again 59316 200 The current user is not allowed to borrow coins because the currency is in the order in the currency borrowing application. 59317 200 The number of pending orders that are using VIP loan for a single currency cannot be more than {maxNumber} (orders) 59319 200 You can’t repay your loan order because your funds are in use. Make them available for full repayment. 59320 200 Borrow quota exceeded 59321 200 Borrowing isn't available in your region. 59322 200 This action is unavailable for this order. 59323 200 Borrowing amount is less than minimum 59324 200 No available lending offer 59325 200 Loan can only be repaid in full. 59326 200 Invalid lending amount. Lending amount has to be between {minLend} to {lendQuota}. 59327 200 You can’t renew your loan order automatically because the amount you’re renewing isn’t enough to cover your current liability. Repay manually to avoid high overdue interest. 59328 200 Lending APR has to be between {minRate} to {maxRate}. 59329 200 Liability reduction failed. Repay this order instead. 51152 200 Holdings already reached the limit. 59402 200 No passed instIDs are in a live state. Please verify instIDs separately. 59410 200 You can only borrow this crypto if it supports borrowing and borrowing is enabled. 59411 200 Manual borrowing failed. Your account's free margin is insufficient. 59412 200 Manual borrowing failed. The amount exceeds your borrowing limit. 59413 200 You didn't borrow this crypto. No repayment needed. 59414 200 Manual borrowing failed. The minimum borrowing limit is {param0}. 59500 200 Only the API key of the main account has permission. 59501 200 Each account can create up to 50 API keys 59502 200 This note name already exists. Enter a unique API key note name 59503 200 Each API key can bind up to 20 IP addresses 59504 200 Sub-accounts don't support withdrawals. Please use your main account for withdrawals. 59505 200 The passphrase format is incorrect. 59506 200 API key does not exist. 59507 200 The two accounts involved in a transfer must be 2 different sub-accounts under the same main account. 59508 200 The sub account of {0} is suspended. 59509 200 Account doesn't have permission to reset market maker protection (MMP) status. 59510 200 Sub-account does not exist 59512 200 Unable to set up permissions for ND broker subaccounts. By default, all ND subaccounts can transfer funds out. 59601 200 Subaccount name already exists. 59603 200 Maximum number of subaccounts reached. 59604 200 Only the API key of the main account can access this API. 59606 200 Failed to delete sub-account. Transfer all sub-account funds to your main account before deleting your sub-account. 59608 200 Only Broker accounts have permission to access this API. 59609 200 Broker already exists 59610 200 Broker does not exist 59611 200 Broker unverified 59612 200 Cannot convert time format 59613 200 No escrow relationship established with the subaccount. 59614 200 Managed subaccount does not support this operation. 59615 200 The time interval between the Begin Date and End Date cannot be greater than 180 days. 59616 200 The Begin Date cannot be later than the End Date. 59617 200 Sub-account created. Account level setup failed. 59618 200 Failed to create sub-account. 59619 200 This endpoint does not support ND sub accounts. Please use the dedicated endpoint supported for ND brokers. 59622 200 You're creating a sub-account for a non-existing or incorrect sub-account. Create a sub-account under the ND broker first or use the correct sub-account code. 59623 200 Couldn't delete the sub-account under the ND broker as the sub-account has one or more sub-accounts, which must be deleted first. 59648 200 Your modified spot-in-use amount is insufficient, which may lead to liquidation. Adjust the amount. 59649 200 Disabling spot-derivatives risk offset mode may increase the risk of liquidation. Adjust the size of your positions and ensure your margin-level status is safe. 59650 200 Switching your offset unit may increase the risk of liquidation. Adjust the size of your positions and ensure your margin-level status is safe. 59651 200 Enable spot-derivatives risk offset mode to set your spot-in-use amount. 59652 200 You can only set a spot-in-use amount for crypto that can be used as margin. BLOCK TRADING AND SPREAD ORDERBOOK Error Code from 70000 Error Code HTTP Status Code Error Message 70000 200 RFQ does not exist. 70001 200 Quote does not exist. 70002 200 Block trade does not exist. 70003 200 Public block trade does not exist. 70004 200 Invalid instrument {instId} 70005 200 The number of legs in RFQ cannot exceed maximum value. 70006 200 Does not meet the minimum asset requirement. 70007 200 Underlying index {instFamily} does not exist under instType {instType}. 70008 200 Operation failed under MMP status. 70009 200 Data must have at least 1 valid element. 70010 200 Timestamp parameters need to be in Unix timestamp format in milliseconds. 70011 200 Duplicate setting for instType {instType}. 70012 200 Duplicate setting for underlying/instId {instId} under the same instType {instType}. 70013 200 endTs needs to be bigger than or equal to beginTs. 70014 200 It's not allowed to have includeAll=True for all the instType. 70015 200 In order to trade this product, you need to complete advanced verification 70016 200 Please specify your instrument settings for at least one instType. 70100 200 Duplicate instruments in legs array. 70101 200 Duplicate clRfqId 70102 200 No counterparties specified 70103 200 Invalid counterparty 70105 200 The total value of non all-SPOT RFQs should be greater than the min notional value {nonSpotMinNotional} 70106 200 The trading amount does not meet the min tradable amount requirement 70107 200 The number of counterparties cannot exceed maximum value. 70108 200 The total value of all-spot RFQs should be greater than the min notional value {spotMinNotional} 70109 200 Counterparties for selected instruments are currently unavailable. 70200 200 The RFQ with {rfqState} status cannot be canceled 70203 200 Cancellation failed as rfq count exceeds the limit {rfqLimit}. 70207 200 Cancellation failed as you do not have any active RFQs. 70208 200 Cancellation failed as service is unavailable now, please try again later. 70301 200 Duplicate clQuoteId. 70303 200 The RFQ with {rfqState} status cannot be quoted. 70304 200 Price should be an integer multiple of the tick size. 70305 200 Bid price cannot be higher than offer price 70306 200 The legs of quote do not match the legs of {rfqId} 70307 200 Size should be in integral multiples of the lot size. 70308 200 Quote to your own RFQ is not allowed. 70309 200 Quote to the same RFQ with the same side is not allowed. 70310 200 Quoted price of instId {instId} cannot exceed your preset price limit. 70400 200 The Quote with {quoteState} status cannot be canceled 70408 200 Cancellation failed as quote count exceeds the limit {quoteLimit}. 70409 200 Cancellation failed as you do not have any active Quotes. 70501 200 RFQ {rfqId} is not quoted by {quoteId} 70502 200 The legs do not match the legs of {rfqId} 70503 200 Leg sizes specified are under the minimum block size required by Jupiter. 70504 200 Execution failed as the RFQ status is {rfqState}. 70505 200 Execution failed as the Quote status is {quoteState}. 70506 200 Leg sizes specified do not have the same ratios as the whole RFQ. 70507 200 Partial execution was attempted but allowPartialExecution of the RFQ is not enabled. 70508 200 No instrument settings available. 70509 200 Execution failed: counterparty error 70511 200 Execution is being processed 75001 200 Trade ID does not exist 75002 200 {sprdId} : unable to place new orders or modify existing orders at the moment 75003 200 Invalid price 56000 200 Block trade does not exist. 56001 200 The number of multi-legs cannot exceed {legLimit}. 56002 200 The number of multi-legs does not match with the verified one. 56003 200 Duplicate clBlockTdId. 56004 200 Trade with yourself is not allowed. 56005 200 clBlockTdId should be the same as the verified one. 56006 200 The role should be different from the verified one. 56007 200 Leg no.{legNo} does not match with the verified one. 56008 200 Duplicate instruments in legs array. COPY TRADING Error Code from 59200 to 59300 Error Code HTTP Status Code Error Message 59128 200 As a lead trader, you can't lead trades in {instrument} with leverage higher than {num}× 59206 200 The lead trader doesn't have any more vacancies for copy traders 59216 200 The position doesn't exist. Please try again 59218 200 Closing all positions at market price... 59256 200 To switch to One-way mode, lower the number of traders you copy to 1 59247 200 High leverage causes current position to exceed the maximum position size limit under this leverage. Adjust the leverage. 59260 200 You are not a spot lead trader yet. Complete the application on our website or app first. 59262 200 You aren't a contract lead trader yet. Complete the application first. 59641 200 Can't switch account mode as you have fixed loan borrowings. 59642 200 Lead and copy traders can only use spot or spot and futures modes 59643 200 Couldn’t switch account modes as you’re currently copying spot trades 59263 200 Only traders on the allowlist can use copy trading. ND brokers can reach out to BD for help. 59264 200 Spot copy trading isn't supported 59267 200 Cancellation failed as you aren't copying this trader 59268 200 You can't copy trades with instId that hasn't been selected by the lead trader 59269 200 This contract lead trader doesn't exist 59270 200 Maximum total amount (copyTotalAmt) can't be lower than amount per order (copyAmt) when using fixed amount 59273 200 You aren't a contract copy trader yet. Start by coping a contract trader. 59275 200 You can't copy trade as you're applying to become a lead trader 59276 200 You can't copy this lead trader as they've applied to stop leading trades 59277 200 You can't copy this lead trader as they don't have any copy trader vacancies 59278 200 Your request to stop copy trading is being processed. Try again later. 59279 200 You've already copied this trader 59280 200 You can't modify copy trade settings as you aren't copying this trader 59282 200 Only ND sub-accounts under ND brokers whose main accounts are on the allowlist support this endpoint. Reach out to BD for help. 59283 200 Your account isn’t currently using spot and futures mode 59284 200 You've reached the monthly limit of {param0} ratio edits 59286 200 You can't become a futures lead trader when using spot mode 59287 200 Profit sharing ratio should be between {param0} and {param1} 59288 200 You're leading trades but your account is in portfolio margin mode. Switch to spot and futures mode or multiple-currency margin mode and try again 59130 200 The highest take profit level is {num}%. Enter a smaller number and try again. 59258 200 Action not supported for lead traders 59259 200 Enter a multiplier value that's within the valid range 59285 200 You haven't led or copied any trades yet TRADING BOT Error Code from 55100 to 55999 Error Code HTTP Status Code Error Message 55100 200 Take profit % should be within the range of {parameter1}-{parameter2} 55101 200 Stop loss % should be within the range of {parameter1}-{parameter2} 55102 200 Take profit % should be greater than the current bot’s PnL% 55103 200 Stop loss % should be less than the current bot’s PnL% 55104 200 Only futures grid supports take profit or stop loss based on profit percentage 55105 200 Increasing positions is not allowed under current status 55106 200 Increased amount should be within the range of {parameter1} - {parameter2} 55111 200 This signal name is in use, please try a new name 55112 200 This signal does not exist 55113 200 Create signal strategies with leverage greater than the maximum leverage of the instruments WEBSOCKET PUBLIC Error Code from 60000 to 64002 GENERAL CLASS Error Code Error Message 60004 Invalid timestamp 60005 Invalid apiKey 60006 Timestamp request expired 60007 Invalid sign 60008 The current WebSocket endpoint does not support subscribing to {0} channels. Please check the WebSocket URL 60009 Login failure 60011 Please log in 60012 Invalid request 60013 Invalid args 60014 Requests too frequent 60018 Wrong URL or {0} doesn't exist. Please use the correct URL, channel and parameters referring to API document. 60019 Invalid op: {op} 60020 APIKey subscription amount exceeds the limit {0}. 60021 This operation does not support multiple accounts login. 60022 Bulk login partially succeeded 60023 Bulk login requests too frequent 60024 Wrong passphrase 60025 token subscription amount exceeds the limit {0} 60026 Batch login by APIKey and token simultaneously is not supported. 60027 Parameter {0} can not be empty. 60028 The current operation is not supported by this URL. Please use the correct WebSocket URL for the operation. 60029 Only users who are VIP5 and above in trading fee tier are allowed to subscribe to this channel. 60030 Only users who are VIP4 and above in trading fee tier are allowed to subscribe to books50-l2-tbt channel. 60031 The WebSocket endpoint does not allow multiple or repeated logins. 60032 API key doesn't exist. 63999 Login failed due to internal error. Please try again later. 64000 Subscription parameter uly is unavailable anymore, please replace uly with instFamily. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url. 64001 This channel has been migrated to the '/business' URL. Please subscribe using the new URL. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url. 64002 This channel is not supported by "/business" URL. Please use "/private" URL(for private channels), or "/public" URL(for public channels). More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url. 64003 Your trading fee tier doesn't meet the requirement to access this channel CLOSE FRAME Status Code Reason Text 1009 Request message exceeds the maximum frame length 4001 Login Failed 4002 Invalid Request 4003 APIKey subscription amount exceeds the limit 100 4004 No data received in 30s 4005 Buffer is full, cannot write data 4006 Abnormal disconnection 4007 API key has been updated or deleted. Please reconnect. 4008 The number of subscribed channels exceeds the maximum limit. 4009 The number of subscription channels for this connection exceeds the limit Disclaimer: The availability of products and services listed on this page will depend on your region. Please see your applicable Terms of Service for more detail. HTTP Python