OKX Convert: What the Ten-Second Quote Actually Commits To
On a spot order book, the price you see is an offer you can hit until someone else does. Convert is different: it is a quote from a venue, valid for a stated number of milliseconds, and executing it is a separate request that carries the quote's identifier. Most of the confusion around Convert comes from reading it as a market order when it is closer to a request for quote.

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.
Key takeaways
- OKX Convert uses the Trading account balance, not the Funding account; a balance showing zero in Convert is usually a routing problem, not a missing balance.
- The conversion rate refreshes every ten seconds, and the API returns the quote's validity as ttlMs — the documented example is 10000 milliseconds — so the client should compute an expiry from quoteTime plus ttlMs rather than assume a fixed window.
- Convert trade requires a quoteId from estimate-quote. There is no resting order and no partial fill: the response state is fullyFilled or rejected.
- The amount received reflects the quoted price plus any applicable spread and current market conditions, so the executed fillPx can differ from the price the user first saw.
- Estimate-quote is limited to 10 requests per second per user and 1 request per 5 seconds per instrument; convert trade is limited to 10 per second per user and 1 per 5 seconds for the same side.
Convert is a quote, and a quote has a clock
The first thing to unlearn about OKX Convert is the order-book mental model. There is no bid, no ask and no queue. A user asks for a rate, OKX returns one with an identifier and a validity period, and the conversion either executes against that quote or does not happen.
The help centre states the user-facing version: the conversion rate is updated every ten seconds, and if the user does not confirm within ten seconds, the page must be refreshed to receive a new rate. The API states the same rule in a form a program can use: estimate-quote returns quoteTime and ttlMs, where ttlMs is the validity period of the quotation in milliseconds. The documented example is 10000.
That difference matters. A client that hard-codes ten seconds is guessing; a client that computes quoteTime + ttlMs is reading the contract the venue actually published. If OKX changes the window, the hard-coded client silently sends trades against quotes it believes are live.
The two calls, and what sits between them
The Convert API is deliberately small.
POST /api/v5/asset/convert/estimate-quote takes baseCcy, quoteCcy, side, rfqSz and rfqSzCcy, plus optional clQReqId, tag and convertMode. It returns a quoteId, the quotation time, the time to live, the convert price cnvtPx, and the base and quote amounts. The side is defined relative to the base currency: buy or sell.
POST /api/v5/asset/convert/trade takes the quoteId, the same currency pair and side, the size and its currency, and optional client identifiers. OKX’s documentation is explicit that an estimate quote should be made before a convert trade, and that only assets in the trading account are supported.
There is no third call to cancel. A quote that is not executed expires; it does not rest on a book and it does not need to be withdrawn. That is the convenience of the product and the source of most of its surprises.
Price, spread and the number the user remembers
Convert does not publish a fee line. It publishes a price, and the help centre describes what that price contains: the amount received is based on the quote available when the conversion is confirmed, and the result may reflect the quoted conversion price, an applicable spread and current market conditions.
That wording is worth taking literally. The quote is the price the venue is willing to transact at, and the spread is inside it rather than added on top. A user comparing Convert with a spot order should compare the effective rate — quote amount received divided by amount sent — rather than looking for a fee field that does not exist. The order details show the confirmed quote and the amount actually received; the Portfolio page shows a current estimated value at the latest market price, which is a different number and not evidence of a bad fill.
The help article also answers the question that follows a cancelled or expired quote: the next quote will not be the same, because Convert uses real-time quotes. Cancelling, restarting or letting a quote expire all lead to a new rate. There is no price protection across the gap.
What the API guarantees, and what it does not
The response to a successful convert trade is a single record with state equal to fullyFilled, plus fillPx, fillBaseSz, fillQuoteSz, tradeId and quoteId. The documented failure state is rejected.
That is a narrower contract than an order book provides, and it is useful precisely because it is narrow:
- No partial fills. The response describes one executed conversion, not a series of matches. A client does not need to aggregate fills or track a remaining quantity.
- No resting state. There is no open Convert order to query later. Either the trade call succeeded or it did not.
- No price improvement to model.
fillPxis the price of the quote that was executed. A client that wants to measure slippage has to comparecnvtPxfrom the estimate withfillPxfrom the trade, and the difference is the quote changing between calls, not the book moving within a fill.
The clQReqId and clTReqId fields are the client-side identifiers for the quote request and the trade request. They are optional, and they are the only practical way to reconcile a retry: a network timeout on the trade call leaves the client unsure whether the conversion happened, and the client order id is what makes the history lookup unambiguous.
Rate limits are part of the quote design
The documented limits are specific enough to shape a client:
estimate-quote: 10 requests per second per user, and 1 request per 5 seconds per instrument.convert trade: 10 requests per second per user, and 1 request per 5 seconds for the same side.
The per-instrument and per-side limits are the ones that bind. A strategy that wants to re-quote every second on one pair cannot: the instrument-level limit permits one quote every five seconds. That is consistent with a ten-second quote life — the venue is not designed for high-frequency re-quoting, and a client that treats Convert as a low-latency execution venue is using the wrong product.
For a slower workflow — a treasury conversion, a fee top-up, a position funded from a different asset — the limits are irrelevant and the quote model is an advantage, because the price is known before the trade is sent.
Reconciling a conversion
The Convert history endpoint, GET /api/v5/asset/convert/history, is the record of what happened. A reconciliation that works looks like this:
- Store
quoteId,quoteTime,ttlMsandcnvtPxwhen the estimate returns. - Send the trade with a
clTReqIdthat is unique and traceable. - On a timeout, query the history by the client order id before retrying. A retry with a fresh quote is a second conversion, not a repeat of the first.
- Compare
fillQuoteSzwith the amount that left the trading account, andfillBaseSzwith the amount that arrived. The difference betweencnvtPx * fillBaseSzandfillQuoteSzis the rounding and the spread, not a missing fee. - If the state is
rejected, do not assume the balance is unchanged until the history confirms it.
The account-routing step is the other half of reconciliation. Convert draws on the Trading account, so a transfer from Funding is a separate ledger event with its own timestamp. Our guide to where an OKX balance sits covers that split; a conversion that appears to have used the wrong balance is usually a transfer that had not settled into the trading account yet.
Where Convert fits, and where it does not
Convert is a good fit when the goal is to change one asset into another at a known price and the timing is not competitive: paying a fee balance, rotating a treasury, consolidating a position. It is a poor fit when the goal is to capture a spread, because the spread is the venue’s, and when the goal is to execute a large order with minimal market impact, because there is no book to walk and the quote is the whole liquidity.
The distinction is the same one that separates a quote from an order in any market. An order book tells you what other participants are willing to do; a quote tells you what one participant is willing to do for a stated number of milliseconds. Reading Convert as the first when it is the second is how a ten-second window becomes an unexpected fill.
For the cost that sits inside the quoted rate, see OKX trading fees. For why a quoted price and an executed price can diverge even without a book, see spread, depth and slippage. And for the contract-size arithmetic that matters when a conversion is funding a derivatives position rather than a spot balance, see one OKX contract is not one coin.
Risk note. The quote lifetime, request parameters, response states, rate limits and user-facing behaviour in this article were read from OKX’s API documentation and help centre on 2026-11-02. Quote windows and limits can change; the difference between a quote and a resting order does not. Nothing here is investment advice.
Sources
How this was researched. Written from primary documentation and the exchange or protocol's own published material, with sources listed at the end of the article.
Primary sources for the factual claims on this page. A date appears only where a human has actually read the source; where it is missing, the check is still outstanding.
Frequently asked questions
Why does OKX Convert show a zero balance when my funds are in OKX?
Convert uses the Trading account balance. OKX's own help article says that if the balance shows zero, the funds may be sitting in the Funding account and must be transferred to the Trading account before converting. The account routing is covered in more detail in our guide to OKX funding versus trading accounts.
How long is an OKX Convert quote valid?
OKX's help article says the conversion rate is updated every ten seconds and that a user who does not confirm within ten seconds must refresh for a new rate. The API is more precise: estimate-quote returns quoteTime and ttlMs, and the documented example ttlMs is 10000 milliseconds. A client should treat quoteTime plus ttlMs as the expiry rather than hard-coding ten seconds.
What happens if I send a convert trade after the quote expires?
The trade request carries a quoteId, and OKX says an estimate quote should be made before the convert trade. A quote that has expired is no longer a valid reference, so the trade is rejected rather than filled at the old price. The response state is rejected; a successful conversion returns fullyFilled.
Is Convert the same as a market order?
No. A market order is matched against the order book and can fill in pieces at different prices. Convert is executed against a quote from OKX, and the API returns a single fillPx, fillBaseSz and fillQuoteSz with the state fullyFilled or rejected. There is no partial fill state in the documented response.
Why did I receive less than the quote showed?
OKX's help article states that the amount received is based on the quote available when the conversion is confirmed, and may reflect the quoted conversion price, an applicable spread and current market conditions. The order details show the confirmed quote and the amount actually received; the Portfolio page shows a current estimated value, which is a different number.
Where to go next
Independent research. Each card shows the platform’s invite code, and its Create Account button is a referral link that may earn us a commission at no extra cost to you. Whether an account can be opened is decided by the platform at sign-up.
Binance

One of the largest global exchanges by traded volume, with a very broad product range.
20% Trading Fee Rebate
Use invite code con888 when signing up to enjoy trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.
OKX

A large global exchange offering spot, derivatives and a self-custody wallet.
20% Trading Fee Rebate
Enter invite code con888 when signing up to check available trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.