What is Coinone?
Learn what Coinone is, how its centralized exchange works, how trading and withdrawals function, and who its APIs and retail platform are built for.

Introduction
Coinone is a centralized cryptocurrency exchange in South Korea that lets users trade digital assets through an order-book market, hold balances inside the platform, and move assets between Coinone and external blockchain wallets. That sounds straightforward, but it solves a specific coordination problem: blockchains are good at settlement, while active trading needs fast matching, a shared market, and account-level controls that individual blockchains do not provide by themselves. Coinone sits in that middle layer. It keeps an internal marketplace running continuously, tracks user balances, and exposes the same basic machinery through both a retail interface and developer APIs.
The simplest way to understand Coinone is to separate trading from settlement. Trading on an exchange is mostly about finding counterparties and agreeing on price quickly. Settlement is about final ownership on a blockchain or, in fiat terms, movement of money. Coinone makes trading fast by handling much of it inside its own system first, then connecting that system to external wallets, deposits, and withdrawals when users need to move assets in or out.
Coinone the company describes itself as a formal virtual-asset business operator centered on its domestic exchange, and it also offers adjacent services such as staking. But the exchange is the core product. For most users, the question is not whether Coinone is “on-chain” or “off-chain” in some pure sense. The practical question is whether it gives them a place to discover prices, place orders, and manage balances with enough speed and structure to be useful. That is the problem centralized exchanges exist to solve.
How does Coinone match orders and maintain its order book?
| Order type | When to use | Price control | Execution speed | Partial fill risk | Required field |
|---|---|---|---|---|---|
| LIMIT | Set preferred execution price | High | May wait | Possible partial fills | Price and quantity |
| MARKET | Execute immediately | Low | Immediate | Possible partial fills | Qty for sell, amount for buy |
| STOPLIMIT | Trigger at target price | Conditional control | Executes when triggered | Possible partial fills | Trigger price and quantity |
At the center of Coinone is an order book. An order book is a live list of buy offers and sell offers at different prices for a given market, such as a KRW-BTC pair. Buyers state the highest price they are willing to pay; sellers state the lowest price they are willing to accept. When those prices cross, a trade can happen. This mechanism matters because it turns many separate intentions into a single visible market.
Coinone’s own user guide describes its trading screen as using a stock-style price ladder and limit-order workflow. That detail is more important than it may seem. A limit order means the user chooses both price and quantity. If the market already contains matching orders on the other side, the trade can execute immediately. If not, the order waits as an open offer. So the exchange is not merely showing prices; it is maintaining a queue of conditional commitments from many users at once.
A concrete example makes this clearer. Imagine a user wants to buy BTC. If they place a limit buy at the current best ask or higher, their order may execute immediately against existing sell orders. If they place the order below the current market, nothing is “wrong” with the order; it simply becomes liquidity resting in the book, waiting for a seller willing to trade at that price. That waiting state is part of the mechanism, not a failure. It is how exchanges let users express price preference instead of accepting whatever the market gives them in that instant.
For developers, Coinone exposes this same market structure through public APIs. Its public v2 order-book endpoint returns the bids and asks for a market pair, along with a timestamp and an id where larger values indicate newer order-book states. That is exactly what an exchange client, charting tool, or market monitor needs: not just a last traded price, but the visible depth of buying and selling interest around the market.
What does Coinone’s public API reveal about its market and data model?
Developer APIs often show the product’s real architecture more clearly than marketing pages do. Coinone splits its APIs into Public and Private surfaces. Public APIs are for market data such as order books and prices, and do not require account credentials. Private APIs are for actions tied to a user account, such as checking balances, placing orders, or requesting withdrawals.
That split reflects a basic exchange invariant: market information is shared, account control is not. Everyone should be able to see the market. Only the account owner should be able to move funds or create obligations in that account’s name.
The public order-book endpoint illustrates the market-data side well. It is a REST GET endpoint at https://api.coinone.co.kr/public/v2/orderbook/{quote_currency}/{target_currency}. The path names matter because they show Coinone organizes markets by a quote currency, such as KRW, and a target asset, such as BTC. The endpoint can return different numbers of order-book levels using a size parameter, but only four values are allowed: 5, 10, 15, or 16, with 15 as the default. That constraint is small, but revealing. Coinone is not offering a completely free-form query layer; it is offering a bounded product interface tuned for common display and polling patterns.
The same endpoint also supports order_book_unit, which controls aggregation of price levels. In plain language, Coinone can group nearby prices into coarser buckets instead of showing every raw level separately. That is useful because order books are hard to read when displayed too finely, especially for retail traders watching fast-moving markets. The trade-off is that aggregation improves readability while losing some detail. Coinone’s documentation even tells clients to use the order_book_unit value returned in the response when aggregating, which suggests the server is authoritative about the unit actually used.
The response schema also hints at how clients should reason about freshness. Alongside timestamp, Coinone returns an order-book id, and larger id values mean newer data. That gives downstream systems two ways to compare snapshots: by clock time and by exchange-issued sequence-like identity. For exchange integrations, that is practical information, not trivia. It helps determine whether a newly received snapshot supersedes an older one.
How are private API orders authenticated and structured on Coinone?
| Component | Purpose | Format | Why required |
|---|---|---|---|
| X-COINONE-PAYLOAD | Encodes request body | Base64 JSON body | Proves exact request content |
| X-COINONE-SIGNATURE | Authenticates sender and integrity | HMAC-SHA512 hex | Verifies payload and secret key |
| nonce | Prevent replay attacks | UUID v4 | Ensures unique request id |
| accesstoken | Authorizes account scope | String token | Identifies calling account |
Private API design tells you how the exchange thinks about trust. Coinone’s current private order endpoint is POST https://api.coinone.co.kr/v2.1/order, and it supports LIMIT, MARKET, and [STOP_LIMIT](https://scribe-topic-id.invalid/markets.trading.order_types.stop_limit_order) orders. This means Coinone is not limited to passive price posting. It also supports market-taking behavior and conditional trigger-based orders.
The authentication model is straightforward but strict. Private requests require two headers: X-COINONE-PAYLOAD and X-COINONE-SIGNATURE. The payload is the JSON request body encoded as base64. The signature is an HMAC-SHA512 digest of that payload using the user’s secret key. The reason for this design is simple: Coinone needs to verify both who authorized the request and what exact request they authorized. If either changes in transit, the signature check fails.
Each request also includes an access_token and a [nonce](https://scribe-topic-id.invalid/foundations.transactions.nonce). In v2.1, the nonce is a UUID. The nonce exists to stop replay attacks: a valid request should not be capturable and re-submittable later as though it were new. This is one of those mechanisms users rarely see directly, but it is fundamental to how account-level exchange APIs remain usable over the public internet.
Order fields change depending on the order type. For limit and stop-limit orders, price is required because the user is defining a price condition. For a market sell, quantity is required because the user is saying how much of the asset to sell into the available bids. For a market buy, Coinone requires amount, which is the total spending amount in the quote currency. That distinction matters because “buy me 1 BTC at market” and “spend this much KRW at market” are different instructions when the execution price is not known in advance.
Coinone also supports limit_price on market orders as a guardrail against slippage. This is an important nuance. A market order usually means “execute now against available liquidity,” but Coinone allows users to cap the maximum price for a market buy or the minimum price for a market sell. If the remaining liquidity would require execution beyond that cap, the remaining amount is left unfilled and canceled automatically. In effect, this turns a pure market order into a bounded market-taking instruction: prioritize immediacy, but not at any price.
That feature makes Coinone more useful for users who want speed without fully surrendering price protection. It also reveals a trade-off. You may get less execution than you expected, because protecting against slippage can mean accepting a partial fill.
How do withdrawals and deposits work on Coinone, and what address controls apply?
| Status | What it means | User action | Finality |
|---|---|---|---|
| WITHDRAWALREGISTER | Request accepted internally | Wait for processing | Not final |
| WITHDRAWALWAIT | Broadcasted, awaiting confirmations | Monitor confirmations | Pending finality |
| WITHDRAWALSUCCESS | Blockchain confirms transfer | Reconcile balance | Final |
| WITHDRAWALFAIL | Broadcast or on-chain failure | Contact support | Not final |
| WITHDRAWALREFUND | Failed withdrawal refunded | Check account balance | Final when refunded |
An exchange is only useful if users can enter and leave the system. Coinone’s private APIs include withdrawal functions for on-chain assets, and the way those APIs are designed says a lot about operational priorities.
The coin-withdrawal endpoint is POST https://api.coinone.co.kr/v2.1/transaction/coin/withdrawal. It uses the same signed-header scheme as order placement, and it requires fields such as currency, amount, and address, with an optional secondary_address for memo- or tag-based networks. That part is standard exchange plumbing. What matters more is the control layer around it.
Coinone documents that API withdrawals can only go to addresses that have completed additional information registration and additional channel authentication in its Open API withdrawal address book. In other words, the exchange does not treat “a signed request” as sufficient authority for arbitrary withdrawals. It adds a second boundary: destination addresses themselves must be pre-approved. That reduces the damage a compromised API credential could do.
Withdrawal responses include lifecycle statuses such as WITHDRAWAL_REGISTER, WITHDRAWAL_WAIT, WITHDRAWAL_SUCCESS, WITHDRAWAL_FAIL, and refund-related states. This reflects the underlying reality that a withdrawal is not one event. First the request is accepted internally, then it may be prepared and broadcast, then it waits on blockchain confirmation, and only later becomes final. Exchanges that expose these states are acknowledging that settlement is a process, not a button click.
Who should use Coinone; retail traders, developers, or both?
Coinone serves at least two overlapping audiences. The first is the ordinary exchange user who wants a managed market with a familiar interface: sign up, verify identity, fund an account, place orders, and withdraw when needed. Coinone’s user guide shows exactly this shape. Signup uses email verification; phone authentication is required and tied to identity verification; KRW deposit and withdrawal require bank-account verification; and OTP is recommended for stronger account security. These are not incidental hurdles. They are part of how a centralized exchange makes a fast internal market compatible with account recovery, fraud controls, and fiat-linked operations.
The second audience is the developer or trading system integrator. Coinone’s docs cover public REST data, private order placement, withdrawals, WebSocket channels, and rate limits. That combination makes the platform usable not just through a browser, but as infrastructure. A charting app can poll the public order book. A trading bot can place signed private orders. An operations system can monitor withdrawal state transitions.
The rate-limit structure is especially telling. Public API v2 is limited to 1200 requests per minute per IP. Private API v2.1 is limited per portfolio, with order-related APIs at 40 requests per second and other APIs at 80 requests per second. This shows Coinone expects automation, but within controlled bounds. It is open enough for serious integration, yet opinionated enough to prevent unbounded load or abusive behavior.
There are also practical constraints developers need to respect. Some older API surfaces are deprecated, and external libraries have run into breakage when they kept using outdated endpoints. That is a reminder that integrating with a centralized exchange is not like calling a timeless blockchain contract. The operator can version, replace, or retire interfaces, and clients need to track those changes.
What trade-offs do you accept when using Coinone (speed and convenience vs custody and control)?
The core trade-off is simple: Coinone gives users speed, market structure, and operational convenience by centralizing functions that blockchains alone do not handle well for active trading. In return, users rely on Coinone’s systems, policies, and controls.
That reliance shows up everywhere. Orders are matched inside the platform. Balances are tracked in internal accounts. Withdrawals depend on exchange approval flows and destination whitelisting. API access depends on signed requests, nonces, permissions, and rate limits. Even the legal terms make the custodial nature explicit: Coinone intermediates trades, maintains internal wallet structures, and reserves significant operational powers in exceptional cases.
None of this is unique to Coinone; it is the defining pattern of a centralized exchange. What matters is seeing how the pieces fit together. The order book creates a shared market. The private API turns account permissions into executable actions. The withdrawal system bridges internal balances to external chains. The identity and security layers make that bridge governable at scale.
Conclusion
Coinone is best understood as a centralized trading and custody platform that turns scattered buyers, sellers, wallets, and bank-linked balances into a single usable market. Its usefulness comes from that coordination layer: it makes trading faster than direct on-chain exchange, while still letting users connect back to blockchains when they need deposits or withdrawals. If you remember one thing, remember this: **Coinone’s product is not just “buy and sell crypto,” but the managed machinery that makes that market workable for both humans and software. **
What should you look for before choosing a crypto exchange?
Compare custody model, execution, fees, API support, and withdrawal controls before you choose an exchange. Use Cube Exchange to run direct checks by funding a small amount, placing test orders, and verifying withdrawal flows so you can compare Coinone’s custodial model against Cube’s non-custodial MPC workflow.
- Check custody and controls: confirm whether the venue is custodial (Coinone) or non-custodial (Cube’s MPC/threshold-signing) and note how each handles recovery and address whitelisting.
- Test execution and order types: fund a small amount on Cube and place a LIMIT order and a MARKET order with a slippage cap (limit_price) to compare fills and partial-fill behavior against Coinone’s documented order types.
- Compare fees and settlement: review maker/maker fees and withdrawal fees on both platforms, then initiate a small withdrawal to measure processing time and any address-approval steps.
- Validate API and automation limits: inspect public and private API docs, check rate limits and order-book depth options, and run a short script to poll the order book and submit a signed private order to compare integration ergonomics.
Frequently Asked Questions
- How does Coinone’s order_book_unit aggregation affect order-book accuracy and how should clients handle it? +
- Coinone returns an order_book_unit value with each snapshot and instructs clients to use that server-provided unit when aggregating price levels; aggregation makes the book easier to read but removes fine-grained price detail, so clients must accept the trade-off between readability and fidelity. The docs also note the order_book_unit default and that callers should follow the returned unit rather than assume arbitrary buckets.
- What authentication and anti-replay measures does Coinone use for its private API? +
- Private requests require two headers: X-COINONE-PAYLOAD (the JSON body base64-encoded) and X-COINONE-SIGNATURE (an HMAC‑SHA512 of that payload using the user’s secret key); each request also carries an access_token and a nonce (v2.1 uses UUID nonces) so the server can verify who authorized the exact request and prevent replay attacks.
- What happens if I set a limit_price on a market order — will it still execute fully? +
- Coinone allows a limit_price on market orders as a slippage guard: the exchange will execute immediately up to that cap and automatically cancel any remaining unfilled amount if execution would exceed the limit, which can produce partial fills. This preserves immediacy while limiting price risk, but it may leave executions incomplete.
- Can I withdraw to any blockchain address with a single signed API call? +
- Withdrawals via the API can only be sent to addresses that have completed the exchange’s withdrawal-address registration and additional channel authentication (the Open API withdrawal address book), so a signed API call alone is not sufficient to withdraw to an arbitrary new address. This whitelist reduces what a compromised API key can do.
- How should I determine whether an order-book snapshot from Coinone is newer than a previously received snapshot? +
- Coinone exposes two freshness indicators in order-book responses: a UTC timestamp and an order-book id where larger id values indicate newer snapshots, so clients can compare either clock time or the exchange-issued id to determine whether one snapshot supersedes another.
- What are Coinone’s API rate limits and what happens if I exceed them? +
- Public API v2 is documented as limited to 1200 requests per minute per IP, while private v2.1 rate limits are applied per portfolio (order-related APIs ~40 requests/sec, other private APIs ~80 requests/sec); exceeding published limits is enforced and the docs state rate-limit violations result in temporary blocking (e.g., a 1-minute block is described in the docs).
- Do I need to worry about deprecated Coinone endpoints or version changes when integrating a trading bot or library? +
- Some older API surfaces are deprecated and Coinone has versioned endpoints (v2, v2.1, etc.), and third‑party integrators (for example ccxt maintainers) have reported breakage when clients keep calling outdated paths, so integrations must track Coinone’s API versioning and migrate to v2.1 as required.
- Can I request an arbitrary number of order-book levels from Coinone’s public order-book API? +
- The public v2 order-book endpoint only accepts a discrete size parameter of 5, 10, 15, or 16 (default 15), so clients cannot request arbitrary depth and must use one of those allowed values when polling the order book.
- Does Coinone provide a sandbox or testnet for safely testing private API calls? +
- The public docs and technical pages do not document a Coinone sandbox or testnet base URL for private API calls; the available documentation raises this as an unresolved question, so there is no clear evidence in the docs that a test environment is provided.