HomeGuidesAPI ReferenceAnnouncements
AnnouncementsGuidesAPI ReferenceSupportFAQ
API Reference

인증

앞서 "기본 정보"에서 확인한것과 같이 웹소켓은 Public 데이터와 Private 데이터로 나누어져있습니다. Public 데이터를 수신하기 위해서는 별다른 인증이 필요 없습니다. Private 데이터를 수신하기 위해서는 Websocket 연결 시 인증에 성공해야합니다.

  • REST API 에서와 동일하게 Authorization 헤더를 통해 인증을 진행합니다.
  • 인증 가능한 요청 만들기 의 "JWT 인증 토큰 만들기" 를 참고하시기 바랍니다.

(예시) Header 에 인증 정보를 담아 Websocket 연결

const jwt = require("jsonwebtoken");
const {v4: uuidv4} = require('uuid');
const WebSocket = require("ws");

const payload = {
    access_key: "발급받은 Access key", 
    nonce: uuidv4(),
};


const jwtToken = jwt.sign(payload, "발급받은 Secret key");

const ws = new WebSocket("wss://api.upbit.com/websocket/v1", {
    headers: {
        authorization: `Bearer ${jwtToken}`
    }
});


ws.on("open", () => {
    console.log("connected!");
    // Request after connection
    ws.send('[{"ticket":"test example"},{"type":"myTrade"}]');

});

ws.on("error", console.error);

ws.on("message", (data) => console.log(data.toString()));

ws.on("close", () => console.log("closed!"));
import jwt  # PyJWT
import uuid
import websocket  # websocket-client


def on_message(ws, message):
    # do something
    data = message.decode('utf-8')
    print(data)


def on_connect(ws):
    print("connected!")
    # Request after connection
    ws.send('[{"ticket":"test example"},{"type":"myTrade"}]')


def on_error(ws, err):
    print(err)


def on_close(ws, status_code, msg):
    print("closed!")


payload = {
    'access_key': "발급받은 Access key",
    'nonce': str(uuid.uuid4()),
}

jwt_token = jwt.encode(payload, "발급받은 Secret key");
authorization_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorization_token}

ws_app = websocket.WebSocketApp("wss://api.upbit.com/websocket/v1",
                                header=headers,
                                on_message=on_message,
                                on_open=on_connect,
                                on_error=on_error,
                                on_close=on_close)
ws_app.run_forever()

요청 포맷

연결이 성공적으로 이루어졌다면 웹소켓 서버에 여러가지 요청을 할 수 있습니다.
요청은 JSON Object를 이용하며 응답 또한 JSON Object 입니다.

요청은 크게 ticket field, type field, format field 로 나누어지며 각각의 필드는 다음 구성요소로 이루어져 있습니다.

📘

Request format

[{Ticket Field},{Type Field},....,{Type Field},{Format Field}]

Ticket Field

일반적으로 용도를 식별하기 위해 ticket 이라는 필드값이 필요합니다.
이 값은 시세를 수신하는 대상을 식별하며 되도록 유니크한 값을 사용하도록 권장합니다. (UUID 등)

필드명
타입
내용
필수 여부
기본 값
ticketString요청자를 식별할 수 있는 값O

Type Field

수신하고 싶은 시세 정보를 나열하는 필드입니다.
isOnlySnapshot, isOnlyRealtime 필드는 생략 가능하며 모두 생략시 스냅샷과 실시간 데이터 모두를 수신합니다.

하나의 요청에 {type field}는 여러개를 명시할 수 있습니다.

필드명
타입
내용
필수 여부
기본 값
typeString데이터 타입
ticker: 현재가
trade: 체결
orderbook: 호가
O
codesList마켓 코드 리스트
*대문자로 요청해야 합니다.
O
isOnlySnapshotBoolean스냅샷 시세만 제공Xfalse
isOnlyRealtimeBoolean실시간 시세만 제공Xfalse

📘

private 데이터에서의 codes

private 데이터의 경우 codes 필드를 생략하거나 빈 배열로 요청할 경우 모든 마켓에 대한 정보를 수신하실 수 있습니다.

Format Field

마지막으로 포맷 정보입니다. Simple로 지정될 경우 응답의 필드명이 모두 간소화됩니다. 트래픽 부담이 클 때 사용하는 방법입니다.

필드명
타입
내용
필수 여부
기본 값
formatString수신할 포맷
- DEFAULT: 기본형
- SIMPLE: 축약형
XDEFAULT