NAV
python

Upbit Client Official Reference

Upbit OPEN API Client 사용법과 설명에 대한 문서입니다.


Referance

uJhin's BTC
uJhin's ETH

Change Logs

2023

2023-05-22

Update Upbit OPEN API

2022

2022-07-12

Update Upbit OPEN API

2022-06-07

Upbit Client released: v1.3.1.1

2022-03-01

Upbit OPEN API 인증 방식 테스트 완료

2022-02-06

Upbit Client Released: v1.3.1.0

2022-01-14

Upbit Client Released: v1.2.2.4

2021

2021-12-06

Upbit Client Released: v1.2.2.2

2021-12-01

Update Client Released: v1.2.2.1

2021-04-01

Update Client Released: v1.2.0.4

2021-03-19

Update Client Released: v1.2.0.3

2021-03-04

Update Client Released: v1.1.7.6

2021-02-26

Update Client Released: v1.1.7.5

2021-02-23

Update Client Released: v1.1.7.3

2021-02-20

Update Client Released: v1.1.7.0

2021-02-13

Update Client Released: v1.1.6.30

2021-02-05

Update Client Released: v1.1.6.29

2021-01-27

Update Client Released: v1.1.6.25

2021-01-26

Update Client Released: v1.1.6.23

2021-01-22

Update Upbit OPEN API

2021-01-18

Upbit Client Released: v1.1.6.16

2021-01-15

Upbit Client Released: v1.1.6.15

2021-01-12

Upbit Client Released: v1.1.6.14

2021-01-10

Upbit Client Released: v1.1.6.12

2021-01-08

Upbit Client Released: v1.1.6.10

2021-01-07

Upbit Client Released: v1.1.6.8

Intro (개요)

What is This?

Upbit(업비트) Cryptocurrency Exchange Open API Client of Multi-Programming Language Support

Upbit Client(업비트 클라이언트)는 Upbit(업비트) OPEN API에 접근할 수 있는 인터페이스를 제공합니다.

Support

Powered By

Install (설치)

Command

$ pip install upbit-client
$ git clone https://github.com/uJhin/upbit-client.git
$ git clone https://github.com/uJhin/python-upbit-client.git

설치는 git 커맨드를 사용하여 다음과 같이 진행합니다.

git clone https://github.com/uJhin/upbit-client.git

Python 패키지는 아래와 같이 진행합니다.

git clone https://github.com/uJhin/python-upbit-client.git

혹은 pip 커맨드를 사용하여 다음과 같이 진행합니다.

pip install upbit-client

UpbitClient (Upbit 클라이언트 사용하기)

클라이언트 객체 생성

Code Example

from upbit.client import Upbit

access_key = "발급받은 액세스 키"
secret_key = "발급받은 시크릿 키"

client = Upbit(access_key, secret_key)
print(client)

Result

UpbitClient(https://api.upbit.com)

UpbitClient(access_key=None, secret_key=None, **kwargs)

Parameter Description
access_key 발급받은 액세스 키
secret_key 발급받은 시크릿 키
spec_uri Swagger Mapping JSON Path
config Swagger Client Configuration

결과

모든 요청에 대한 결과는 JSON 포맷으로 반환됩니다.

남은 요청 제한 시간에 대한 remaining_request와 응답 결과 result의 키(key) 값을 가집니다.

요청 제한에 대한 부분은 Remaining Requests (요청 수 제한) 섹션에서 다룹니다.

Parameter Description
response 요청에 대한 응답 객체
response.url 요청 URL
response.headers 요청 헤더값
response.status_code HTTP 응답 코드
response.reason 응답 메시지
response.text 요청에 대한 결과(UTF-8 Text 포맷)
response.content 요청에 대한 결과(Byte string 포맷)
response.ok HTTP 상태 코드의 200 OK 여부
remaining_request 남은 요청 제한 시간
result 요청에 대한 결과(JSON 포맷)

참고사항

1. REST API 요청 시 오류가 발생합니다.

API 요청 처리 중 오류가 발생한 경우 HTTP 응답 body에 에러 코드가 함께 반환됩니다. 주요 에러 코드는 본 문서의 에러코드 항목에서 확인하실 수 있습니다.

만약 위 문서에서 확인되지 않는 오류가 발생하는 경우, 해당 에러 코드를 포함하여 업비트 측에 문의주시기 바랍니다.

2. IP 주소를 허용했으나 오류가 발생합니다.

로컬 네트워크에서 확인되는 IP 주소와 실제 통신에 사용하는 IP 주소가 다른 경우가 있습니다.

위 주소를 허용 목록에 등록하신 후 다시 시도 부탁드립니다.

3. 유동 IP 환경에서 이용하고 싶습니다.

주문하기 및 출금하기 API를 이용하시기 위해서는 허용 IP를 필수적으로 입력해주셔야합니다.

Authentication (인증)

Request Example

{
  "access_key": "발급 받은 acccess key (필수)",
  "nonce": "무작위의 UUID 문자열 (필수)",
  "query_hash": "해싱된 query string (파라미터가 있을 경우 필수)",
  "query_hash_alg": "query_hash를 생성하는 데에 사용한 알고리즘 (기본값 : SHA512)"
}

Upbit OPEN API는 기본적으로 REST API 요청시, 발급받은 access key와 secret key로 토큰을 생성하여 Authorization 헤더를 통해 전송합니다. 토큰은 JWT 형식을 따릅니다.

서명 방식은 HS256 을 권장하며, 서명에 사용할 secret은 발급받은 secret key를 사용합니다. Payload의 구성은 예제와 같습니다.

인증방식에 대한 세부적인 코드를 확인하고 싶으시면 여기를 참고해주시기 바랍니다.

Remaining Requests (요청 수 제한)

남은 요청 수 확인하기

Example Code

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.APIKey.APIKey_info()
print(resp)

Result Example

{
  "remaining_request": {
    "group": "default",
    "min": "899",
    "sec": "29"
},
  "result": ...
}

UpbitClient 사용 시 모든 결과는 json 포맷으로 반환되며, remaining_request 키값을 가집니다.

결과

Parameter Description
group 요청에 대한 API Namespace Group (Operation Code)
min 분(minutes)당 남은 요청 횟수
sec 초(seconds)당 남은 요청 횟수

상세 설명

1. EXCHANGE API

주문

초당 8회, 분당 200회

주문 외 API

초당 30회, 분당 900회

Exchange API 추가 안내 사항

2. QUOTATION API

웹 소켓(Websocket) 연결 요청 수 제한

초당 5회, 분당 100회

REST API 요청 수 제한

분당 600회, 초당 10회 (종목, 캔들, 체결, 티커, 호가별)

[Quotation API 추가 안내 사항]

[Exchange API 잔여 요청 수 확인 방법]

Remaining-Req: group=default; min=1799; sec=29

위와 같은 포멧의 응답 해더를 수신했다면, default 라는 그룹에 대하여 해당 초에 29개의 요청, 남은 1분간 1799개의 요청이 가능하다는 것을 의미합니다.

주문하기 Open API의 경우,

Remaining-Req: group=order; min=59; sec=4

위와 같은 응답이 올 수 있으며, 이는 order 라는 그룹에 대해 해당 초에 4번, 남은 1분은 59번의 주문 요청이 가능하다는 것을 의미합니다.

APIKey (API 키)

APIKey_info (API 키 리스트 조회)

API 키 목록 및 만료 일자를 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.APIKey.APIKey_info()
print(resp['result'])

Response Example

[
  {
    "access_key" : "xxxxxxxxxxxxxxxxxxxxxxxx",
    "expire_at" : "2021-03-09T12:39:39.000Z"
  },
  {
    "access_key" : "xxxxxxxxxxxxxxxxxxxxxxxx",
    "expire_at" : "2021-03-09T12:39:39.000Z"
  }
]

Method

GET /v1/api_keys

Operation Code

APIKey.APIKey_info

요청 (Request)

No Parameters

응답 (Response)

Parameter Description
access_key 발급받은 키
expire_at 유효 기간

Account (계좌)

Account_info (전체 계좌 조회)

내가 보유한 자산 리스트를 보여줍니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Account.Account_info()
print(resp['result'])

Response Example

[
    {
        "currency": "BTC",
        "balance": "0.00048",
        "locked": "0.0",
        "avg_buy_price": "20870000",
        "avg_buy_price_modified": false,
        "unit_currency": "KRW"
    },
    {
        "currency": "KRW",
        "balance": "0.34202414",
        "locked": "4999.99999922",
        "avg_buy_price": "0",
        "avg_buy_price_modified": true,
        "unit_currency": "KRW"
    },
    {
        "currency": "ETH",
        "balance": "0.00935861",
        "locked": "0.0",
        "avg_buy_price": "1068000",
        "avg_buy_price_modified": false,
        "unit_currency": "KRW"
    }
]

Method

GET /v1/accounts

Operation Code

Account.Account_info

요청 (Request)

No Parameters

응답 (Response)

Parameter Description
currency 화폐를 의미하는 영문 대문자 코드
balance 주문가능 금액/수량
locked 주문 중 묶여있는 금액/수량
avg_buy_price 매수평균가
avg_buy_price_modified 매수평균가 수정 여부
unit_currency 평단가 기준 화폐

Account_wallet (입출금 현황)

입출금 현황 및 블록 상태를 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Account.Account_wallet()
print(resp['result'])

Response Example

[
    {
        "currency": "BTC",
        "net_type": "BTC",
        "wallet_state": "working",
        "block_state": "normal",
        "block_height": 665013,
        "block_updated_at": "2021-01-07T19:44:40.005+00:00",
        "block_elapsed_minutes": 14
    },
    {
        "currency": "POWR",
        "net_type": "POWR",
        "wallet_state": "working",
        "block_state": "normal",
        "block_height": 11609520,
        "block_updated_at": "2021-01-07T19:54:27.007+00:00",
        "block_elapsed_minutes": 5
    },
    {
        "currency": "ETH",
        "net_type": "ETH",
        "wallet_state": "working",
        "block_state": "normal",
        "block_height": 11609520,
        "block_updated_at": "2021-01-07T19:54:25.242+00:00",
        "block_elapsed_minutes": 5
    },
    {
        "currency": "ETC",
        "net_type": "ETC",
        "wallet_state": "working",
        "block_state": "normal",
        "block_height": 11947575,
        "block_updated_at": "2021-01-07T19:54:38.171+00:00",
        "block_elapsed_minutes": 4
    },
    ...
]

Method

GET /v1/status/wallet

Operation Code

Account.Account_wallet

요청 (Request)

No Parameters

응답 (Response)

Parameter Description
currency 화폐를 의미하는 영문 대문자 코드
net_type 입출금 네트워크
wallet_state 입출금 상태
  • working: 입출금 가능
  • withdraw_only: 출금만 가능
  • deposit_only: 입금만 가능
  • paused: 입출금 중단
  • unsupported : 입출금 미지원
block_state 블록 상태
  • normal: 정상
  • delayed: 지연
  • inactive: 비활성 (점검 등)
block_height 블록 높이
block_updated_at 블록 갱신 시각

Market (마켓)

Market_info_all (마켓 코드 조회)

업비트에서 거래 가능한 마켓 목록을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Market.Market_info_all()
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "korean_name": "비트코인",
        "english_name": "Bitcoin"
    },
    {
        "market": "KRW-ETH",
        "korean_name": "이더리움",
        "english_name": "Ethereum"
    },
    {
        "market": "BTC-ETH",
        "korean_name": "이더리움",
        "english_name": "Ethereum"
    },
    {
        "market": "BTC-LTC",
        "korean_name": "라이트코인",
        "english_name": "Litecoin"
    },
    {
        "market": "BTC-XRP",
        "korean_name": "리플",
        "english_name": "Ripple"
    },
    ...
]

Method

GET /v1/market/all

Operation Code

Market.Market_info_all

요청 (Request)

Parameter Description
isDetails 유의종목 필드과 같은 상세 정보 노출 여부 (선택 파라미터, 기본 값: false)

응답 (Response)

Parameter Description
market 업비트에서 제공중인 시장 정보
korean_name 거래 대상 암호화폐 한글명
english_name 거래 대상 암호화폐 영문명
market_warning 유의 종목 여부; (NONE: 해당 사항 없음, CAUTION: 투자 유의)

Order (주문)

Order_orderbook (오더북; Orderbook)

현재 시세 호가 정보를 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Order.Order_orderbook(
    markets=['KRW-BTC', 'KRW-ETH']
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "timestamp": 1610070624000,
        "total_ask_size": 7.71050069,
        "total_bid_size": 3.33182914,
        "orderbook_units": [
            {
                "ask_price": 43973000.0,
                "bid_price": 43952000.0,
                "ask_size": 0.00166408,
                "bid_size": 0.03190123
            },
            {
                "ask_price": 43974000.0,
                "bid_price": 43951000.0,
                "ask_size": 1.22621878,
                "bid_size": 0.00451153
            },
            {
                "ask_price": 43984000.0,
                "bid_price": 43933000.0,
                "ask_size": 0.05844488,
                "bid_size": 0.5
            },
            {
                "ask_price": 43985000.0,
                "bid_price": 43920000.0,
                "ask_size": 1.24634891,
                "bid_size": 1.04638941
            },
            ...
        ]
    },
    {
        "market": "KRW-ETH",
        "timestamp": 1610070624062,
        "total_ask_size": 292.1165831,
        "total_bid_size": 368.94615831,
        "orderbook_units": [
            {
                "ask_price": 1347000.0,
                "bid_price": 1346000.0,
                "ask_size": 13.27655932,
                "bid_size": 24.64993035
            },
            {
                "ask_price": 1347500.0,
                "bid_price": 1345500.0,
                "ask_size": 16.63316797,
                "bid_size": 0.10945805
            },
            {
                "ask_price": 1348000.0,
                "bid_price": 1345000.0,
                "ask_size": 12.27655416,
                "bid_size": 10.15483109
            },
            {
                "ask_price": 1348500.0,
                "bid_price": 1344500.0,
                "ask_size": 27.44579387,
                "bid_size": 21.77733151
            },
            ...
        ]
    }
]

Method

GET /v1/orderbook

Operation Code

Order.Order_orderbook

요청 (Request)

Parameters Description
markets * 마켓 코드 목록 (ex. KRW-BTC, KRW-ETH)

응답 (Response)

Parameters Description
market 마켓 코드
timestamp 호가 생성 시각
total_ask_size 호가 매도 총 잔량
total_bid_size 호가 매수 총량
orderbook_units 호가
orderbook_units.ask_price 매도호가
orderbook_units.bid_price 매수호가
orderbook_units.ask_size 매도 잔량
orderbook_units.bid_size 매수 잔량

Order_chance (주문 가능 정보)

마켓별 주문 가능 정보를 확인합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Order.Order_chance(
    market='KRW-BTC'
)
print(resp['result'])

Response Example

{
    "bid_fee": "0.0005",
    "ask_fee": "0.0005",
    "maker_bid_fee": "0.0005",
    "maker_ask_fee": "0.0005",
    "market": {
        "id": "KRW-BTC",
        "name": "BTC/KRW",
        "order_types": [
            "limit"
        ],
        "order_sides": [
            "ask",
            "bid"
        ],
        "bid": {
            "currency": "KRW",
            "price_unit": null,
            "min_total": 5000
        },
        "ask": {
            "currency": "BTC",
            "price_unit": null,
            "min_total": 5000
        },
        "max_total": "1000000000.0",
        "state": "active"
    },
    "bid_account": {
        "currency": "KRW",
        "balance": "0.34202414",
        "locked": "4999.99999922",
        "avg_buy_price": "0",
        "avg_buy_price_modified": true,
        "unit_currency": "KRW"
    },
    "ask_account": {
        "currency": "BTC",
        "balance": "0.00048",
        "locked": "0.0",
        "avg_buy_price": "20870000",
        "avg_buy_price_modified": false,
        "unit_currency": "KRW"
    }
}

Method

GET /v1/orders/chance

Operation Code

Order.Order_chance

요청 (Request)

Parameters Description
market * 마켓 ID

응답 (Response)

Parameters Description
bid_fee 매수 수수료 비율
ask_fee 매도 수수료 비율
maker_bid_fee 매수 시 메이커 수수료 비율
maker_ask_fee 매도 시 메이커 수수료 비율
market 마켓에 대한 정보
market.id 마켓 ID
market.name 마켓 이름
market.order_types 지원 주문 방식
market.order_sides 지원 주문 종류
market.bid 매수 시 제약사항
market.bid.currency 화폐를 의미하는 영문 대문자 코드
market.bid.price_unit 주문금액 단위
market.bid.min_total 최소 매도/매수 금액
market.ask 매도 시 제약사항
market.ask.currency 화폐를 의미하는 영문 대문자 코드
market.ask.price_unit 주문금액 단위
market.ask.min_total 최소 매도/매수 금액
market.max_total 최대 매도/매수 금액
market.max_total 최대 매도/매수 금액
market.state 마켓 운영 상태
bid_account 매수 시 사용하는 화폐의 계좌 상태
bid_account.currency 화폐를 의미하는 영문 대문자 코드
bid_account.balance 주문가능 금액/수량
bid_account.locked 주문 중 묶여있는 금액/수량
bid_account.avg_buy_price 매수평균가
bid_account.avg_buy_price_modified 매수평균가 수정 여부
bid_account.unit_currency 평단가 기준 화폐
ask_account 매도 시 사용하는 화폐의 계좌 상태
ask_account.currency 화폐를 의미하는 영문 대문자 코드
ask_account.balance 주문가능 금액/수량
ask_account.locked 주문 중 묶여있는 금액/수량
ask_account.avg_buy_price 매수평균가
ask_account.avg_buy_price_modified 매수평균가 수정 여부
ask_account.unit_currency 평단가 기준 화폐

Order_info (개별 주문 조회)

주문 UUID 를 통해 개별 주문건을 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Order.Order_info(
    uuid='9ca023a5-851b-4fec-9f0a-48cd83c2eaae'
)
print(resp['result'])

Response Example

{
  "uuid": "9ca023a5-851b-4fec-9f0a-48cd83c2eaae",
  "side": "ask",
  "ord_type": "limit",
  "price": "4280000.0",
  "state": "done",
  "market": "KRW-BTC",
  "created_at": "2019-01-04T13:48:09+09:00",
  "volume": "1.0",
  "remaining_volume": "0.0",
  "reserved_fee": "0.0",
  "remaining_fee": "0.0",
  "paid_fee": "2140.0",
  "locked": "0.0",
  "executed_volume": "1.0",
  "trades_count": 1,
  "trades": [
    {
      "market": "KRW-BTC",
      "uuid": "9e8f8eba-7050-4837-8969-cfc272cbe083",
      "price": "4280000.0",
      "volume": "1.0",
      "funds": "4280000.0",
      "side": "ask"
    }
  ]
}

Method

GET /v1/order

Operation Code

Order.Order_info

요청 (Request)

Parameter Description
uuid 주문 UUID
identifier 조회용 사용자 지정 값

응답 (Response)

Parameter Description
uuid 주문의 고유 아이디
side 주문 종류
ord_type 주문 방식
price 주문 당시 화폐 가격
state 주문 상태
market 마켓의 유일키
created_at 주문 생성 시간
volume 사용자가 입력한 주문 양
remaining_volume 체결 후 남은 주문 양
reserved_fee 수수료로 예약된 비용
remaining_fee 남은 수수료
paid_fee 사용된 수수료
locked 거래에 사용중인 비용
executed_volume 체결된 양
trade_count 해당 주문에 걸린 체결 수
trades 체결
trades.market 마켓의 유일 키
trades.uuid 체결의 고유 아이디
trades.price 체결 가격
trades.volume 체결 양
trades.funds 체결된 총 가격
trades.side 체결 종류
trades.created_at 체결 시각

Order_info_all (주문 리스트 조회)

주문 리스트를 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Order.Order_info_all()
print(resp['result'])

Response Example

[
  {
    "uuid": "9ca023a5-851b-4fec-9f0a-48cd83c2eaae",
    "side": "ask",
    "ord_type": "limit",
    "price": 4280000,
    "state": "done",
    "market": "KRW-BTC",
    "created_at": {},
    "volume": 1,
    "remaining_volume": 0,
    "reserved_fee": 0,
    "remaining_fee": 0,
    "paid_fee": 2140,
    "locked": 0,
    "executed_volume": 1,
    "trades_count": 1
  },
  ...
]

Method

GET /v1/orders

Operation Code

Order.Order_info_all

요청 (Request)

Parameter Description
market 마켓 ID
uuids 주문 UUID의 목록
identifiers 주문 identifier의 목록
state 주문 상태
  • wait: 주문 대기 (default)
  • watch: 예약주문 대기
  • done: 전체 체결 완료
  • cancel: 주문 취소
states 주문 상태의 목록

* 미체결 주문(wait, watch)과 완료 주문(done, cancel)은 혼합하여 조회하실 수 없습니다.
page 페이지 수 (default: 1)
limit 요청 개수 (default: 100)
order_by 정렬 방식
  • asc: 오름 차순
  • desc: 내림 차순 (default)

응답 (Response)

Parameter Description
uuid 주문의 고유 아이디
side 주문 종류
ord_type 주문 방식
price 주문 당시 화폐 가격
state 주문 상태
market 마켓의 유일키
created_at 주문 생성 시간
volume 사용자가 입력한 주문 양
remaining_volume 체결 후 남은 주문 양
reserved_fee 수수료로 예약된 비용
remaining_fee 남은 수수료
paid_fee 사용된 수수료
locked 거래에 사용중인 비용
executed_volume 체결된 양
trade_count 해당 주문에 걸린 체결 수

Order_new (주문하기)

새로운 주문 요청을 합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Order.Order_new(
    market='KRW-BTC',
    side='bid',
    volume='0.01',
    price='100.0',
    ord_type='limit'
)
print(resp['result'])

Response Example

{
  "uuid":"cdd92199-2897-4e14-9448-f923320408ad",
  "side":"bid",
  "ord_type":"limit",
  "price":"100.0",
  "avg_price":"0.0",
  "state":"wait",
  "market":"KRW-BTC",
  "created_at":"2018-04-10T15:42:23+09:00",
  "volume":"0.01",
  "remaining_volume":"0.01",
  "reserved_fee":"0.0015",
  "remaining_fee":"0.0015",
  "paid_fee":"0.0",
  "locked":"1.0015",
  "executed_volume":"0.0",
  "trades_count":0
}

Method

POST /v1/orders

Operation Code

Order.Order_new

요청 (Request)

Parameter Description
market * 마켓 ID (필수)
side * 주문 종류 (필수)
  • bid: 매수
  • ask: 매도
volume * 주문량 (지정가, 시장가 매도 시 필수)
price * 주문 가격. (지정가, 시장가 매수 시 필수)

ex) KRW-BTC 마켓에서 1BTC당 1,000 KRW로 거래할 경우, 값은 1000 이 된다.
ex) KRW-BTC 마켓에서 1BTC당 매도 1호가가 500 KRW 인 경우, 시장가 매수 시 값을 1000으로 세팅하면 2BTC가 매수된다.
(수수료가 존재하거나 매도 1호가의 수량에 따라 상이할 수 있음)
ord_type * 주문 유형 (필수)
  • limit: 지정가 주문
  • price: 시장가 주문 (매수)
  • market: 시장가 주문 (매도)
identifier 주문 조회용 사용자 지정값 (선택)

응답 (Response)

Parameter Description
uuid 주문의 고유 아이디
side 주문 종류
ord_type 주문 방식
price 주문 당시 화폐 가격
avg_price 체결 가격의 평균가
state 주문 상태
market 마켓의 유일키
created_at 주문 생성 시간
volume 사용자가 입력한 주문 양
remaining_volume 체결 후 남은 주문 양
reserved_fee 수수료로 예약된 비용
remaining_fee 남은 수수료
paid_fee 사용된 수수료
locked 거래에 사용중인 비용
executed_volume 체결된 양
trade_count 해당 주문에 걸린 체결 수

거래 관련 질문

1. 업비트 앱/웹에서 표시되는 거래내역과 API의 응답이 다릅니다.

업비트 웹/앱에서 표시되는 거래내역은 체결 목록이며, Open API에서 확인하실 수 있는 내용은 주문 목록입니다. 하나의 주문에 여러 개의 체결이 발생할 수 있으므로 두 내용은 다를 수 있습니다.

체결 목록을 확인하기 위해서는 주문 조회 API 응답의 trades 필드를 통해 확인하실 수 있습니다.

2. 주문 리스트 조회 API에서 시장가 주문이 조회되지 않습니다.

시장가 매수 주문은 체결 후 주문 상태가 cancel, done 두 경우 모두 발생할 수 있습니다.

시장가로 체결이 일어난 후 주문 잔량이 발생하는 경우, 남은 잔량이 반환되며 cancel 처리됩니다. 대부분의 경우 소수점 아래 8자리까지 나누어 떨어지지 않는 미미한 금액이 주문 잔량으로 발생하게 됩니다. 만일 주문 잔량 없이 딱 맞아떨어지게 체결이 발생한 경우에는 주문 상태가 done이 됩니다.

이처럼 소수점 아래 자릿수가 나누어 떨어지지 않는 시장가 매수 경우에는 소액의 잔량이 발생하여, 해당 잔량은 계좌로 반환되고 주문은 취소 처리됩니다. 시장가 매도 주문의 경우 수량을 통해 요청이 이루어지므로 나눗셈 연산이 없어 잔량이 발생하지 않습니다.

또한 주문 리스트 조회 API에는 states 필드가 있어, 여러 상태를 동시에 조회할 수 있는 점 참고 부탁드립니다.

3. 시장가 주문 요청에 실패합니다.

시장가 주문의 경우 매수/매도할 가격을 명시하지 않으므로, price 혹은 volume 중 하나의 값만 존재해야합니다. 자세한 내용은 위의 주문하기 문서를 다시 참고 부탁드립니다.

4. 주문하기 요청 횟수 제한이 남아있는데 오류가 발생합니다.

해당 현상은 주문 요청이 일시적으로 폭증하는 상황에 주문 안정화 시스템이 동작할 때 발생합니다.

주문 안정화 시스템은 Open API 및 업비트 앱/웹 여부와 무관하게 시스템 전체에 적용됩니다. 때문에 API 요청 수 제한이 남아있더라도 안정화 시스템 동작 중에는 주문 요청에 실패할 수 있습니다.

해당 오류가 발생하는 경우 수 초 후 다시 주문 요청 부탁드립니다.

Order_cancel (주문 취소 접수)

주문 UUID를 통해 해당 주문에 대한 취소 접수를 합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Order.Order_cancel(
    uuid='cdd92199-2897-4e14-9448-f923320408ad'
)
print(resp['result'])

Response Example

{
  "uuid":"cdd92199-2897-4e14-9448-f923320408ad",
  "side":"bid",
  "ord_type":"limit",
  "price":"100.0",
  "state":"wait",
  "market":"KRW-BTC",
  "created_at":"2018-04-10T15:42:23+09:00",
  "volume":"0.01",
  "remaining_volume":"0.01",
  "reserved_fee":"0.0015",
  "remaining_fee":"0.0015",
  "paid_fee":"0.0",
  "locked":"1.0015",
  "executed_volume":"0.0",
  "trades_count":0
}

Method

DELETE /v1/order

Operation Code

Order.Order_cancel

요청 (Request)

Parameter Description
uuid 주문 UUID
identifier 조회용 사용자 지정 값

응답 (Response)

Parameter Description
uuid 주문의 고유 아이디
side 주문 종류
ord_type 주문 방식
price 주문 당시 화폐 가격
state 주문 상태
market 마켓의 유일키
created_at 주문 생성 시간
volume 사용자가 입력한 주문 양
remaining_volume 체결 후 남은 주문 양
reserved_fee 수수료로 예약된 비용
remaining_fee 남은 수수료
paid_fee 사용된 수수료
locked 거래에 사용중인 비용
executed_volume 체결된 양
trade_count 해당 주문에 걸린 체결 수

Deposit (입금)

Deposit_info_all (입금 리스트 조회)

입금 리스트 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Deposit.Deposit_info_all()
print(resp['result'])

Response Example

[
    {
        "type": "deposit",
        "uuid": "20c84493-6e70-4e54-83ce-90915a19d110",
        "currency": "KRW",
        "net_type": "KRW",
        "txid": "BKD-2021-01-07-82a877188ce61d7b4b3c709dad",
        "state": "ACCEPTED",
        "created_at": "2021-01-07T11:59:31+09:00",
        "done_at": "2021-01-07T12:00:12+09:00",
        "amount": "5000.0",
        "fee": "0.0",
        "transaction_type": "default"
    },
    {
        "type": "deposit",
        "uuid": "7b34ea4d-fb46-4da1-9172-8dd42b8814f5",
        "currency": "KRW",
        "net_type": "KRW",
        "txid": "BKD-2021-01-06-fd2ba0cc92670c72fba22f78d0",
        "state": "ACCEPTED",
        "created_at": "2021-01-06T20:42:41+09:00",
        "done_at": "2021-01-06T20:43:15+09:00",
        "amount": "10000.0",
        "fee": "0.0",
        "transaction_type": "default"
    },
    ...
]

Method

GET /v1/deposits

Operation Code

Deposit.Deposit_info_all

요청 (Request)

Parameter Description
currency Currency 코드
state 입금 상태
  • submitting: 처리 중
  • submitted: 처리 완료
  • almost_accepted: 입금 대기 중
  • rejected: 거절
  • accepted: 승인됨
  • processing: 처리 중
uuids 입금 UUID의 목록
txids 입금 TXID의 목록
limit 개수 제한 (default: 100, limit: 100)
page 페이지 수 (default: 1)
order_by 정렬 방식
  • asc: 오름 차순
  • desc: 내림 차순 (default)

응답 (Response)

Parameter Description
type 입출금 종류
uuid 입금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
net_type 입금 네트워크
txid 입금의 트랜잭션 아이디
state 입금 상태
created_at 입금 생성 시간
done_at 입금 완료 시간
amount 입금 수량
fee 입금 수수료
transaction_type 입금 유형
  • default: 일반 입금
  • internal: 바로 입금

Deposit_info (개별 입금 조회)

개별 입금 내역을 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Deposit.Deposit_info(
    uuid='20c84493-6e70-4e54-83ce-90915a19d110'
)
print(resp['result'])

Response Example

{
    "type": "deposit",
    "uuid": "20c84493-6e70-4e54-83ce-90915a19d110",
    "currency": "KRW",
    "net_type": "KRW",
    "txid": "BKD-2021-01-07-82a877188ce61d7b4b3c709dad",
    "state": "ACCEPTED",
    "created_at": "2021-01-07T11:59:31+09:00",
    "done_at": "2021-01-07T12:00:12+09:00",
    "amount": "5000.0",
    "fee": "0.0",
    "transaction_type": "default"
}

Method

GET /v1/deposit

Operation Code

Deposit.Deposit_info

요청 (Request)

Parameter Description
uuid 입금 UUID
txid 입금 TXID
currency Currency 코드

응답 (Response)

Parameter Description
type 입출금 종류
uuid 입금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
net_type 입금 네트워크
txid 입금의 트랜잭션 아이디
state 입금 상태
created_at 입금 생성 시간
done_at 입금 완료 시간
amount 입금 수량
fee 입금 수수료
transaction_type 입금 유형
  • default: 일반 입금
  • internal: 바로 입금

Deposit_coin_addresses (전체 입금 주소 조회)

내가 보유한 자산 리스트를 보여줍니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Deposit.Deposit_coin_addresses()
print(resp['result'])

Response Example

[
    {
        "currency": "BTC",
        "net_type": "BTC",
        "deposit_address": "3NVw2seiTQddGQwc1apqudKxuTqebpyL3s",
        "secondary_address": null
    },
    {
        "currency": "ETH",
        "net_type": "ETH",
        "deposit_address": "0x60dd373f59862d9df776596889b997e24bee42eb",
        "secondary_address": null
    },
    {
        "currency": "EOS",
        "net_type": "EOS",
        "deposit_address": "eosupbitsusr",
        "secondary_address": "516252ca-0993-454d-bd8b-6bc9db2d4c25"
    },
    {
        "currency": "XRP",
        "net_type": "XRP",
        "deposit_address": "raQwCVAJVqjrVm1Nj5SFRcX8i22BhdC9WA",
        "secondary_address": "22325934"
    },
    ...
]

Method

GET /v1/deposits/coin_addresses

Operation Code

Deposit.Deposit_coin_addresses

요청 (Request)

No Parameters

응답 (Response)

Parameter Description
currency 화폐를 의미하는 영문 대문자 코드
net_type 입금 네트워크
deposit_address 입금 주소
secondary_address 2차 입금 주소

Deposit_coin_address (개별 입금 주소 조회)

내가 보유한 개별 자산 내역을 보여줍니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Deposit.Deposit_coin_address(
    currency='BTC',
    net_type='BTC'
)
print(resp['result'])

Response Example

{
    "currency": "BTC",
    "net_type": "BTC",
    "deposit_address": "3NVw2seiTQddGQwc1apqudKxuTqebpyL3s",
    "secondary_address": null
}

Method

GET /v1/deposits/coin_address

Operation Code

Deposit.Deposit_coin_address

요청 (Request)

Parameter Description
currency * 화폐를 의미하는 영문 대문자 코드
net_type * 입금 네트워크

응답 (Response)

Parameter Description
currency 화폐를 의미하는 영문 대문자 코드
net_type 입금 네트워크
deposit_address 입금 주소
secondary_address 2차 입금 주소

Deposit_generate_coin_address (입금 주소 생성 요청)

입금 주소 생성을 요청합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Deposit.Deposit_generate_coin_address(
    currency='SNT',
    net_type='SNT'
)
print(resp['result'])

Response1 Example: 201 Created

{
    "success": true,
    "message": "SNT 입금주소를 생성중입니다."
}

Response2 Example: 200 OK

{
    "currency": "SNT",
    "net_type": "SNT",
    "deposit_address": "0x72012d8af69263a509af8cd522374fc65c454539",
    "secondary_address": null
}

Method

POST /v1/deposits/generate_coin_address

Operation Code

Deposit.Deposit_generate_coin_address

요청 (Request)

Parameter Description
currency * 화폐를 의미하는 영문 대문자 코드
net_type * 입금 네트워크

응답 (Response1)

Parameter Description
success 요청 성공 여부
message 요청 결과에 대한 메세지

응답 (Response2)

Parameter Description
currency 화폐를 의미하는 영문 대문자 코드
net_type 입금 네트워크
deposit_address 입금 주소
secondary_address 2차 입금 주소

Withdraw (출금)

Withdraw_info_all (출금 리스트 조회)

출금 리스트 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_info_all()
print(resp['result'])

Response Example

[
  {
    "type": "withdraw",
    "uuid": "35a4f1dc-1db5-4d6b-89b5-7ec137875956",
    "currency": "XRP",
    "net_type": "XRP",
    "txid": "98c15999f0bdc4ae0e8a-ed35868bb0c204fe6ec29e4058a3451e-88636d1040f4baddf943274ce37cf9cc",
    "state": "DONE",
    "created_at": "2019-02-28T15:17:51+09:00",
    "done_at": "2019-02-28T15:22:12+09:00",
    "amount": 1,
    "fee": 0,
    "transaction_type": "default"
  },
  ...
]

Method

GET /v1/withdraws

Operation Code

Withdraw.Withdraw_info_all

요청 (Request)

Parameter Description
currency Currency 코드
state 출금 상태
  • submitting: 처리 중
  • submitted: 처리 완료
  • almost_accepted: 출금 대기 중
  • rejected: 거부
  • accepted: 승인됨
  • processing: 처리 중
  • done: 완료
  • canceled: 취소됨
uuids 출금 UUID의 목록
txids 출금 TXID의 목록
limit 개수 제한 (default: 100, limit: 100)
page 페이지 수 (default: 1)
order_by 정렬 방식
  • asc: 오름 차순
  • desc: 내림 차순 (default)

응답 (Response)

Parameter Description
type 입출금 종류
uuid 출금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
net_type 출금 네트워크
currency 화폐를 의미하는 영문 대문자 코드
txid 출금의 트랜잭션 아이디
state 출금 상태
created_at 출금 생성 시간
done_at 출금 완료 시간
amount 출금 금액/수량
fee 출금 수수료
transaction_type 출금 유형
  • default: 일반 출금
  • internal: 바로 출금

Withdraw_info (개별 출금 조회)

출금 UUID를 통해 개별 출금 정보를 조회합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_info(
    uuid='35a4f1dc-1db5-4d6b-89b5-7ec137875956'
)
print(resp['result'])

Response Example

{
  "type": "withdraw",
  "uuid": "35a4f1dc-1db5-4d6b-89b5-7ec137875956",
  "currency": "XRP",
  "net_type": "XRP",
  "txid": "98c15999f0bdc4ae0e8a-ed35868bb0c204fe6ec29e4058a3451e-88636d1040f4baddf943274ce37cf9cc",
  "state": "DONE",
  "created_at": "2019-02-28T15:17:51+09:00",
  "done_at": "2019-02-28T15:22:12+09:00",
  "amount": 1,
  "fee": 0,
  "transaction_type": "default"
}

Method

GET /v1/withdraw

Operation Code

Withdraw.Withdraw_info

요청 (Request)

Parameter Description
uuid 출금 UUID
txid 출금 TXID
currency Currency 코드

응답 (Response)

Parameter Description
type 입출금 종류
uuid 출금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
net_type 출금 네트워크
currency 화폐를 의미하는 영문 대문자 코드
txid 출금의 트랜잭션 아이디
state 출금 상태
created_at 출금 생성 시간
done_at 출금 완료 시간
amount 출금 수량
fee 출금 수수료
transaction_type 출금 유형
  • default: 일반 출금
  • internal: 바로 출금

Withdraw_chance (출금 가능 정보)

해당 통화의 가능한 출금 정보를 확인합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_chance(
    currency='BTC',
    net_type='BTC'
)
print(resp['result'])

Response Example

{
    "member_level": {
        "security_level": 4,
        "fee_level": 0,
        "email_verified": true,
        "identity_auth_verified": true,
        "bank_account_verified": true,
        "kakao_pay_auth_verified": true,
        "locked": false,
        "wallet_locked": false
    },
    "currency": {
        "code": "BTC",
        "withdraw_fee": "0.0009",
        "is_coin": true,
        "wallet_state": "working",
        "wallet_support": [
            "deposit",
            "withdraw"
        ]
    },
    "account": {
        "currency": "BTC",
        "balance": "0.00048",
        "locked": "0.0",
        "avg_buy_price": "20870000",
        "avg_buy_price_modified": false,
        "unit_currency": "KRW"
    },
    "withdraw_limit": {
        "currency": "BTC",
        "onetime": "50.0",
        "daily": null,
        "remaining_daily": "0.0",
        "remaining_daily_fiat": "1000000000.0",
        "fiat_currency": "KRW",
        "minimum": "0.001",
        "fixed": 8,
        "can_withdraw": true,
        "remaining_daily_krw": "1000000000.0"
    }
}

Method

GET /v1/withdraws/chance

Operation Code

Withdraw.Withdraw_chance

요청 (Request)

Parameter Description
currency * 화폐를 의미하는 영문 대문자 코드
net_type * 출금 네트워크

응답 (Response)

Parameter Description
member_level 사용자의 보안 등급 정보
member_level.security_level 사용자의 보안 등급
member_level.fee_level 사용자의 수수료 등급
member_level.email_verified 사용자의 이메일 인증 여부
member_level.identity_auth_verified 사용자의 실명 인증 여부
member_level.bank_account_verified 사용자의 계좌 인증 여부
member_level.kakao_pay_auth_verified 사용자의 카카오페이 인증 여부
member_level.locked 사용자의 계정 보호 상태
member_level.wallet_locked 사용자의 출금 보호 상태
currency 화폐 정보
currency.code 화폐를 의미하는 영문 대문자 코드
currency.withdraw_fee 해당 화폐의 출금 수수료
currency.is_coin 화폐의 코인 여부
currency.wallet_state 해당 화폐의 지갑 상태
currency.wallet_support 해당 화폐가 지원하는 입출금 정보
account 사용자의 계좌 정보
account.currency 화폐를 의미하는 영문 대문자 코드
account.balance 주문 가능 금액/수량
account.locked 주문 중 묶여있는 금액/수량
account.avg_buy_price 매수 평균가
account.avg_buy_price_modified 매수 평균가 수정 여부
account.unit_currency 평단가 기준 화폐
withdraw_limit 출금 제약 정보
withdraw_limit.currency 화폐를 의미하는 영문 대문자 코드
withdraw_limit.minimum 출금 최소 금액/수량
withdraw_limit.onetime 1회 출금 한도
withdraw_limit.daily 1일 출금 한도
withdraw_limit.remaining_daily 1일 잔여 출금 한도
withdraw_limit.remaining_daily_krw 통합 1일 잔여 출금 한도
withdraw_limit.fixed 출금 금액/수량 소수점 자리 수
withdraw_limit.can_withdraw 출금 지원 여부

Withdraw_coin (디지털 자산 출금 하기)

디지털 자산 출금을 요청합니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_coin(
    currency='BTC',
    net_type='BTC',
    amount='0.01',
    address='3NVw2seiTQddGQwc1apqudKxuTqebpyL3s'
)
print(resp['result'])

Response Example

{
  "type": "withdraw",
  "uuid": "9f432943-54e0-40b7-825f-b6fec8b42b79",
  "currency": "BTC",
  "net_type": "BTC",
  "txid": "ebe6937b-130e-4066-8ac6-4b0e67f28adc",
  "state": "processing",
  "created_at": "2018-04-13T11:24:01+09:00",
  "done_at": null,
  "amount": "0.01",
  "fee": "0.0",
  "krw_amount": "80420.0",
  "transaction_type": "default"
}

Method

POST /v1/withdraws/coin

Operation Code

Withdraw.Withdraw_coin

요청 (Request)

Parameter Description
currency * Currency 코드
net_type * 출금 네트워크
amount * 출금 수량
address * 출금 가능 주소에 등록된 출금 주소
secondary_address 2차 출금 주소 (필요한 코인에 한해서)
transaction_type 출금 유형
  • default: 일반 출금
  • internal: 바로 출금

응답 (Response)

Parameter Description
type 입출금 종류
uuid 출금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
net_type 출금 네트워크
txid 출금의 트랜잭션 아이디
state 출금 상태
created_at 출금 생성 시간
done_at 출금 완료 시간
amount 출금 수량
fee 출금 수수료
krw_amount 원화 환산 가격
transaction_type 출금 유형
  • default: 일반 출금
  • internal: 바로 출금

Withdraw_krw (원화 출금 하기)

원화 출금 요청을 합니다. 등록된 출금 계좌로 출금됩니다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_krw(
    amount='10000'
)
print(resp['result'])

Response Example

{
  "type": "withdraw",
  "uuid": "35a4f1dc-1db5-4d6b-89b5-7ec137875956",
  "currency": "KRW",
  "txid": "98c15999f0bdc4ae0e8a-ed35868bb0c204fe6ec29e4058a3451e-88636d1040f4baddf943274ce37cf9cc",
  "state": "DONE",
  "created_at": "2019-02-28T15:17:51+09:00",
  "done_at": "2019-02-28T15:22:12+09:00",
  "amount": 1,
  "fee": 0,
  "transaction_type": "default"
}

Method

POST /v1/withdraws/krw

Operation Code

Withdraw.Withdraw_krw

요청 (Request)

Parameter Description
amount * 출금액 (출금 원화 수량)
two_factor_type 2차 인증 수단 (기본값: kakao_pay)
  • kakao_pay: 카카오 페이 인증 (기본값)
  • naver: 네이버 인증

응답 (Response)

Parameter Description
type 입출금 종류
uuid 출금에 대한 고유 아이디
currency 화폐를 의미하는 영문 대문자 코드
txid 출금의 트랜잭션 아이디
state 출금 상태
created_at 출금 생성 시간
done_at 출금 완료 시간
amount 출금 수량
fee 출금 수수료
transaction_type 출금 유형
  • default: 일반 출금
  • internal: 바로 출금

Withdraw_coin_addresses (출금 허용 주소 리스트 조회)

등록된 출금 허용 주소 목록을 조회한다.

Request Example

from upbit.client import Upbit

access_key = "Your Access Key"
secret_key = "Your Secret Key"

client = Upbit(access_key, secret_key)
resp = client.Withdraw.Withdraw_coin_addresses()
print(resp['result'])

Response Example

{
  "currency": "BTC",
  "net_type": "BTC",
  "withdraw_address": "3NVw2seiTQddGQwc1apqudKxuTqebpyL3s",
  "secondary_address": null
}

Method

POST /v1/withdraws/coin_addresses

Operation Code

Withdraw.Withdraw_coin_addresses

요청 (Request)

No Parameters

응답 (Response)

Parameter Description
currency 출금 화폐
net_type 출금 네트워크
withdraw_address 출금 주소
secondary_address 2차 출금 주소 (필요한 디지털 자산에 한해서)

Candle (시세 캔들; 봉)

Candle_minutes (분; Minute 캔들)

분(Miniute) 단위로 시세 캔들을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Candle.Candle_minutes(
    unit=1,
    market='KRW-BTC'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "candle_date_time_utc": "2021-01-08T17:05:00",
        "candle_date_time_kst": "2021-01-09T02:05:00",
        "opening_price": 47550000.0,
        "high_price": 47563000.0,
        "low_price": 47550000.0,
        "trade_price": 47551000.0,
        "timestamp": 1610125540014,
        "candle_acc_trade_price": 44005459.60087,
        "candle_acc_trade_volume": 0.92535793,
        "unit": 1
    },
    ...
]

Method

GET /v1/candles/minutes/{unit}

Operation Code

Candle.Candle_minutes

요청 (Request)

Parameter Description
unit * 분 단위 (가능한 값: 1, 3, 5, 15, 10, 30, 60, 240)
market * 마켓 코드 (ex. KRW-BTC, BTC-BCC)
to 마지막 캔들 시각 (exclusive). 포맷 : yyyy-MM-dd'T'HH:mm:ssXXX or yyyy-MM-dd HH:mm:ss. 비워서 요청시 가장 최근 캔들
count 캔들 개수 (최대 200개까지 요청 가능)

응답 (Response)

Parameter Description
market 마켓명
candle_date_time_utc 캔들 기준 시각(UTC 기준)
candle_date_time_kst 캔들 기준 시각(KST 기준)
opening_price 시가
high_price 고가
low_price 저가
trade_price 종가
timestamp 해당 캔들에서 마지막 틱이 저장된 시각
candle_acc_trade_price 누적 거래 금액
candle_acc_trade_volume 누적 거래량
unit 분 단위 (유닛)

Candle_days (일; Day 캔들)

일(Day) 단위로 시세 캔들을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Candle.Candle_days(
    market='KRW-BTC'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "candle_date_time_utc": "2021-01-08T00:00:00",
        "candle_date_time_kst": "2021-01-08T09:00:00",
        "opening_price": 44698000.0,
        "high_price": 48550000.0,
        "low_price": 42271000.0,
        "trade_price": 47544000.0,
        "timestamp": 1610126678593,
        "candle_acc_trade_price": 868607517589.245,
        "candle_acc_trade_volume": 18953.44414088,
        "prev_closing_price": 44698000.0,
        "change_price": 2846000.0,
        "change_rate": 0.0636717527
    },
    ...
]

Method

GET /v1/candles/days

Operation Code

Candle.Candle_days

요청 (Request)

Parameter Description
market * 마켓 코드 (ex. KRW-BTC, BTC-BCC)
to 마지막 캔들 시각 (exclusive). 포맷 : yyyy-MM-dd'T'HH:mm:ssXXX or yyyy-MM-dd HH:mm:ss. 비워서 요청시 가장 최근 캔들
convertingPriceUnit 종가 환산 화폐 단위 (생략 가능, KRW로 명시할 시 원화 환산 가격을 반환.)

응답 (Response)

Parameter Description
market 마켓명
candle_date_time_utc 캔들 기준 시각(UTC 기준)
candle_date_time_kst 캔들 기준 시각(KST 기준)
opening_price 시가
high_price 고가
low_price 저가
trade_price 종가
timestamp 해당 캔들에서 마지막 틱이 저장된 시각
candle_acc_trade_price 누적 거래 금액
candle_acc_trade_volume 누적 거래량
prev_closing_price 전일 종가(UTC 0시 기준)
change_price 전일 종가 대비 변화 금액
change_rate 전일 종가 대비 변화량
converted_trade_price 종가 환산 화폐 단위로 환산된 가격(요청에 convertingPriceUnit 파라미터 없을 시 해당 필드 포함되지 않음.)

Candle_weeks (주; Week 캔들)

주(Week) 단위로 시세 캔들을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Candle.Candle_weeks(
    market='KRW-BTC'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "candle_date_time_utc": "2021-01-04T00:00:00",
        "candle_date_time_kst": "2021-01-04T09:00:00",
        "opening_price": 37537000.0,
        "high_price": 48550000.0,
        "low_price": 33000000.0,
        "trade_price": 47617000.0,
        "timestamp": 1610126559879,
        "candle_acc_trade_price": 3531977900551.1753,
        "candle_acc_trade_volume": 88370.43948385,
        "first_day_of_period": "2021-01-04"
    },
    ...
]

Method

GET /v1/candles/weeks

Operation Code

Candle.Candle_weeks

요청 (Request)

Parameter Description
market * 마켓 코드 (ex. KRW-BTC, BTC-BCC)
to 마지막 캔들 시각 (exclusive). 포맷 : yyyy-MM-dd'T'HH:mm:ssXXX or yyyy-MM-dd HH:mm:ss. 비워서 요청시 가장 최근 캔들
count 캔들 개수 (최대 200개까지 요청 가능)

응답 (Response)

Parameter Description
market 마켓명
candle_date_time_utc 캔들 기준 시각(UTC 기준)
candle_date_time_kst 캔들 기준 시각(KST 기준)
opening_price 시가
high_price 고가
low_price 저가
trade_price 종가
timestamp 해당 캔들에서 마지막 틱이 저장된 시각
candle_acc_trade_price 누적 거래 금액
candle_acc_trade_volume 누적 거래량
first_day_of_period 캔들 기간의 가장 첫 날

Candle_month (월; Month 캔들)

월(Month) 단위로 시세 캔들을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Candle.Candle_month(
    market='KRW-BTC'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "candle_date_time_utc": "2021-01-01T00:00:00",
        "candle_date_time_kst": "2021-01-01T09:00:00",
        "opening_price": 32037000.0,
        "high_price": 48550000.0,
        "low_price": 31800000.0,
        "trade_price": 47609000.0,
        "timestamp": 1610126792251,
        "candle_acc_trade_price": 5279753367606.828,
        "candle_acc_trade_volume": 136975.61257404,
        "first_day_of_period": "2021-01-01"
    },
    ...
]

Method

GET /v1/candles/months

Operation Code

Candle.Candle_month

요청 (Request)

Parameter Description
market * 마켓 코드 (ex. KRW-BTC, BTC-BCC)
to 마지막 캔들 시각 (exclusive). 포맷 : yyyy-MM-dd'T'HH:mm:ssXXX or yyyy-MM-dd HH:mm:ss. 비워서 요청시 가장 최근 캔들
count 캔들 개수 (최대 200개까지 요청 가능)

응답 (Response)

Parameter Description
market 마켓명
candle_date_time_utc 캔들 기준 시각(UTC 기준)
candle_date_time_kst 캔들 기준 시각(KST 기준)
opening_price 시가
high_price 고가
low_price 저가
trade_price 종가
timestamp 해당 캔들에서 마지막 틱이 저장된 시각
candle_acc_trade_price 누적 거래 금액
candle_acc_trade_volume 누적 거래량
first_day_of_period 캔들 기간의 가장 첫 날

Trade (거래; 시세 체결)

Trade_ticks (최근 체결 내역)

최근 체결 내역을 조회합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Trade.Trade_ticks(
    market='KRW-BTC'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "trade_date_utc": "2021-01-08",
        "trade_time_utc": "17:44:15",
        "timestamp": 1610127855000,
        "trade_price": 47560000.0,
        "trade_volume": 0.47572963,
        "prev_closing_price": 44698000.0,
        "change_price": 2862000.0,
        "ask_bid": "ASK",
        "sequential_id": 1610127855000000
    },
    ...
]

Method

GET /v1/trades/ticks

Operation Code

Trade.Trade_ticks

요청 (Request)

Parameter Description
market * 마켓 코드 (ex. KRW-BTC, BTC-BCC)
to 마지막 캔들 시각 (exclusive). 포맷 : yyyy-MM-dd'T'HH:mm:ssXXX or yyyy-MM-dd HH:mm:ss. 비워서 요청시 가장 최근 캔들
count 캔들 개수 (최대 200개까지 요청 가능)
cursor 페이지네이션 커서 (sequentialId)
daysAgo 최근 체결 날짜 기준 7일 이내의 이전 데이터 조회 가능. 비워서 요청 시 가장 최근 체결 날짜 반환. (범위: 1 ~ 7)

응답 (Response)

Parameter Description
trade_date_utc 체결 일자(UTC 기준)
trade_time_utc 체결 시각(UTC 기준)
timestamp 체결 타임스탬프
trade_price 체결 가격
trade_volume 체결량
prev_closing_price 전일 종가
change_price 변화량
ask_bid 매도/매수
sequential_id 체결 번호 (Unique)

Trade_ticker (시세 Ticker 조회 - 현재가 정보)

요청 당시 종목의 스냅샷을 반환합니다.

Request Example

from upbit.client import Upbit

client = Upbit()
resp = client.Trade.Trade_ticker(
    markets='KRW-BTC, KRW-ETH'
)
print(resp['result'])

Response Example

[
    {
        "market": "KRW-BTC",
        "trade_date": "20210108",
        "trade_time": "174621",
        "trade_date_kst": "20210109",
        "trade_time_kst": "024621",
        "trade_timestamp": 1610127981000,
        "opening_price": 44698000.0,
        "high_price": 48550000.0,
        "low_price": 42271000.0,
        "trade_price": 47577000.0,
        "prev_closing_price": 44698000.0,
        "change": "RISE",
        "change_price": 2879000.0,
        "change_rate": 0.0644100407,
        "signed_change_price": 2879000.0,
        "signed_change_rate": 0.0644100407,
        "trade_volume": 0.00033988,
        "acc_trade_price": 861919074055.3187,
        "acc_trade_price_24h": 1082457070848.9071,
        "acc_trade_volume": 18804.39719428,
        "acc_trade_volume_24h": 23822.32449006,
        "highest_52_week_price": 48550000.0,
        "highest_52_week_date": "2021-01-08",
        "lowest_52_week_price": 5489000.0,
        "lowest_52_week_date": "2020-03-13",
        "timestamp": 1610127981564
    },
    {
        "market": "KRW-ETH",
        "trade_date": "20210108",
        "trade_time": "174619",
        "trade_date_kst": "20210109",
        "trade_time_kst": "024619",
        "trade_timestamp": 1610127979000,
        "opening_price": 1388000.0,
        "high_price": 1485000.0,
        "low_price": 1233500.0,
        "trade_price": 1410000.0,
        "prev_closing_price": 1388000.0,
        "change": "RISE",
        "change_price": 22000.0,
        "change_rate": 0.0158501441,
        "signed_change_price": 22000.0,
        "signed_change_rate": 0.0158501441,
        "trade_volume": 0.22966312,
        "acc_trade_price": 581867851790.185,
        "acc_trade_price_24h": 717996348913.0636,
        "acc_trade_volume": 422799.52433396,
        "acc_trade_volume_24h": 521320.18764923,
        "highest_52_week_price": 1485000.0,
        "highest_52_week_date": "2021-01-08",
        "lowest_52_week_price": 124350.0,
        "lowest_52_week_date": "2020-03-13",
        "timestamp": 1610127979352
    }
]

Method

GET /v1/ticker

Operation Code

Trade.Trade_ticker

요청 (Request)

Parameter Description
markets * 반점으로 구분되는 마켓 코드 (ex. KRW-BTC, BTC-BCC)

응답 (Response)

Parameter Description
market 종목 구분 코드
trade_date 최근 거래 일자(UTC)
trade_time 최근 거래 시각(UTC)
trade_date_kst 최근 거래 일자(KST)
trade_time_kst 최근 거래 시각(KST)
opening_price 시가
high_price 고가
low_price 저가
trade_price 종가
prev_closing_price 전일 종가
change EVEN: 보합, RISE: 상승, FALL: 하락
change_price 변화액의 절대값
change_rate 변화율의 절대값
signed_change_price 부호가 있는 변화액
signed_change_rate 부호가 있는 변화율
trade_volume 가장 최근 거래량
acc_trade_price 누적 거래대금 (UTC 0시 기준)
acc_trade_price_24h 24시간 누적 거래대금
acc_trade_volume 누적 거래량 (UTC 0시 기준)
acc_trade_volume_24h 24시간 누적 거래량
highest_52_week_price 52주 신고가
highest_52_week_date 52주 신고가 달성일
lowest_52_week_price 52주 신저가
lowest_52_week_date 52주 신저가 달성일
timestamp 타임스탬프

시세 관련 질문

1. 차트 보조지표를 계산하고 싶습니다.

업비트 차트의 보조지표들은 Chartiq, Tradingview 에서 제공하고 있으니 해당 사이트들을 참고하시길 바랍니다.

2. UBCI 지표를 API를 통해 수신하고 싶습니다.

UBCI API는 업비트 측에서 Open API로 제공하고 있지 않습니다. 업비트 공지사항을 통해 확인하시기 바랍니다.

3. 매수, 매도 (bid/ask) 결정 기준이 궁금합니다.

결정 기준은 아래와 같습니다.

making/taking 관점에서 보면 taking의 주문 타입으로 결정이 됩니다.

4. 체결강도를 API를 통해 수신하고 싶습니다.

현재 업비트는 API를 통해 체결강도를 따로 제공해드리고 있지는 않습니다. 다만 websocket의 체결 데이터 수신을 통해 체결강도를 계산하실 수 있습니다.

체결강도는 UTC 0시(KST 9시)부터의 매수누적체결량 / 매도누적체결량 * 100 으로 계산됩니다. 해당 계산식은 향후 서비스 운영 중 다른 형태로 별도의 고지 없이 변경될 수 있음을 참고 부탁드리겠습니다.

5. USDT 마켓의 원화 환산가격를 알고 싶습니다.

USDT 마켓의 원화 환산가격은 업비트 자체 마켓 시세를 통하여 계산됩니다.

WebSocket (웹 소켓)

개요

1. 시세 정보

WebSocket을 이용하여 수신할 수 있는 정보는 다음과 같습니다.

  1. 현재가 (스냅샷, 실시간 정보 제공)
  2. 체결 (스냅샷, 실시간 정보 제공)
  3. 호가 (스냅샷, 실시간 정보 제공)

각각의 정보는 스냅샷실시간 데이터로 나뉘며 요청 방법에 따라 수신할 수 있는 데이터가 달라집니다.

스냅샷 정보란 요청 당시의 상태를 의미합니다.

실시간 정보란 요청 정보가 스트림 형태로 지속적으로 제공되는 것을 의미합니다.

WebSocket을 이용하여 스냅샷 정보나 실시간 정보를 요청할 수 있으며 둘 중 하나의 정보만을 요청할 수도 있습니다.

자세한 요청 방법은 2. 요청 포맷 섹션과 UpbitWebSocket 섹션에서 다룹니다.

2. 요청 형식

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

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

Ticket Field

일반적으로 용도를 식별하기 위해 ticket 이라는 필드값이 필요합니다.

이 값은 시세를 수신하는 대상을 식별하며 되도록 유니크한 값을 사용하도록 권장합니다. (UUID 등)

필드 명 내용 타입 필요 여부
ticket 식별값 String O

Type Field

수신하고 싶은 시세 정보를 나열하는 필드입니다.

isOnlySnapshot, isOnlyRealtime 필드는 생략 가능하며 모두 생략시 스냅샷과 실시간 데이터 모두를 수신합니다.

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

필드명 내용 타입 필요 여부
type 수신할 시세 타입 (현재가: ticker, 체결: trade, 호가: orderbook) String O
codes 수신할 시세 종목 정보 (주의: codes 필드에 명시되는 종목들은 대문자로 요청해야 합니다.) List O
isOnlySnapshot 시세 스냅샷만 제공 Boolean X
isOnlyRealtime 실시간 시세만 제공 Boolean X

Format Field

마지막으로 포맷 정보입니다. Simple로 지정될 경우 응답의 필드명이 모두 간소화됩니다.

트래픽 부담이 클 때 사용하는 방법입니다.

필드명 내용 타입 필요 여부
format 포맷 (SIMPLE: 간소화된 필드명, DEFAULT: 기본값(생략 가능) String X (기본: Default)

UpbitWebSocket

고성능 네트워크 및 웹 서버 비동기(async) 프레임워크 기반의 동시성 코드 작성을 위한 업비트 웹 소켓 클래스를 생성합니다.

자세한 사항은 파이썬 표준 라이브러리 asyncio 패키지를 참고해주세요.

Example Code

from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()
print(sock)

async with sock as conn:
    # Do something
    pass

Result Example

UpbitWebSocket(wss://api.upbit.com/websocket/v1)

UpbitWebSocket(uri=WEBSOCKET_URI, ping_interval=None, ping_timeout=None)

Parameter Description
uri 웹 소켓에 연결할 URI. (기본값: wss://api.upbit.com/websocket/v1)
ping_interval ping 간격 제한 (기본값: None)
ping_timeout ping 시간 초과 제한 (기본값: None)

socket.Connection

Property

웹 소켓에 연결하기 위해 생성된 Connection 객체입니다.

위의 예제와 동일한 결과를 가집니다.

Example Code

from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()
connection = sock.Connection

async with connection as conn:
    # Do Something
    pass

socket.connect

Method

URI에 연결을 시도하고 Connection 객체를 재생성합니다.

UpbitWebSocket 클래스의 __init__ 메소드 호출 시 자동으로 호출됩니다.

Example Code

from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()
sock.connect(
    ping_interval=20,
    ping_timeout=20
)

async with sock as conn:
    # Do Something
    pass

socket.connect(ping_interval=None, ping_timeout=None)

Parameter Description
ping_interval ping 간격 제한 (기본값: None)
ping_timeout ping 시간 초과 제한 (기본값: None)

conn.send

웹 소켓에 데이터를 수신합니다.

Example Code

from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()

async with sock as conn:
    await conn.send('PING')

conn.send(message)

Parameter Description
message * 서버에 수신할 데이터

conn.recv

서버로부터 전달받은 바이트 스트림(bytes stream) 데이터를 받습니다.

예외를 발생시키는 경우는 아래와 같습니다.

Example Code

import re
import json
from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()

async with sock as conn:
    await conn.send('PING')
    data = await conn.recv()

    pattern = re.compile('{"\S+":"\S+"}')
    search = pattern.search(data.decode('utf8'))
    result = json.loads(search.group())
    print(result)

Result

{"status": "UP"}

conn.recv()

No Parameters

UpbitWebSocket.generate_type_field (Type Field Generate)

staticmethod

웹 소켓 수신에 필요한 payload의 type field 데이터를 generate 합니다.

요청 형식에 대한 사항은 위의 2. 요청 형식 섹션을 참고해주세요.

Example Code

from upbit.websocket import UpbitWebSocket

currencies = ['KRW-BTC', 'KRW-ETH']

type_field = UpbitWebSocket.generate_type_field(
    type="trade",
    codes=currencies
)
print(type_field)

Result

{
    "type": "trade",
    "codes": ["KRW-BTC", "KRW-ETH"]
}

UpbitWebSocket.generate_type_field(type, codes, isOnlySnapshot=None, isOnlyRealtime=None)

staticmethod

Parameter Description
type * 수신할 시세 타입 (현재가: ticker, 체결: trade, 호가: orderbook)
codes * 수신할 시세 종목 정보 (ex. ['KRW-BTC', 'KRW-ETH'])
isOnlySnapshot 시세 스냅샷만 제공 여부 (True, False)
isOnlyRealtime 실시간 시세만 제공 여부 (True, False)

UpbitWebSocket.generate_orderbook_codes (Orderbook Codes Generate)

staticmethod

type 파라미터가 orderbook일 경우에 필요한 codes 파라미터를 요청 형식에 맞춰 generate 합니다.

Example Code

from upbit.websocket import UpbitWebSocket

currencies = ['KRW-BTC', 'KRW-ETH']
counts = [5, 5]

codes = UpbitWebSocket.generate_orderbook_codes(
    currencies=currencies,
    counts=counts
)
print(codes)

Result

["KRW-BTC.5", "KRW-ETH.5"]

UpbitWebSocket.generate_orderbook_codes(currencies, counts=None)

Parameter Description
currencies * 수신할 시세 종목들
counts 수신할 각 시세 종목에 대한 개수

UpbitWebSocket.generate_payload (Payload Generate)

staticmethod

웹 소켓 수신에 필요한 payload 데이터를 json 포맷 형식의 문자열로 generate 합니다.

Example Code

from upbit.websocket import UpbitWebSocket


codes = ['KRW-BTC', 'KRW-ETH', 'KRW-BCH', 'KRW-XRP']
counts = [1 for _ in range(len(codes))]

ord_codes = UpbitWebSocket.generate_orderbook_codes(
    currencies=codes,
    counts=counts
)

trade = UpbitWebSocket.generate_type_field(
    type='trade',
    codes=codes
)
orderbook = UpbitWebSocket.generate_type_field(
    type='orderbook',
    codes=ord_codes
)

type_fields = [trade, orderbook]

payload = UpbitWebSocket.generate_payload(
    type_fields=type_fields,
    format='SIMPLE'
)

print(payload)

Result

[
    {
        "ticket": "43552c23-6596-478d-8f71-b8289779a996"
    },
    {
        "type": "trade",
        "codes": ["KRW-BTC", "KRW-ETH", "KRW-BCH", "KRW-XRP"]
    },
    {
        "type": "orderbook",
        "codes": ["KRW-BTC.1", "KRW-ETH.1", "KRW-BCH.1", "KRW-XRP.1"]
    },
    {
        "format": "SIMPLE"
    }
]

UpbitWebSocket.generate_payload(type_fields, ticket=None, format='DEFAULT')

Parameter Description
type_fields * Type Fields
ticket 식별값 (기본값은 uuid4 형식으로 생성)
format 포맷, SIMPLE: 간소화된 필드명, DEFAULT: 기본 포맷 (생략 가능)

웹 소켓으로 시세 정보 요청하기

웹 소켓을 통해 시세 정보를 요청합니다.

Example Code

import json
import asyncio

from upbit.websocket import UpbitWebSocket


# Definition async function
async def ticker(sock, payload):
    async with sock as conn:
        await conn.send(payload)
        while True:
            recv = await conn.recv()
            data = recv.decode('utf8')
            result = json.loads(data)
            print(result)


sock = UpbitWebSocket()

currencies = ['KRW-BTC', 'KRW-ETH']
type_field = sock.generate_type_field(
    type='ticker',
    codes=currencies
)
payload = sock.generate_payload(
    type_fields=[type_field]
)

event_loop = asyncio.get_event_loop()
event_loop.run_until_complete( ticker(sock, payload) )

Result

{
    "type": "ticker",
    "code": "KRW-BTC",
    "opening_price": 36408000.0,
    "high_price": 38161000.0,
    "low_price": 35907000.0,
    "trade_price": 36784000.0,
    "prev_closing_price": 36408000.0,
    "acc_trade_price": 466420626861.1874,
    "change": "RISE",
    "change_price": 376000.0,
    "signed_change_price": 376000.0,
    "change_rate": 0.0103274006,
    "signed_change_rate": 0.0103274006,
    "ask_bid": "BID",
    "trade_volume": 0.004996,
    "acc_trade_volume": 12633.27063535,
    "trade_date": "20210201",
    "trade_time": "192943",
    "trade_timestamp": 1612207783000,
    "acc_ask_volume": 6355.28646728,
    "acc_bid_volume": 6277.98416807,
    "highest_52_week_price": 48550000.0,
    "highest_52_week_date": "2021-01-08",
    "lowest_52_week_price": 5489000.0,
    "lowest_52_week_date": "2020-03-13",
    "trade_status": null,
    "market_state": "ACTIVE",
    "market_state_for_ios": null,
    "is_trading_suspended": false,
    "delisting_date": null,
    "market_warning": "NONE",
    "timestamp": 1612207783496,
    "acc_trade_price_24h": 503390500539.5724,
    "acc_trade_volume_24h": 13650.71883738,
    "stream_type": "SNAPSHOT"
},
{
    "type": "ticker",
    "code": "KRW-ETH",
    "opening_price": 1444000.0,
    "high_price": 1509500.0,
    "low_price": 1413000.0,
    "trade_price": 1444000.0,
    "prev_closing_price": 1444000.0,
    "acc_trade_price": 331846956832.1946,
    "change": "EVEN",
    "change_price": 0.0,
    "signed_change_price": 0.0,
    "change_rate": 0,
    "signed_change_rate": 0,
    "ask_bid": "ASK",
    "trade_volume": 1.0,
    "acc_trade_volume": 229202.315562,
    "trade_date": "20210201",
    "trade_time": "192925",
    "trade_timestamp": 1612207765000,
    "acc_ask_volume": 126760.03539062,
    "acc_bid_volume": 102442.28017138,
    "highest_52_week_price": 1626000.0,
    "highest_52_week_date": "2021-01-25",
    "lowest_52_week_price": 124350.0,
    "lowest_52_week_date": "2020-03-13",
    "trade_status": null,
    "market_state": "ACTIVE",
    "market_state_for_ios": null,
    "is_trading_suspended": false,
    "delisting_date": null,
    "market_warning": "NONE",
    "timestamp": 1612207765752,
    "acc_trade_price_24h": 354570292652.8257,
    "acc_trade_volume_24h": 244893.27187195,
    "stream_type": "SNAPSHOT"
},
...

Request Parameters

Parameter Description
payload 포맷에 맞춰진 요청 데이터

Response

현재가(Ticker) 응답

필드명 축약형 (format: SIMPLE) 내용 타입
type ty 타입 String ticker : 현재가
code cd 마켓 코드 (ex. KRW-BTC) String -
opening_price op 시가 Double -
high_price hp 고가 Double -
low_price lp 저가 Double -
trade_price tp 현재가 Double -
prev_closing_price pcp 전일 종가 Double
change c 전일 대비 String RISE: 상승, EVEN: 보합, FALL: 하락
change_price cp 부호 없는 전일 대비 값 Double -
signed_change_price scp 전일 대비 값 Double -
change_rate cr 부호 없는 전일 대비 등락율 Double -
signed_change_rate scr 전일 대비 등락율 Double -
trade_volume tv 가장 최근 거래량 Double -
acc_trade_volume atv 누적 거래량(UTC 0시 기준) Double -
acc_trade_volume_24h atv24h 24시간 누적 거래량 Double -
acc_trade_price atp 누적 거래대금(UTC 0시 기준) Double -
acc_trade_price_24h atp24h 24시간 누적 거래대금 Double -
trade_date tdt 최근 거래 일자(UTC) String yyyyMMdd
trade_time ttm 최근 거래 시각(UTC) String HHmmss
trade_timestamp ttms 체결 타임스탬프 (milliseconds) Long -
ask_bid ab 매수/매도 구분 String ASK: 매도, BID: 매수
acc_ask_volume aav 누적 매도량 Double -
acc_bid_volume abv 누적 매수량 Double -
highest_52_week_price h52wp 52주 최고가 Double -
highest_52_week_date h52wdt 52주 최고가 달성일 String yyyy-MM-dd
lowest_52_week_price l52wp 52주 최저가 Double -
lowest_52_week_date l52wdt 52주 최저가 달성일 String yyyy-MM-dd
trade_status ts 거래상태 *deprecated String -
market_state ms 거래상태 String PREVIEW: 입금지원, ACTIVE: 거래지원가능, DELISTED : 거래지원종료
market_state_for_ios msfi 거래 상태 *deprecated String -
is_trading_suspended its 거래 정지 여부 Boolean -
delisting_date dd 상장폐지일 Date -
market_warning mw 유의 종목 여부 String NONE: 해당없음, CAUTION: 투자유의
timestamp tms 타임스탬프 (milliseconds) Long -
stream_type st 스트림 타입 String SNAPSHOT: 스냅샷, REALTIME: 실시간

체결(Trade) 응답

필드명 축약형 (format: SIMPLE) 내용 타입
type ty 타입 String trade: 체결
code cd 마켓 코드 (ex. KRW-BTC) String -
trade_price tp 체결 가격 Double -
trade_volume tv 체결량 Double -
ask_bid ab 매수/매도 구분 String ASK: 매도, BID: 매수
prev_closing_price pcp 전일 종가 Double -
change c 전일 대비 String RISE : 상승, EVEN : 보합, FALL : 하락
change_price cp 부호 없는 전일 대비 값 Double -
trade_date td 체결 일자(UTC 기준) String yyyy-MM-dd
trade_time ttm 체결 시각(UTC 기준) String HH:mm:ss
trade_timestamp ttms 체결 타임스탬프 (millisecond) Long -
timestamp tms 타임스탬프 (millisecond) Long -
sequential_id sid 체결 번호 (Unique) Long -
stream_type st 스트림 타입 String SNAPSHOT: 스냅샷, REALTIME: 실시간

호가(Orderbook) 응답

필드명 축약형 (format: SIMPLE) 내용 타입
type ty 타입 String orderbook: 호가
code cd 마켓 코드 (ex. KRW-BTC) String -
total_ask_size tas 호가 매도 총 잔량 Double -
total_bid_size tbs 호가 매수 총 잔량 Double -
orderbook_units obu 호가 List of Objects -
ask_price ap 매도 호가 Double -
bid_price bp 매수 호가 Double -
ask_size as 매도 잔량 Double -
bid_size bs 매수 잔량 Double -
timestamp tms 타임스탬프 (millisecond) Long -

Connection 관리 및 기타

Example Code

from upbit.websocket import UpbitWebSocket

sock = UpbitWebSocket()
pong = await sock.ping()
print(pong)

Result

{ "status": "UP" }

PING/PONG

업비트 OpenAPI WebSocket 서버는 2019년 3월 27일부터 안정적인 커넥션 관리와 유지를 위해 WebSocket PING/PONG Frame을 지원합니다. (참고 문서 : https://tools.ietf.org/html/rfc6455#section-5.5.2 )

Client to Server PING

WebSocket Compression

업비트 OpenAPI WebSocket 서버에서는 더 빠른 데이터 전송을 위해 WebSocket Compression을 제공하고 있습니다. (참고 문서 : https://tools.ietf.org/html/rfc7692 )

Utils (유틸리티 모듈)

Validator

validate_price(price) 원화 마켓 주문 가격 단위

Example Code

from upbit.utils import Validator

price = 20007
valid = Validator.validate_price(price)
print(valid)

Result Example

20000.0

원화 마켓은 호가 별 주문 가격의 단위가 다릅니다. 아래 표를 참고하여 해당 단위로 주문하여 주세요.

최소 호가 (이상) 최대 호가 (미만) 주문 가격 단위 (원)
2,000,000 - 1,000
1,000,000 2,000,000 500
500,000 1,000,000 100
100,000 500,000 50
10,000 100,000 10
1,000 10,000 5
100 1,000 1
10 100 0.1
0 10 0.01

예를 들어, 호가가 20,000원 일 경우 19,950원, 20,000원, 20,050원 으로 주문을 넣을 수 있으며, 20,007원, 20,105원 등의 가격으로는 주문이 불가능 합니다.

validate_price(price)

staticmethod

가격에 대한 값을 가격 단위에 맞춰 반환합니다.

Parameter Description
price * 가격

result

Parameter Description
validated_price 가격 단위에 맞춰진 가격

Errors

Response Example

{
  "error": {
    "message": "<오류에 대한 설명>",
    "name": "<오류 코드>"
  }
}

API 요청값이 유효하지 않거나 처리 중 오류가 발생한 경우, 다음과 같은 형태의 JSON body가 리턴됩니다.

에러 메시지 목록은 다음과 같습니다.

400 Bad Request

400 에러는 주로 파라미터 요청 값이 잘못된 경우가 많습니다. 본 문서를 참고하여 올바른 파라미터를 확인해주세요.

Error Code Description
create_ask_error
create_bid_error
주문 요청 정보가 올바르지 않습니다.
파라미터 값이 올바른지 확인해주세요.

특히, 시장가 주문임에도 가격을 입력하여 오류가 발생하는 경우가 많습니다. 주문하기 파라미터를 참고하세요.
insufficient_funds_ask
insufficient_funds_bid
매수/매도 가능 잔고가 부족합니다.
under_min_total_ask
under_min_total_bid
주문 요청 금액이 최소주문금액 미만입니다.
withdraw_address_not_registerd 허용되지 않은 출금 주소입니다.
허용 목록에 등록된 주소로만 출금이 가능합니다.
validation_error 잘못된 API 요청입니다.
누락된 파라미터가 없는지 확인해주세요.

401 Unauthorized

401 Unauthorized 오류는 대부분 JWT 서명이 올바르게 되지 않았을 때 발생합니다.

Error Code Description
invalid_query_payload JWT 헤더의 페이로드가 올바르지 않습니다.
서명에 사용한 페이로드 값을 확인해주세요.
jwt_verification JWT 헤더 검증에 실패했습니다.
토큰이 올바르게 생성, 서명되었는지 확인해주세요.
expired_access_key API 키가 만료되었습니다.
nonce_used 이미 요청한 nonce값이 다시 사용되었습니다.
JWT 헤더 페이로드의 nonce 값은 매번 새로운 값을 사용해야합니다.
no_authorization_i_p 허용되지 않은 IP 주소입니다.
out_of_scope 허용되지 않은 기능입니다.