Korbit Open API v2 WebSocket

WebSocket streaming API for the Korbit exchange. Public channels stream ticker, orderbook and trade market data; private channels stream the authenticated account's order, trade and balance changes. Private connections sign exactly like REST, with timestamp and signature in the query string and X-KAPI-KEY in the connection header.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/korbit-open-api-v2-websocket"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

AsyncAPI Specification

korbit-websocket-asyncapi.yml 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`.