Korbit Open API v2 WebSocket
Version 2.0.0
WebSocket streaming API for the Korbit cryptocurrency exchange. Public channels stream market data; private channels stream the authenticated account's order, trade, and balance changes. Subscribe with `[{"requestId": 1, "method": "subscribe", "type": "ticker", "symbols": ["btc_krw"]}]`. Control messages carry a `status` field; data messages do not. Public messages may be dropped under load — reconcile against REST snapshots. Private connections sign exactly like REST: `timestamp` and `signature` in the query string, `X-KAPI-KEY` in the connection header. Generated by the API Evangelist enrichment pipeline from Korbit's published agent documentation bundle (https://docs.korbit.co.kr/llms-full.txt). Korbit does not publish an AsyncAPI document; this is a faithful transcription of the published reference.
Channels
Messages
Servers
AsyncAPI Specification
# Generated by the API Evangelist enrichment pipeline on 2026-07-19.
# method: generated
# source: https://docs.korbit.co.kr/llms-full.txt (Korbit's own published agent
# documentation bundle). Korbit does not publish an OpenAPI/AsyncAPI document;
# this is a faithful transcription of the published reference, not an official
# Korbit artifact.
asyncapi: 3.0.0
info:
title: Korbit Open API v2 WebSocket
version: 2.0.0
description: |-
WebSocket streaming API for the Korbit cryptocurrency exchange. Public channels stream market data; private channels stream the authenticated account's order, trade, and balance changes.
Subscribe with `[{"requestId": 1, "method": "subscribe", "type": "ticker", "symbols": ["btc_krw"]}]`. Control messages carry a `status` field; data messages do not. Public messages may be dropped under load — reconcile against REST snapshots. Private connections sign exactly like REST: `timestamp` and `signature` in the query string, `X-KAPI-KEY` in the connection header.
Generated by the API Evangelist enrichment pipeline from Korbit's published agent documentation bundle (https://docs.korbit.co.kr/llms-full.txt). Korbit does not publish an AsyncAPI document; this is a faithful transcription of the published reference.
x-generated-by: API Evangelist enrichment pipeline
x-source: https://docs.korbit.co.kr/llms-full.txt
servers:
public:
host: ws-api.korbit.co.kr
pathname: /v2/public
protocol: wss
description: Public market-data channels — no authentication.
private:
host: ws-api.korbit.co.kr
pathname: /v2/private
protocol: wss
description: Private account channels — signed like REST.
security:
- $ref: '#/components/securitySchemes/KorbitApiKey'
sandbox:
host: 127.0.0.1:9999
pathname: /v2/public
protocol: ws
description: Local sandbox mock (korbit-sandbox.mjs).
channels:
ticker:
address: ticker
title: Ticker
description: Streams latest pricing information for a symbol.
servers:
- $ref: '#/servers/public'
messages:
tickerMessage:
$ref: '#/components/messages/tickerMessage'
orderbook:
address: orderbook
title: Orderbook
description: Streams orderbook data for a symbol. Up to 30 prices are available for each side.
servers:
- $ref: '#/servers/public'
messages:
orderbookMessage:
$ref: '#/components/messages/orderbookMessage'
trade:
address: trade
title: Trade
description: Streams real-time trades. The subscription snapshot carries only the latest trade(s),
not full trade history — use REST GET /v2/trades for recent history.
servers:
- $ref: '#/servers/public'
messages:
tradeMessage:
$ref: '#/components/messages/tradeMessage'
myOrder:
address: myOrder
title: My Order
description: |-
Streams the changes in my orders.
**Required Permissions:** `readOrders`
servers:
- $ref: '#/servers/private'
messages:
myOrderMessage:
$ref: '#/components/messages/myOrderMessage'
myTrade:
address: myTrade
title: My Trade
description: |-
Streams trades on my orders.
**Required Permissions:** `readOrders`
servers:
- $ref: '#/servers/private'
messages:
myTradeMessage:
$ref: '#/components/messages/myTradeMessage'
myAsset:
address: myAsset
title: My Asset
description: |-
Streams changes to my balances in real time.
**Required Permissions:** `readBalances`
servers:
- $ref: '#/servers/private'
messages:
myAssetMessage:
$ref: '#/components/messages/myAssetMessage'
operations:
receiveTicker:
action: receive
channel:
$ref: '#/channels/ticker'
summary: Subscribe to the `ticker` channel.
messages:
- $ref: '#/channels/ticker/messages/tickerMessage'
receiveOrderbook:
action: receive
channel:
$ref: '#/channels/orderbook'
summary: Subscribe to the `orderbook` channel.
messages:
- $ref: '#/channels/orderbook/messages/orderbookMessage'
receiveTrade:
action: receive
channel:
$ref: '#/channels/trade'
summary: Subscribe to the `trade` channel.
messages:
- $ref: '#/channels/trade/messages/tradeMessage'
receiveMyOrder:
action: receive
channel:
$ref: '#/channels/myOrder'
summary: Subscribe to the `myOrder` channel.
messages:
- $ref: '#/channels/myOrder/messages/myOrderMessage'
receiveMyTrade:
action: receive
channel:
$ref: '#/channels/myTrade'
summary: Subscribe to the `myTrade` channel.
messages:
- $ref: '#/channels/myTrade/messages/myTradeMessage'
receiveMyAsset:
action: receive
channel:
$ref: '#/channels/myAsset'
summary: Subscribe to the `myAsset` channel.
messages:
- $ref: '#/channels/myAsset/messages/myAssetMessage'
components:
messages:
tickerMessage:
name: tickerMessage
title: Ticker
payload:
type: object
properties:
type:
type: string
enum:
- ticker
description: Fixed value `ticker`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
symbol:
type: string
description: Trading pair symbol.
examples:
- btc_krw
snapshot:
type: boolean
description: Whether the data is a snapshot or a real-time data. `true` - The data is a latest
snapshot and not a real-time data. Sent as the first message on subscription. `false` or
`null` - The data is from a real-time trade.
data:
type: object
properties:
open:
type: string
description: Open price (24H).
examples:
- '361922.23'
high:
type: string
description: High price (24H).
examples:
- '361922.23'
low:
type: string
description: Low price (24H).
examples:
- '361922.23'
close:
type: string
description: Last price (24H).
examples:
- '361922.23'
prevClose:
type: string
description: Previous close price (24H).
examples:
- '261922.23'
priceChange:
type: string
description: changed price. `close - prevClose`.
examples:
- '100000'
priceChangePercent:
type: string
description: changed price percent. `100 * (close - prevClose) / prevClose`.
examples:
- '38.18'
volume:
type: string
description: Trading volume (Base, 24H).
examples:
- '100'
quoteVolume:
type: string
description: Trading volume (Quote/Counter, 24H).
examples:
- '1000000000'
bestBidPrice:
type: string
description: Best bid price.
examples:
- '5000'
bestAskPrice:
type: string
description: Best ask price.
examples:
- '6000'
lastTradedAt:
type: number
description: Last traded timestamp (unix timestamp, in milliseconds).
examples:
- 1700000000000
required:
- open
- high
- low
- close
- prevClose
- priceChange
- priceChangePercent
- volume
- quoteVolume
- bestBidPrice
- bestAskPrice
- lastTradedAt
required:
- type
- timestamp
- symbol
- data
orderbookMessage:
name: orderbookMessage
title: Orderbook
payload:
type: object
properties:
type:
type: string
enum:
- orderbook
description: Fixed value `orderbook`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
symbol:
type: string
description: Trading pair symbol.
examples:
- btc_krw
snapshot:
type: boolean
description: Whether the data is a snapshot or a real-time data. `true` - The data is a latest
snapshot and not a real-time data. Sent as the first message on subscription. `false` or
`null` - The data is from a real-time trade.
data:
type: object
properties:
timestamp:
type: number
description: Timestamp of the orderbook data (unix timestamp, in milliseconds).
examples:
- 1700000000000
bids:
type: array
items:
type: object
properties:
price:
type: string
description: price.
examples:
- '250000'
qty:
type: string
description: quantity.
examples:
- '10'
amt:
type: string
description: Total amount (only set when orderbook grouping is used. When not using
grouping, it can be calculated as `price * qty`).
examples:
- '2500000'
required:
- price
- qty
description: bids
asks:
type: array
items:
type: object
properties:
price:
type: string
description: price.
examples:
- '250000'
qty:
type: string
description: quantity.
examples:
- '10'
amt:
type: string
description: Total amount (only set when orderbook grouping is used. When not using
grouping, it can be calculated as `price * qty`).
examples:
- '2500000'
required:
- price
- qty
description: asks
required:
- timestamp
- bids
- asks
required:
- type
- timestamp
- symbol
- data
tradeMessage:
name: tradeMessage
title: Trade
payload:
type: object
properties:
type:
type: string
enum:
- trade
description: Fixed value `trade`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
symbol:
type: string
description: Trading pair symbol.
examples:
- btc_krw
snapshot:
type: boolean
description: Whether the data is a snapshot or a real-time data. `true` - The data is a latest
snapshot and not a real-time data. Sent as the first message on subscription. `false` or
`null` - The data is from a real-time trade.
data:
type: array
items:
type: object
properties:
timestamp:
type: number
description: Time of the trade (unix timestamp, in milliseconds).
examples:
- 1700000000000
price:
type: string
description: trade price.
examples:
- '250000'
qty:
type: string
description: trade quantity.
examples:
- '10'
isBuyerTaker:
type: boolean
description: whether the taker is the buyer.
examples:
- true
tradeId:
type: number
description: trade ID (unique per trading pair). Monotonically increasing per trading
pair, but not guaranteed to be contiguous. After a reconnect the stream may redeliver
already-seen trades in order — de-duplicate by tradeId.
examples:
- 1234
required:
- timestamp
- price
- qty
- isBuyerTaker
- tradeId
required:
- type
- timestamp
- symbol
- data
myOrderMessage:
name: myOrderMessage
title: My Order
payload:
type: object
properties:
channelType:
type: string
enum:
- myOrder
description: Fixed value `myOrder`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
symbol:
type: string
description: Trading pair symbol.
examples:
- btc_krw
order:
type: object
properties:
accountSeq:
type: number
description: The account sequence number this update belongs to. `1` is the main account.
Omitted when the subscription request did not explicitly include the `accountSeqs` parameter.
examples:
- 1
orders:
type: array
items:
type: object
properties:
orderId:
type: number
description: order ID.
examples:
- 1234
status:
type: string
enum:
- pending
- unfilled
- filled
- canceled
- partiallyFilled
- partiallyFilledCanceled
- expired
description: Order status `pending` — Order pending. If the balance is insufficient,
the order may fail and change to the `expired` status. / `unfilled` — Fully unfilled
(Same as the `open` status from REST API) / `filled` — Execution closed. An order
whose unfilled remainder is returned instead of resting on the book (e.g. an `ioc`
order, or a price-protected (`pp`) order trimmed by the protection range) also
closes as `filled` even when less than the requested quantity executed. Confirm
the executed amount with `filledQty`/`filledAmt`. / `canceled` — Fully canceled
/ `partiallyFilled` — Partially filled / `partiallyFilledCanceled` — Partially
filled and remaining amount canceled / `expired` — Order submission failed
side:
type: string
enum:
- buy
- sell
orderType:
type: string
enum:
- limit
- market
- best
description: '`limit` — limit order / `market` — market order / `best` — best bid/offer'
timeInForce:
type: string
enum:
- gtc
- ioc
- fok
- po
description: Time in Force strategies. `gtc` — Good-Till-Canceled. The order will
remain valid until terminated (fully executed or canceled) / `ioc` — Immediate-Or-Cancel.
The order will be filled immediately, if can not then will be canceled. (Taker-Only)
/ `fok` — Fill-Or-Kill. The order will be filled fully, if can not then will be
canceled. (Taker-Only) / `po` — Post-Only. If the order would be filled immediately,
then will be canceled. (Maker-Only)
price:
type: string
description: Order price (limit order only. no price for market order.).
examples:
- '5000'
qty:
type: string
description: Order quantity (limit/BBO order or sell-side market order only. For
BBO orders it's set after the quantity is determined).
examples:
- '10'
filledQty:
type: string
description: filled quantity.
examples:
- '10'
amt:
type: string
description: Purchase amount in counter/quote asset like KRW. (buy-side market/BBO
order only).
examples:
- '50000'
filledAmt:
type: string
description: Filled amount in counter/quote asset like KRW.
examples:
- '50000'
avgPrice:
type: string
description: Average execution price.
examples:
- '5000'
createdAt:
type: number
description: Order timestamp (ms).
examples:
- 1700000000000
lastFilledAt:
type: number
description: Last execution timestamp (ms).
examples:
- 1700000000000
clientOrderId:
type: string
description: '`clientOrderId` submitted from the user by POST /v2/orders.'
examples:
- 20141231-155959-abcdef
required:
- orderId
- status
- side
- orderType
- filledQty
- filledAmt
- createdAt
required:
- orders
required:
- channelType
- timestamp
- symbol
- order
myTradeMessage:
name: myTradeMessage
title: My Trade
payload:
type: object
properties:
channelType:
type: string
enum:
- myTrade
description: Fixed value `myTrade`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
symbol:
type: string
description: Trading pair symbol.
examples:
- btc_krw
trade:
type: object
properties:
accountSeq:
type: number
description: The account sequence number this update belongs to. `1` is the main account.
Omitted when the subscription request did not explicitly include the `accountSeqs` parameter.
examples:
- 1
trades:
type: array
items:
type: object
properties:
tradeId:
type: number
description: trade ID (unique per trading pair). Monotonically increasing per trading
pair, but not guaranteed to be contiguous. After a reconnect the stream may redeliver
already-seen trades in order — de-duplicate by tradeId.
examples:
- 1234
orderId:
type: number
description: order ID.
examples:
- 1234
side:
type: string
enum:
- buy
- sell
price:
type: string
description: price.
examples:
- '5000'
qty:
type: string
description: quantity.
examples:
- '10'
fee:
type: string
description: fee quantity.
examples:
- '10'
feeCurrency:
type: string
description: fee currency.
examples:
- krw
filledAt:
type: number
description: time of the trade.
examples:
- 1700000000000
isTaker:
type: boolean
description: taker=true, maker=false.
examples:
- true
required:
- tradeId
- orderId
- side
- price
- qty
- fee
- feeCurrency
- filledAt
- isTaker
required:
- trades
required:
- channelType
- timestamp
- symbol
- trade
myAssetMessage:
name: myAssetMessage
title: My Asset
payload:
type: object
properties:
channelType:
type: string
enum:
- myAsset
description: Fixed value `myAsset`
timestamp:
type: number
description: Server time (unix timestamp, in milliseconds).
examples:
- 1700000000000
asset:
type: object
properties:
accountSeq:
type: number
description: The account sequence number this update belongs to. `1` is the main account.
Omitted when the subscription request did not explicitly include the `accountSeqs` parameter.
examples:
- 1
assets:
type: array
items:
type: object
properties:
currency:
type: string
description: asset name.
examples:
- krw
balance:
type: string
description: balance. `available + tradeInUse + withdrawalInUse`.
examples:
- '100'
available:
type: string
description: available quantity.
examples:
- '70'
tradeInUse:
type: string
description: quantity in trade.
examples:
- '20'
withdrawalInUse:
type: string
description: quantity in withdrawal.
examples:
- '10'
avgPrice:
type: string
description: average purchase price.
examples:
- '5000'
updatedAt:
type: number
description: time of the last change.
examples:
- 1700000000000
required:
- currency
- balance
- available
- tradeInUse
- withdrawalInUse
- avgPrice
- updatedAt
required:
- assets
required:
- channelType
- timestamp
- asset
securitySchemes:
KorbitApiKey:
type: httpApiKey
name: X-KAPI-KEY
in: header
description: Korbit API key; the connection URL also carries `timestamp` and `signature`.