WebSocket API 이용방법

PROBIT WebSocket API의 모든 메시지는 JSON 문자열로 교환됩니다.
요청 시 메시지 한 개 당 하나의 올바른 JSON 문자열을 전송해야 합니다.

WebSocket API 엔트리포인트는 wss://api.probit.kr/api/exchange/v1/ws입니다.

📘

Demo의 경우 wss://demo-api.probit.kr/api/exchange/v1/ws

🚧

요청하는 JSON 문자열의 각 키, 값 문자열은 큰따옴표로 묶여있어야 하고, 줄바꿈은 포함되지 않아야 합니다.

const ws = new WebSocket('wss://api.probit.kr/api/exchange/v1/ws');

ws.onopen = () => {
  const msg = {
    type: 'subscribe',
    channel: 'marketdata',
    interval: 500,
    market_id: 'BTC-USDT',
    filter: ['ticker', 'order_books_l0']
  };
  ws.send(JSON.stringify(msg));
};

ws.onmessage = (event) => {
  console.log(event.data);
};

Channels

PROBIT WebSocket API를 사용하기 위해서는 각 채널을 구독해야합니다.
여러 채널을 동시에 구독할 수 있으며 사용 가능한 채널들은 아래와 같습니다.

  • marketdata
  • open_order (인증 필요)
  • trade_history (인증 필요)
  • order_history (인증 필요)
  • balance (인증 필요)

📘

각 채널 별 상세 정보는 API 레퍼런스를 참조하십시오.

채널을 구독할때는 "type":"subscribe" 메시지를, 해지할때는 "type":"unsubscribe" 메시지를 사용합니다. 또한 channel 필드를 통해 구독하고자 하는 채널의 이름을 명시해야합니다.

하나의 채널을 여러번 구독할 시 나중에 요청한 정보로 업데이트됩니다. (marketdata의 경우 Marketdata 섹션 참조)

각 채널에 필요한 부가적인 필드가 있다면 같이 명시해야하며 채널별 필드는 API 레퍼런스에서 확인할 수 있습니다.

{"type":"subscribe","channel":"marketdata","market_id":"ETH-BTC","interval":100,"filter":["ticker","order_books_l0"]}
{"type":"unsubscribe","channel":"marketdata","market_id":"ETH-BTC"}

Authorization

인증이 필요한 채널을 구독하기 위해서는 채널 구독 요청 전에 "type":"authorization" 메시지로 먼저 인증을 마쳐야 합니다. token 필드에 Authorization API를 통해 업데이트 된 토큰을 명시합니다.

인증은 여러 채널을 구독하는 데에 사용될 수 있으며 연결이 해제될 때 까지 유지됩니다.

API 레퍼런스에서 자세한 정보를 확인할 수 있습니다.

{"type":"authorization","token":"USER_AUTHORIZE_TOKEN"}
{"type":"subscribe","channel":"order_history"}
{"type":"subscribe","channel":"trade_history"}
{"type":"unsubscribe","channel":"order_history"}
{"type":"unsubscribe","channel":"trade_history"}

Marketdata Channel

자세한 내용은 API 레퍼런스를 참고하십시오.

marketdata 채널은 인증이 필요하지 않은 public 채널입니다.

marketdata를 여러 번 subscribe하더라도 각 market_id별로 여러 번 구독하고 해제할 수 있습니다. 한 마켓을 여러 번 구독하는 경우 나중에 요청한 메시지를 기준으로 구독이 변경됩니다.

marketdata 채널을 구독하기 위해 필요한 인자로는 market_id, interval, filter가 있습니다.

  • market_id: 구독하고자 하는 마켓의 ID
  • interval: 마켓 정보를 동기화하는 단위 시간(ms)
    • 사용 가능한 단위: 100, 500
  • filter: 마켓으로부터 받고자 하는 정보
    • ticker
    • recent_trades
    • order_books
      • order_books_l0는 모아보기가 적용되지 않으며 모아보기는 4단계로 제공됨
      • order_books_l1
      • order_books_l2
      • order_books_l3
      • order_books_l4
{"type":"subscribe","channel":"marketdata","market_id":"ETH-BTC","interval":100,"filter":["ticker","recent_trades","order_books_l0","order_books_l1","order_books_l2","order_books_l3","order_books_l4"]}
{"type":"subscribe","channel":"marketdata","market_id":"ETH-USDT","interval":500,"filter":["ticker"]}
{"type":"subscribe","channel":"marketdata","market_id":"EOS-BTC","interval":100,"filter":["order_books_l0"]}
{"type":"subscribe","channel":"marketdata","market_id":"EOS-BTC","interval":100,"filter":["ticker"]}
{"type":"unsubscribe","channel":"marketdata","market_id":"ETH-USDT"}
{"type":"unsubscribe","channel":"marketdata","market_id":"EOS-BTC"}