Korbit · AsyncAPI Specification

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.

View Spec View on GitHub CompanyCryptoCryptocurrency ExchangeDigital AssetsTradingMarket DataFinancial ServicesWebSocketSouth KoreaBlockchainAsyncAPIWebhooksEvents

Channels

ticker
Streams latest pricing information for a symbol.
orderbook
Streams orderbook data for a symbol. Up to 30 prices are available for each side.
trade
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.
myOrder
Streams the changes in my orders. **Required Permissions:** `readOrders`
myTrade
Streams trades on my orders. **Required Permissions:** `readOrders`
myAsset
Streams changes to my balances in real time. **Required Permissions:** `readBalances`

Messages

tickerMessage
Ticker
orderbookMessage
Orderbook
tradeMessage
Trade
myOrderMessage
My Order
myTradeMessage
My Trade
myAssetMessage
My Asset

Servers

wss
public
Public market-data channels — no authentication.
wss
private
Private account channels — signed like REST.
ws
sandbox
Local sandbox mock (korbit-sandbox.mjs).

AsyncAPI Specification

Raw ↑
# 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`.