Upcoming Changes
2026-08-20
WebSocket Orders Channel: Push Behavior Adjustment
To help clients more clearly determine the final status of post-only new orders (including mmp_and_post_only) and rpi new orders β and to avoid scenarios where an order is still canceled after the client has already received a state: live event β OKX has adjusted the state: live event behavior for post-only and rpi orders in the Order channel.
Impact details
- The
state: liveevent is pushed only after the order has successfully entered the order book, instead of immediately upon order receipt (a delay of approximately 1 ms). - In failed order placement scenarios (price crosses the BBO and is canceled), the
state: liveupdate is omitted entirely β only astate: canceledupdate is pushed.
| Scenario | Before | After |
|---|---|---|
post-only order placement failure(price crosses the BBO and is canceled) |
state: live β state: canceled |
Only state: canceled (no state: live) |
post-only order placed successfully |
state: live pushed immediately |
state: live (delayed ~1 ms) |
post-only order placed successfully,then filled by one taker order |
state: live β state: filled |
state: live (delayed ~1 ms) β state: filled |
post-only order placed successfully,then filled by multiple partial fills |
state: live β state: partially_filled β state: filled |
state: live (delayed ~1 ms) β state: partially_filled β state: filled |
post-only order with reduceOnly: true,size modified |
state: live β state: live (amendSource: 4, amendResult: 0) |
state: live (amendSource: 4, amendResult: 0) β state: live |
rpi order, rpiPxRound: false,order placement failure (canceled due to not meeting the price spacing rule) |
N/A | Only state: canceled (no state: live) |
rpi order, rpiPxRound: true,and price is modified |
N/A | state: live (amendSource: 6, amendResult: 0) β state: live |
Effective date
- For
rpiorders (includingelporders, which will be deprecated): already live β demo trading β July 23, 2026; production β July 28, 2026. - For
post_onlyandmmp_and_post_onlyorders: demo trading β August 10, 2026 (live); production β August 20, 2026 (live).
Scope of impact
The order types affected are: post_only, mmp_and_post_only, and rpi (Retail Price Improvement).
The push behavior for other order types β such as limit (regular limit orders), market (market orders), ioc, and fok β remains unchanged.
2026-08-20
Affiliate API documentation clarification
The Affiliate API documentation on the EEA site has been updated to clarify the data coverage and metric definitions under the CPS and TVB incentive models.
Incentive model and data scope
- Added field coverage guidance and an endpoint-to-model mapping for the four CPS endpoints and five TVB endpoints.
- Added a
Data scopecolumn to the response parameter tables of these nine endpoints to distinguishCPS only,TVB only, andCPS+TVB bothmetrics.
Metric definitions
- Clarified the definition of
firstTraderCntunder CPS and its difference fromvalidFirstTraderCntunder TVB. - Clarified the definitions of
traderCntandvolunder CPS. CPSvolis general trading volume, not valid or eligible trading volume. - Clarified that
tradingVolBonusmay include amounts that are pending or suspended and may not equal the amount paid.
TVB endpoint descriptions
- Added TVB incentive model coverage descriptions to the five TVB endpoints.
2026-08-18
RPI maker minimum notional amount
RPI maker orders (ordType: rpi or elp) are now subject to a minimum notional amount. Orders below the threshold are rejected with error code 54051. Effective in production from August 18, 2026.
Minimum thresholds by product type
| Product type | Minimum notional amount |
|---|---|
| SWAP / FUTURES | 10,000 USD |
| SPOT | 1,000 USD |
| EVENTS | Not applicable |
This rule is independent of the existing per-instrument minSz check β RPI orders must satisfy both.
Place order
An RPI order whose notional amount is below the applicable threshold is rejected with 54051. In batch requests, each sub-order is validated independently β a failing sub-order returns its own sCode: 54051; other sub-orders are unaffected.
Non-RPI orders (including taker orders with rpiTakerAccess: true) are not subject to this rule.
Amend order
- Amends that include
newSz(with or withoutnewPx) are re-validated against the minimum notional amount using the amended quantity. If the post-amend notional amount falls below the threshold, the amend is rejected with54051; the original order remains active. - Amends that modify only
newPx(nonewSz) are not re-validated against this rule.
In batch amend requests, each sub-order is validated independently β same behavior as single amend.
Existing orders
RPI orders already on the book before this rule takes effect are not affected. Validation applies only to new place and amend requests submitted after go-live.
Error code
New error code introduced:
| Error Code | Message |
|---|---|
| 54051 | RPI order rejected. The order value is below the minimum required for RPI orders ({param0} USD). |
Applies to all REST and WebSocket trade operations:
- 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
2026-08-14
Affiliate REST API alignment with the EEA affiliate program
The Affiliate endpoints on the EEA site have been updated for the EEA affiliate program.
Remove endpoints
The following endpoints are no longer offered on the EEA site and have been removed from the documentation:
- Get co-inviter link list
- Get sub-affiliate list
Settlement currency change
The unit of all amount fields changes from
USDTtoUSDCon the following CPS endpoints:
Regional commission eligibility
- Derivative commission from OKX users in the EEA is not applicable due to regulatory requirements. Spot and derivative commissions from eligible regions remain fully applicable.
2026-08-11
RPI maker spacing and visibility rule update
The RPI maker spacing rule now references only the first visible opposite-side RPI; hidden RPI are excluded from its cross and price-level checks. RPI visibility also governs the tradeable RPI depth shown on the books-rpi order book. No endpoint, parameter, enum value, or error code changes.
Spacing rule
- The cross and price-level checks reference only the first visible opposite-side RPI; hidden RPI are excluded
- With no visible opposite-side RPI: the cross check references the opposite-side organic best bid/offer, and the price-level check passes
- The bps check references the opposite-side organic best bid/offer, never RPI (unchanged)
rpiPxRoundrounds to the next level beyond the first visible opposite-side RPI; hidden RPI are excluded
Visibility
- An RPI that crosses the opposite-side organic best bid/offer is hidden
- A bid RPI and an ask RPI that cross each other inside the organic spread are both hidden
Amend
- Validated against the order-book snapshot at the moment the amend command reaches the matching engine
- The order being amended is treated as still present in the book
Affects RPI maker order placement and amendment (ordType: rpi), and the books-rpi order book:
- POST / Place order
- POST / Amend order
- WS / Place order
- WS / Amend order
- WS / Order book channel
- GET / RPI order book
2026-08-06
Get historical market data maximum query range reduced
The maximum query range on Get historical market data has been reduced from 20 to 10.
| Parameter | Type | Description |
|---|---|---|
| begin | String | Maximum range: 10 days for daily, 10 months for monthly (previously 20 days / 20 months). |
2026-08-03
Affiliate invitee endpoints add UID and join-time filters and rolling-window volume
- New request parameters added to Get invitee list:
| Parameter | Type | Required | Description |
|---|---|---|---|
| uid | String | No | External user UIDs for exact match. Single UID or up to 100 UIDs, comma-separated. Unknown UIDs are silently skipped; if none resolve, an empty page is returned. |
| joinTimeBegin | String | Conditional | Filter lower bound on joinTime, Unix timestamp in millisecond format, inclusive. Required together with joinTimeEnd; span up to 90 days, not earlier than 180 days ago. |
| joinTimeEnd | String | Conditional | Filter upper bound on joinTime, Unix timestamp in millisecond format, inclusive. Required together with joinTimeBegin. |
- New request parameter
periodTypeand new response fieldvolPeriodadded to Get the invitee's detail:
| Parameter | Type | Description |
|---|---|---|
| periodType (request) | String | Stats window for volPeriod: last_7d, last_30d, this_month, last_month, total, today, this_week. When omitted, volPeriod is not returned. |
| volPeriod (response) | String | Trading volume within the selected periodType window, unit in USDT. Only returned when periodType is supplied. 0 if the user has not traded in the window. |
2026-07-28
Rebranding ELP to RPI (Retail Price Improvement) Program
OKX is rebranding Enhanced Liquidity Program (ELP) to Retail Price Improvement (RPI). This includes a new consolidated RPI order book (books-rpi) over WebSocket and REST, a renamed rpi maker order type (replacing elp), an expanded rpiTakerAccess order parameter (replacing isElpTakerAccess), a new rpiPxRound parameter for the RPI maker spacing rule, and renamed rpi/rpiMaker account fields.
ELP name deprecation deadline: October 31, 2026
OKX will run the ELP and RPI names in parallel until this date, in two distinct ways:
- Renamed fields β both accepted; the RPI-named field wins when a request or response carries both:
isElpTakerAccessβrpiTakerAccesselpβrpielpMakerβrpiMaker
- Renamed values β mutually exclusive; send or expect one or the other, not both:
ordType: elpβordType: rpibooks-elpβbooks-rpi
Existing integrations continue to operate without changes. The ELP names will be retired after the sunset date above β migrate every integration to the RPI names before then.
New consolidated order book: books-rpi (WS + REST)
- Added
books-rpi, consolidating organic and RPI liquidity into a single depth stream β available as a public WebSocket channel (/ws/v5/public, 400 depth levels, full snapshot + incremental updates every 100 ms) and a REST endpoint (GET /api/v5/market/books-rpi, refreshed every 200 ms server-side). Nochecksum; WS sequencing relies onseqId/prevSeqId. Supersedesbooks-elp(see migration note above).
Each asks/bids element is [price, totalQty, nonRpiQty, count] β totalQty is the total depth at that price level, nonRpiQty is the organic-only portion, count is the aggregated order count at that level.
REST request: instId (required), sz (depth per side, max 400, default 1).
Taker parameter: rpiTakerAccess (replaces isElpTakerAccess)
rpiTakerAccessrenames and expandsisElpTakerAccessto apply to all standard order types (limit,market,fok,ioc; previouslyioconly) and to be settable on amend.isElpTakerAccessremains accepted as an alias until the sunset date (see migration note above).- Error code
54045(previously returned when a non-iocorder attempted to take RPI liquidity) is retired β unreachable now thatrpiTakerAccessis valid on all order types.
Applies to place / amend, REST + WS:
- 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| rpiTakerAccess | Boolean | No | Default false.When true, the order can access RPI liquidity, for all standard order types (previously ioc only).A speedbump mechanism applies to all ordType, including post_only, on both placement and amend when rpiTakerAccess is true.Not inherited on amend β must be re-specified on each amend request (omitted = false for that amend). |
Maker order type: rpi (replaces elp)
- To place an RPI maker order, set
ordTypetorpiinstead ofelp.elpremains accepted until the sunset date (see migration note above) βordTypetakes a single value, so send one or the other, not both.
Applies to place, REST + WS:
Maker parameter: rpiPxRound
rpiPxRoundis a new parameter for the RPI maker spacing rule (see below). Effective only on RPI maker orders (ordType: rpi); silently ignored on non-RPI orders and onOPTION/EVENTS.
Applies to place / amend, REST + WS (same interfaces as rpiTakerAccess above).
| Parameter | Type | Required | Description |
|---|---|---|---|
| rpiPxRound | Boolean | No | Default false. When true, a price that violates the spacing rule is auto-rounded outward to the nearest placeable, non-crossing level instead of being rejected. |
- Added a new
amendSourcevalue6on theordersWS private channel: order price adjusted (rounded) by the system to satisfy the RPI maker spacing rule, triggered byrpiPxRound.
RPI maker spacing rule
RPI maker orders are subject to a spacing rule (rpiMinLevel / rpiMinPxBand below). An order that violates it is rejected unless rpiPxRound is true, in which case the price is auto-rounded to the nearest compliant level instead (see rpiPxRound above).
- Added new response parameters
rpiMinLevelandrpiMinPxBandto expose the per-instrument spacing thresholds.
| Parameter | Type | Description |
|---|---|---|
| rpiMinLevel | String | Minimum spacing between the RPI bid and RPI ask, in organic price levels. Default 4; 0 for Event Contracts. |
| rpiMinPxBand | String | Minimum distance from the opposite-side organic best price required to satisfy the spacing rule, in basis points (bps), e.g. 20. |
RPI maker permission field: rpi (replaces elp)
- Added new response parameter
rpito indicate RPI maker permission.elpremains accepted as an alias until the sunset date (see migration note above).
| Parameter | Type | Description |
|---|---|---|
| rpi | String | RPI maker permission.0: not enabled for this instrument1: enabled, but the current user has no permission to place RPI orders2: enabled and permittedA 1/2 value does not imply RPI liquidity is present. |
RPI maker fee rate field: rpiMaker (replaces elpMaker)
- Added new response parameter
rpiMakerto indicate the RPI maker effective fee rate.elpMakerremains accepted as an alias until the sunset date (see migration note above).
| Parameter | Type | Description |
|---|---|---|
| rpiMaker | String | RPI maker effective fee rate. Returns "" if RPI is not applicable to the instrument. |
Trade source field: source
- Response field
sourcevalue1onGET /api/v5/market/tradesis now described as RPI order (previously ELP order). The returned value1itself is unchanged β only the description text is updated.
Error code changes
Error messages updated from ELP to RPI:
| Error Code | Previous Message | Updated Message |
|---|---|---|
| 54039 | ELP orders can't be reduce-only orders. | RPI orders can't be reduce-only orders. |
| 54040 | ELP orders can't be used with TP/SL settings. | RPI orders can't be used with TP/SL settings. |
| 54041 | ELP orders aren't supported for {param0}. | RPI orders aren't supported for {param0}. |
| 54042 | You don't have permission to place ELP orders for {param0}. | You don't have permission to place RPI orders for {param0}. |
| 54043 | You can only place up to {param1} ELP orders for {param0}. | You can only place up to {param1} RPI orders for {param0}. |
| 54044 | ELP is not enabled for {param0}. You can't place orders that take ELP liquidity of it. | RPI is not enabled for {param0}. You can't place orders that take RPI liquidity of it. |
| 54046 | You can't place orders to take ELP liquidity. | You can't place orders to take RPI liquidity. |
| 54049 | API users can't place orders that take ELP liquidity now because system is busy. To proceed, set isElpTakerAccess:false. | API users can't place orders that take RPI liquidity now because system is busy. To proceed, set rpiTakerAccess:false. |
Deprecated error code:
| Error Code | Message | Reason |
|---|---|---|
| 54045 | OpenAPI users can only place IOC orders that take ELP liquidity. | Retired β rpiTakerAccess now applies to all order types, not IOC-only. |
2026-07-27
TVB (Trading Volume Bonus) affiliate breakdown, invitee and link endpoints
Four new Affiliate REST API endpoints under /api/v5/affiliate/tvb/* extend Trading Volume Bonus (TVB) reporting beyond the aggregated performance summary β a per-fee-tier bonus breakdown, a paginated invitee list, a single-invitee detail lookup, and a per-link performance list. All amounts are settled in USDC.
Add new endpoints
- Added an endpoint decomposing the affiliate's total TVB by the invitee's trading fee tier for a specified time period.
- Added an endpoint returning a paginated list of TVB invitees β identity, fee tier, and TVB trading volume for a stats window.
- Added an endpoint returning a single invitee's TVB profile looked up by UID.
- Added an endpoint listing the affiliate's TVB invite links, each carrying that link's TVB performance.
2026-07-20
TVB (Trading Volume Bonus) affiliate performance endpoint
A new Affiliate REST API endpoint under /api/v5/affiliate/tvb/* reports Trading Volume Bonus (TVB) performance β accrued bonus, valid and eligible trading volume, valid/eligible trader and invitee counts, deposits, first-time trader/depositor counts, and the affiliate bonus multiplier over a selectable stats window. Bonus is settled in USDC.
Add new endpoint
- Added a new endpoint returning aggregated TVB performance metrics for a specified time period (
periodType, or a custombegin/endwindow of 1 to 90 days).
2026-07-06
Affiliate REST API expansion
The following Affiliate endpoints, already available on the Global site, are now live on the EEA site. The invitee's detail endpoint also gains two new response parameters and an updated rate limit.
Add new endpoint
- The following new endpoints are added under Affiliate:
Add new response parameter
- Added new response parameters
wdAmt,totalVolto the following endpoint:
| Parameter | Type | Description |
|---|---|---|
| wdAmt | String | Accumulated amount of withdrawal in USDT. If user has not withdrawn, 0 will be returned. |
| totalVol | String | Lifetime accumulated trading volume in USDT. If user has not traded, 0 will be returned. |
Rate limit change
- Rate limit of Get the invitee's detail has been changed from
20 requests per 2 secondsto3 requests per second.
2026-06-30
Price limit XYZ parameters for instruments
- Added new response parameters
initPxLmtPct,floatPxLmtPct,maxPxLmtPctto:
| Parameter | Type | Description |
|---|---|---|
| initPxLmtPct | String | Initial price-limit band applied during the first 10 minutes after contract listing, e.g. 0.05 represents 5%. Use GET /api/v5/public/price-limit for the computed price limits.Only applicable to SPOT/MARGIN/SWAP/FUTURES, returns "" for OPTION and EVENTS. |
| floatPxLmtPct | String | Floating price-limit band during normal trading, e.g. 0.03 represents 3%. Use GET /api/v5/public/price-limit for the computed price limits.Only applicable to SPOT/MARGIN/SWAP/FUTURES, returns "" for OPTION and EVENTS. |
| maxPxLmtPct | String | Maximum price-limit cap (hard ceiling on order-price deviation from the index price), e.g. 0.15 represents 15%. Use GET /api/v5/public/price-limit for the computed price limits.Only applicable to SPOT/MARGIN/SWAP/FUTURES, returns "" for OPTION and EVENTS. |
2026-06-23
Deprecation of checksum field in order book channels
To improve the efficiency and stability of the market data feed, the following order book channels have deprecated the checksum field in both snapshot and incremental updates. The checksum field is still present in snapshot and incremental updates, but its value is fixed to 0 and must no longer be used for integrity verification. Please use seqId/prevSeqId to verify the data continuity and accuracy.
- Deprecated the
checksumfield in both snapshot and incremental updates (the field remains in the push but its value is fixed to0).- WS / Order book channel
booksbooks-l2-tbtbooks50-l2-tbt
- WS / Order book channel
Note:
1. books5 and bbo-tbt channels do not carry a checksum field and are not affected by this change.
2. The WebSocket connection now fully enforces TLS (wss://), providing protection against eavesdropping and tampering, and ensuring data integrity. Together with rigorous validation of seqId and prevSeqId, it effectively prevents out-of-order messages, partial data loss, or malicious injection, providing integrity protection equivalent to or stronger than the original checksum mechanism.
2026-05-26
- Added new error code
| Error Code | HTTP Status Code | Error Message |
|---|---|---|
| 54092 | 200 | Action Required: Please accept the TradFi Perps disclaimer on Web or App by attempting to place a TradFi Perp trade via the frontend. Each account, including sub-accounts, must separately accept the disclaimer before API trading is enabled |
2026-05-07
New Endpoints
- The following new endpoint is added. Only applicable to the demo trading environment:
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | String | Yes | Direction of adjustment.increase: add to balancereduce: deduct from balanceOne direction per request; increase and reduce cannot be mixed. |
| adjustments | Array | Yes | List of currency adjustments. At least one item required. Duplicate currencies are not allowed. |
| > ccy | String | Yes | Currency. Supported values: BTC ETH USDT OKB |
| > amt | String | Yes | Adjustment amount. Must be non-negative. Decimal places must not exceed the precision defined for the currency. Increase limits per request: BTC: 1, ETH: 1, USDT: 5000, OKB: 100. Reduce has no per-request amount limit β only constrained by available balance β₯ 0. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| remainCnt | String | Remaining daily increase quota. Also returned for reduce requests, but reduce does not consume quota. |
| totalCnt | String | Total daily increase quota (default: 3). |
| details | Array | Per-currency operation details. |
| > ccy | String | Currency. |
| > amt | String | Adjustment amount applied. |
| > bal | String | Post-operation balance for this currency. |
Error Codes
| Error code | HTTP status code | Error message |
|---|---|---|
| 59691 | 200 | Daily increase limit reached {param0}. Please retry after UTC 0:00 or reset your demo account. |
| 59692 | 200 | Insufficient {param0} balance. Balance cannot go below zero after operation. |
| 59693 | 200 | {param0} transferable balance insufficient. Some funds are occupied by open orders or positions. Please cancel orders or close positions and try again. |
2026-05-06
- OKX is introducing customisable slippage tolerance for spot and spot margin market-side orders via OpenAPI and WebSocket.
- A new
post_onlyinstrument state is added forSWAPcontracts, restricting accepted order types to post-only limit orders.
Changes to Existing Endpoints
- New optional request parameter
slippagePctfor spot and spot margin market-side orders (wheretgtCcyis the received currency:base_ccyfor buy,quote_ccyfor sell):
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| slippagePct | String | No | Maximum acceptable slippage for spot and spot margin market-side orders, where tgtCcy is the received currency (base_ccy for buy, quote_ccy for sell).Range: 0 to 0.05 (0% to 5%, inclusive). Up to 2 decimal places of the percentage, e.g., 0.01 (1%) and 0.0123 (1.23%) are accepted; 0.01234 (1.234%) is rejected.If not specified or empty, defaults to 0.00%.Slippage cannot be modified on an existing order. Cancel and resubmit to change the slippage setting. Only applicable to SPOT and SPOT margin market orders. |
Error Codes
| Error code | HTTP status code | Error message |
|---|---|---|
| 54084 | 200 | Your slippage setting must be between 0% and 5% (inclusive). |
| 54085 | 200 | Your slippage percentage can't exceed 2 decimal places. |
- Response parameter
stateadds new enum valuepost_only. When a contract is inpost_only, only post-only limit orders are accepted (along with amend and cancel of existing post-only orders); market, IOC, FOK and normal limit orders are rejected. Only applicable toSWAP:
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| state | String | Instrument statuspost_only: only post-only orders are accepted; existing post-only orders can be amended and cancelled. Other order types (market, IOC, FOK, normal limit) are rejected. Only applicable to SWAP |
2026-04-14
OKX launches perpetual-style expiry futures (X-Perps)
- The following endpoints are now available to support X-Perps futures operations:
- Get positions
- Get positions history
- Get account and position risk
- Set position mode
- Increase/decrease margin
- Get leverage estimated info
- Positions channel
- Balance and position channel
- Position risk warning
- POST / Close position
- Get delivery/exercise history
- Get estimated delivery/exercise price
- Get open interest
- Get limit price
- Get mark price
- Get underlying
- GET / Index tickers
- GET / Index candlesticks
- GET / Index candlesticks history
- GET / Mark price candlesticks
- GET / Mark price candlesticks history
- GET / Index components
- Open interest channel
- Price limit channel
- Mark price channel
- Estimated delivery/exercise/settlement price channel
- Liquidation orders channel
- ADL warning channel
- Mark price candlesticks channel
- WS / Index tickers channel
- WS / Index candlesticks channel
2026-04-07
Trading Fee Tier Requirement Changes
- Channels that previously required VIP6/VIP5 or above are now accessible from VIP4 and above
- Error codes 60029 and 60030 have been deprecated and unified to error code 64003
- The following table shows the changes in VIP tier requirements for accessing various Open API features:
| Endpoint or Channel | Before | After (Current) | Error Code Change |
|---|---|---|---|
| SBE trades channel and books-l2-tbt channel | >= VIP6 | >= VIP4 | 64003 unchanged |
| JSON books-l2-tbt channel | >= VIP6 | >= VIP4 | 60029 β 64003 |
| JSON books50-l2-tbt channel | >= VIP5 | >= VIP4 | 60030 β 64003 |
| JSON fills channel | >= VIP6 | >= VIP4 | 60029 β 64003 |
Deprecate instId Request Parameter in WS Order Operation Channels
To reduce latency in WS order operations, the instId request parameter from the following order operation channels has been deprecated.
- Deprecate
instIdrequest parameter in the following channels:
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| instId | String | - | Instrument ID Deprecated, will be ignored |
Note: You can use the Get instruments endpoint to map instIdCode to instId.
KYC Level 2 Required for Placing Orders
OKX will require users to complete KYC Level 2 or above in order to place orders via WebSocket and REST API endpoints. Users who have not completed KYC Level 2 will receive error code 59113 when attempting to place orders. This requirement applies to live trading only β demo trading is not affected.
Affected Endpoints
| Endpoint or Channel | Description |
|---|---|
| WS / Place order | Place a single order |
| WS / Place multiple orders | Place orders in batch |
| POST / Place order | Place a single order |
| POST / Place multiple orders | Place orders in batch |
Error Code
| Error Code | Description |
|---|---|
| 59113 | KYC level 2 or above is required for placing orders |
Notes:
- Users must complete KYC Level 2 verification before placing orders via WebSocket / REST API endpoints
- This requirement applies to live trading only β demo trading is not affected
Bills Management Updates
Added new endpoint:
Added request parameter
type
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | String | No | Bill type Please refer to Get bill types for the list of available types |
2026-03-26
- Delisted
instIdrequest parameter from the following channels.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| instId | String | - | Instrument ID Delisted. Any value provided will be ignored. |
Note: Users can use the Get instruments interface to map instIdCode to instId.
2026-02-12
- Added new parameters
| Parameter | Type | Description |
|---|---|---|
| instCategory | String | The category of the instrumentβs base currency (the first part of the instrument ID). For example, for BTC-USDT-SWAP, the instCategory refers to the category of BTC. 1: Crypto |
2025-12-15
- Started to support spot margin.
2025-11-20
- Added new request parameter
instIdCode
| Request Parameter Name | Type | Required | Description |
|---|---|---|---|
| > instIdCode | Integer | Conditional | Instrument ID code. If both instId and instIdCode are provided, instIdCode takes precedence. |
| > instId | String | Conditional | Instrument ID Will be deprecated on March 2026. |
Note: You can use the Get instruments interface to map instIdCode to instId.
2025-08-27
Fiat buy/sell is supported.
2025-07-24
- Added
toAddrTypeparameter in the following endpoints:
| Parameter | Type | Required | Description |
|---|---|---|---|
| toAddrType | String | No | Address type1: wallet address, email, phone, or login account name2: UID (only applicable for dest=3) |
2025-07-08
Open API supports Unified USD Orderbook
For more details, please refer to Unified USD Orderbook FAQ
- Added new request parameter
| Parameter | Type | Required | Description |
|---|---|---|---|
| tradeQuoteCcy | String | No | The quote currency used for trading. Only applicable to SPOT. The default value is the quote currency of the instId, for example: for BTC-USD, the default is USD. |
- Added new response parameter
| Parameter | Type | Description |
|---|---|---|
| tradeQuoteCcyList | Array of strings | List of quote currencies available for trading, e.g. ["USD", "USDC"]. |
- Added new response parameter
| Parameter | Type | Description |
|---|---|---|
| tradeQuoteCcy | String | The quote currency used for trading. |
Trades channel adds seqId field
| Parameter | Type | Description |
|---|---|---|
| data | Array | Subscribed data |
| > seqId | Integer | Sequence ID of the current message. |
Note: The seqId may be the same for different trade updates that occur at the same time.
Fiat
Fiat deposits and withdrawals are supported.
2025-07-02
Added new endpoint
The request parameter has been updated as follows:
Before
| Parameter | Type | Required | Description |
|---|---|---|---|
| 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 |
After
| Parameter | Type | Required | Description |
|---|---|---|---|
| after | String | No | Pagination of data to return records earlier than the requested ts or billId, Unix timestamp format in milliseconds, e.g. 1597026383085 |
| before | String | No | Pagination of data to return records newer than the requested ts or billId, Unix timestamp format in milliseconds, e.g. 1597026383085 |
| pagingType | String | No | PagingType1: Timestamp of the bill record2: Bill ID of the bill recordThe default is 1 |
- Added new response parameter
| Parameter | Type | Description |
|---|---|---|
| notes | String | Notes |
2025-05-28
- Added endpoints. Bills details (since 2021) endpoints below have been released in production
2025-04-17
Added endpoints
Added new error codes
| Error code | Error Message |
|---|---|
| 59515 | You are currently not on the custody whitelist. Please contact customer service for assistance. |
| 59516 | Please create the Copper custody funding account first. |
| 59517 | Please create the Komainu custody funding account first. |
| 59518 | You canβt create a sub-account using the API; please use the app or web. |
| 59519 | You canβt use this function/feature while it's frozen, due to: {freezereason} |
2025-02-12
- Added new parameters
| Parameter | Type | Description |
|---|---|---|
| notionalUsdForBorrow | String | Notional value for Borrow in USDApplicable to Spot mode/Multi-currency margin/Portfolio margin |
| notionalUsdForSwap | String | Notional value of positions for Perpetual Futures in USDApplicable to Multi-currency margin/Portfolio margin |
| notionalUsdForFutures | String | Notional value of positions for Expiry Futures in USDApplicable to Multi-currency margin/Portfolio margin |
| notionalUsdForOption | String | Notional value of positions for Option in USDApplicable to Spot mode/Multi-currency margin/Portfolio margin |
2025-01-14
Withdrawal API adjustment for EEA entity users
Due to compliance requirements, EEA entity users need to pass in the field rcvrInfo when making on-chain/lightning withdrawal.
| Parameters | Type | Required | Description |
|---|---|---|---|
| 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 Typeexchange: Withdraw to exchange walletIf 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" |
| > 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. |
| > rcvrFirstName | String | Conditional | Receiver's first name, e.g. Bruce |
| > rcvrLastName | String | Conditional | Receiver's last name, e.g. Wayne |
Withdraw assets to the exchange wallet
If users withdraw assets to the exchange wallet, they need to provide recipient information.
- Users under the EEA entity need to pass in the following field information of the recipient (rcvrFirstName, rcvrLastName). For the exchange wallet belongs to business recipient,
rcvrFirstNamemay input the company name,rcvrLastNamemay input "N/A". The examples are as follows:
Withdraw assets to the private wallet
You can't withdraw to a private wallet via API. Please withdraw via our app or website instead.
Other API adjustment
- Added new response parameters
| Parameter | Type | Description |
|---|---|---|
| note | String | Withdrawal note |
- Added new enumerations
| Parameter | Type | Description |
|---|---|---|
| state | String | 17: Pending response from Travel Rule vendor |
Newly added error code
| Error code | Error Message |
|---|---|
| 58239 | You can't withdraw to a private wallet via API. Please withdraw via our app or website instead. |
2024-12-30
2024-09-19
- Added new response parameters
| Parameter | Type | Description |
|---|---|---|
| enableSpotBorrow | Boolean | Whether borrow is allowed or not in Spot modetrue: Enabledfalse: Disabled |
| spotBorrowAutoRepay | Boolean | Whether auto-repay is allowed or not in Spot modetrue: Enabledfalse: Disabled |
- Added new response parameters
| Parameter | Type | Description |
|---|---|---|
| ccy | String | Currency |
- Added new response parameters
| Parameter | Type | Description |
|---|---|---|
| isTradeBorrowMode | String | Whether borrowing currency automatically true false Only applicable to trigger order, trailing order and twap order |
2024-09-18
- Added new endpoints: