NAV Navbar
shell

Introduction

Korbit provides a RESTful API for developers.

API call rate limit

To ensure the quality and reliability of our API service, the API calls are limited to a certain rate threshold. Creating / refreshing access token calls are limited to 60 calls per 60 minutes; Ticker calls are limited to 60 calls per 60 seconds; All except AccessToken and Ticker, Cancel order calls combined, are limited to 12 calls per 1 second.

Authentication

Implement user authentication to receive and refresh access tokens, which must be included in API requests for user-specific actions.

Introduction

Prior to using Korbit API, you need to authenticate a user. As Korbit API provides OAuth 2.0 interface, you get an access token after a successful authentication. For each API request, you need to set Authorization HTTP header with the access token.

API Keys and Secrets

You need to request an API key and secret to use Korbit API. All Korbit users can get the API key through the Korbit website. You can sign in into your Korbit account by direct authentication API call, which requires username and password in the body of the POST request to get an access token (and a refresh token). In this document, <CLIENT ID> denotes an API key, and <CLIENT SECRET> denotes a corresponding API secret.

Access Token

Instead of passing username and password for each API request, you pass the access token you got after the successful authentication. Before sending the API request to the server, you need to set the Authorization HTTP header with the access token in the following format.

Bearer 12094519051ewhdsofhsoy2ghewekfhse

Because the access token is expired in an hour, you need to refresh it using the refresh token you got after the successful authentication.

Scope

Access Token have Scopes which are permissions for API functions. Scope types include VIEW, TRADE and WITHDRAWAL, and one access token can have multiple scopes. All APIs except public APIs verify scope of the Access Token, and it can be executed if the Access Token has the scope required by the API. The scope of the Access Token is derived from the scope of the API key used to issue the access token; this can be set when creating an API key through the Korbit website.

Nonce

APIs that start with v1/user access or modify resource of a user on the server. So you need to provide an access token and nonce for each request. You can get the access token after a successful authentication. For the nonce, you can specify a monotonously increasing number to it. To allow only one client to send API requests and to process a request only once, Korbit API server processes clients' requests only if the nonce value monotonously increases. For GET requests, you don't need to provide a nonce. For POST requests, you can provide the nonce in the body with the other parameters.
NOTICE: Nonce can be omitted with “buy order”, “sell order”, and “cancel order request”. If omitted, it is considered as a new request.

Direct Authentication

Direct authentication embeds API Key and Secret issued from Korbit website.

Access Token, Refresh Token

Request

curl -D - -X POST -d "client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&grant_type=client_credentials" https://api.korbit.co.kr/v1/oauth2/access_token

Response

{
  "token_type":"Bearer",
  "access_token":"1t1LgTslDrGznxPxhYz7RldsNVIbnEK",
  "expires_in":3600,
  "scope": "VIEW,TRADE",
  "refresh_token":"vn5xoOf4PzckgnqjQSL9Sb3KxWJvYtm"
}

POST https://api.korbit.co.kr/v1/oauth2/access_token

You can get both access token and refresh token after setting grant_type with 'client_credentials' and POST request to v1/oauth2/access_token. The grant_type 'password' is no longer supported after May 3, 2021.

Refreshing Access Token

Request

curl -D - -X POST -d "client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&refresh_token=$REFRESH_TOKEN&grant_type=refresh_token" https://api.korbit.co.kr/v1/oauth2/access_token

Response

{
  "token_type":"Bearer",
  "access_token":"IuqEWTK09eCLThRCZZSALA0oXC8EI7s",
  "expires_in":3600,
  "scope": "VIEW,TRADE",
  "refresh_token":"vn5xoOf4Pzckgn4jQSL9Sb3KxWJvYtm"
}

POST https://api.korbit.co.kr/v1/oauth2/access_token

Because the access token is expired within an hour, you need to refresh your access token before the expiration using the refresh token. In this case you can POST a request to v1/oauth2/access_token after setting grant_type to 'refresh_token'.

OAuth 2.0 References

The Korbit API complies with the OAuth 2.0 specification. The following are some OAuth 2.0 resources.

Explanation of OAuth 2.0

Explanation of OAuth 2.0 Video 1

Explanation of OAuth 2.0 Video 2

Explanation of OAuth 2.0 Video 3

Explanation of OAuth 2.0 Video 4

Using OAuth2.0 as a web service consumer

(Google) OAuth 2.0 Overview

(Google) Example of OAuth 2.0 in a mobile app

Using OAuth2.0 as a web service provider

(Book) Getting Started with OAuth 2.0 - Ryan Boyd

(Google I/O 2012) OAuth 2.0 for Identity and Data Access - Ryan Boyd

Public

Check the current status of the market by listing open and filled orders.

Ticker

Request

curl -D - "https://api.korbit.co.kr/v1/ticker?currency_pair=$CURRENCY_PAIR"

Response

{
  "timestamp": 1389678052000,
  "last": "569000"
}

`GET https://api.korbit.co.kr/v1/ticker

PARAMETERS

Parameter Default Description
currency_pair btc_krw The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.

ATTRIBUTES

Name Description
timestamp Unix timestamp in milliseconds of the last filled order.
last Price of the last filled order.

Detailed Ticker

Request

curl -D - "https://api.korbit.co.kr/v1/ticker/detailed?currency_pair=$CURRENCY_PAIR"

Response

{
  "timestamp": 1558590089274,
  "last": "9198500",
  "open": "9500000",
  "bid": "9192500",
  "ask": "9198000",
  "low": "9171500",
  "high": "9599000",
  "volume": "1539.18571988",
  "change": "-301500",
  "changePercent": "-3.17"
}

GET https://api.korbit.co.kr/v1/ticker/detailed

PARAMETERS

Parameter Default Description
currency_pair btc_krw The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.

ATTRIBUTES

Name Description
timestamp Unix timestamp in milliseconds of the last filled order.
last Price of the last filled order.
open First price in 24 hours.
bid Best bid price.
ask Best ask price.
low Lowest price within the last 24 hours.
high Highest price within the last 24 hours.
volume Transaction volume within the last 24 hours.
change The change in the last price from the oepn price.
changePercent The rate of change in the last price from the open price.

Detailed Ticker of All Market

Request

curl -D - "https://api.korbit.co.kr/v1/ticker/detailed/all"

Response

{
  "bch_krw": {
    "timestamp": 1559285555322,
    "last": "513000",
    "open": "523900",
    "bid": "512100",
    "ask": "513350",
    "low": "476200",
    "high": "540900",
    "volume": "4477.20611753",
    "change": "-10900",
    "changePercent": "-2.08"
  },
  "fet_krw": {
    "timestamp": 1559285607258,
    ...
  },
  ...
}

GET https://api.korbit.co.kr/v1/ticker/detailed/all

ATTRIBUTES

Name Description
currency_pair The type of trading currency pair of Exchange. (btc_krw, eth_krw, ...)
timestamp Unix timestamp in milliseconds of the last filled order.
last Price of the last filled order.
open First price in 24 hours.
bid Best bid price.
ask Best ask price.
low Lowest price within the last 24 hours.
high Highest price within the last 24 hours.
volume Transaction volume within the last 24 hours.
change The change in the last price from the oepn price.
changePercent The rate of change in the last price from the open price.

Orderbook

Request

curl -D - "https://api.korbit.co.kr/v1/orderbook?currency_pair=$CURRENCY_PAIR"

Response

{
  "timestamp" : 1386135077000,
  "bids" : [["1100000", "0.0103918", "1"], ["1000000", "0.01000000", "1"], ... ],
  "asks" : [["569000", "0.50000000", "1"], ["568500", "2.00000000", "1"], ... ]
}

GET https://api.korbit.co.kr/v1/orderbook

PARAMETERS

Parameter Default Description
currency_pair btc_krw The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.

ATTRIBUTES

Name Description
timestamp Unix timestamp in milliseconds of the last placed order.
asks An array containing a list of bid prices. Each order has two elements: price and the unfilled amount. The third element is deprecated and is always 1.
bids An array containing a list of ask prices. Each order has two elements: price and the unfilled amount. The third element is deprecated and is always 1.

List of Filled Orders

Request

curl -D - "https://api.korbit.co.kr/v1/transactions?currency_pair=$CURRENCY_PAIR"

Response

[
  {"timestamp" : 1389678052000, "tid" : "22546", "price" : "569000", "amount" : "0.01000000", "type" : "buy"},
  {"timestamp" : 1389678017000, "tid" : "22545", "price" : "580000", "amount" : "0.01000000", "type" : "sell"},
  {"timestamp" : 1389462921000, "tid" : "22544", "price" : "569000", "amount" : "0.16348000", "type" : "buy"},
  {"timestamp" : 1389462921000, "tid" : "22543", "price" : "570000", "amount" : "0.20000000", "type" : "sell"},
  {"timestamp" : 1389462920000, "tid" : "22542", "price" : "578000", "amount" : "0.33652000", "type" : "sell"},
  ...
]

GET https://api.korbit.co.kr/v1/transactions

PARAMETERS

Parameter Default Description
currency_pair btc_krw The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
time hour The time period you want to query. If this parameter is specified as minute, it queries data within the last minute, hour means the last hour, day means the last 24 hours.

ATTRIBUTES

Name Description
timestamp Timestamp of last filled order.
tid Unique ID that identifies the transaction.
price Transaction price.
amount Transaction amount.
type Side of the order that is filled by the taker.

Constants (Deprecated)

Request

curl -D - "https://api.korbit.co.kr/v1/constants"

Response

{
  "exchange": {
    "btc_krw": {
      "tick_size": 500,
      "min_price": 1000,
      "max_price": 100000000,
      "order_min_size": 0.00100000,
      "order_max_size": 100.00000000
    },
    "eth_krw": {
      "tick_size": 50,
      "min_price": 1000,
      "max_price": 100000000,
      "order_min_size": 0.01000000,
      "order_max_size": 1000.00000000
    },
    ...
  }
}

GET https://api.korbit.co.kr/v1/constants

You can get constant values such as tick_size rates and minimum amount to trade, etc. The API is no longer supported after April 28, 2021.

• For detailed information on Tick Size and Max./Min. Order Quantity, please follow our FAQ link given below : [link]
• For detailed information on Deposit/Withdrawal Fees and Min. Withdrawal Amount, please follow our FAQ link given below : [link]

ATTRIBUTES

Name Description
exchange Exchange constants
currency_pair The type of trading currency pair of Exchange. (btc_krw, eth_krw, ...)
tick_size order unit size.
min_price Minimum price for an order.
max_price Maximum price for an order.
order_min_size Minimum amount for placing an order.
order_max_size Maximum amount for placing an order.

Public - Websocket

Websocket Push Server : You can subscribe and get data such as Ticker, Orderbook, Transaction

Connect

Connect to the pushserver.
If your connect request is closed from the server with Blacklist IP CloseReason warning message, Please ask this issue to info@korbit.co.kr. If duplicate error requests are accumulated, the client IP might be registered in the blacklist.

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"

Response

{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:connected",
  "data": {}
}

WS CONNECT wss://ws2.korbit.co.kr/v1/user/push

Close

Close the connection to the pushserver.
If you have any channel subscribed, all channels would be unsubscribed automatically from the server when closing socket.

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"
CTRL + C to close

Response

CloseReason.Codes.NORMAL(1000) | "client socket is closed..."

WS CLOSE wss://ws2.korbit.co.kr/v1/user/push

Subscribe

Subscribe to channels(topic[:coin]) of the pushserver to receive data such as Ticker, Orderbook, Transaction

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"
{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:subscribe",
  "data": {
      "channels": ["ticker:btc_krw,eth_krw,xrp_krw", "orderbook:btc_krw,eth_krw,xrp_krw", "transaction:btc_krw,eth_krw,xrp_krw"]
  }
}

Response

(echo subscription request message as response in success)

{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:subscribe",
  "data": {
      "channels": ["ticker:btc_krw,eth_krw,xrp_krw", "orderbook:btc_krw,eth_krw,xrp_krw", "transaction:btc_krw,eth_krw,xrp_krw"]
  }
}

(return error response message in failure)
If duplicate error requests are accumulated, the client IP might be registered in the blacklist. In this case, understand that you might not receive any response from the server.

{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:error",
  "data": {
      "request_event": "korbit:subscribe",
      "err_message": "subscription channels info is not valid | unknown topic error : xxx"
  }
}

WS REQUEST wss://ws2.korbit.co.kr/v1/user/push

MESSAGE

Field Name Example Value Description
accessToken null Authentication Token String value
timestamp 1389678052000 UTC LocalDateTime Timestamp Long value
event "korbit:subscribe" Requesst event String value (subscribe, unsubscribe)
data channels Request meta data like channels or push data object value

Unsubscribe

Unsubscribe to channels(topic[:coin]) of the pushserver to receive data such as Ticker, Orderbook, Transaction
If you want to release a socket session after an unsubscription request, wait and close the client socket until receiving the unsubscription success response from the server.

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"
{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:unsubscribe",
  "data": {
      "channels": ["ticker:btc_krw,eth_krw,xrp_krw", "orderbook:btc_krw,eth_krw,xrp_krw", "transaction:btc_krw,eth_krw,xrp_krw"]
  }
}

Response

(echo unsubscription request message as response in success)

{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:unsubscribe",
  "data": {
      "channels": ["ticker:btc_krw,eth_krw,xrp_krw", "orderbook:btc_krw,eth_krw,xrp_krw", "transaction:btc_krw,eth_krw,xrp_krw"]
  }
}

(return error response message in failure)
If duplicate error requests are accumulated, the client IP might be registered in the blacklist. In this case, understand that you might not receive any response from the server.

{
  "accessToken": null,
  "timestamp": 1558590089274,
  "event": "korbit:error",
  "data": {
      "request_event": "korbit:unsubscribe",
      "err_message": "subscription channels info is not valid | unknown topic error : xxx"
  }
}

WS REQUEST wss://ws2.korbit.co.kr/v1/user/push

MESSAGE

Field Name Example Value Description
accessToken null Authentication Token String value
timestamp 1389678052000 UTC LocalDateTime Timestamp Long value
event "korbit:unsubscribe" Requesst event String value (subscribe, unsubscribe)
data channels Request meta data like channels or push data object value

Channel List

Response

ticker
{
  "accessToken": null,
  "event": "korbit:push-ticker",
  "timestamp" : 1389678052000,
  "data":
    {
      "channel": "ticker",
      "currency_pair": "btc_krw",
      "timestamp": 1558590089274,
      "last": "9198500.1235789"
      "open": "9500000.3445783",
      "bid": "9192500.4578344",
      "ask": "9198000.32148556",
      "low": "9171500.23785685",
      "high": "9599000.34876458",
      "volume": "1539.18571988",
      "change": "-301500.234578934"
  }
}
orderbook
{
  "accessToken": null,
  "event": "korbit:push-orderbook",
  "timestamp" : 1389678052000,
  "data":
  {
    "channel": "orderbook",
    "currency_pair": "btc_krw",
    "timestamp" : 1386135077000,
    "bids" : [{"price": "1100000,2375876", "amount": "0.0103918"}, {"price": "1000000.3478764", "amount": "0.012"}],
    "asks" : [{"price": "569000.3467895", "amount": "0.50000000"}, {"price": "568500.7658432", "amount": "2.003"}]

  }
}
transaction
{
  "accessToken": null,
  "event": "korbit:push-transaction",
  "timestamp" : 1389678052000,
  "data":
  {
    "channel": "transaction",
    "currency_pair": "btc_krw",
    "timestamp" : 1389678052000,
    "price" : "569000.7654835",
    "amount" : "0.01000001",
    "taker" : "buy"
  }
}

Channel names are case sensitive.

Name Description
ticker Market status
orderbook Orderbook
transaction Transactions
Common Description
accessToken Access Token
event Channel ID
timestamp Timestamp of the requested time
ticker.data Description
channel Subscribe channel info
currency_pair Currency pair
timestamp Timestamp when the data was created
last Closing price
open Opening price
bid Last bid price
ask Last ask price
low Low price
high High price
volume Trading volume
change Change price
orderbook.data Description
channel Subscribe channel info
currency_pair Currency pair
timestamp Timestamp when the data was created
bids Bid prices
asks Ask Prices
transaction.data Description
channel Subscribe channel info
currency_pair Currency pair
timestamp Timestamp when the data was created
price Trade price
amount Trade asset amounts
taker Sell/Buy

Request Format: channel_name[:currency_pair,...],channel_name[:currency_pair,...],...

If currency_pair parameter is ommitted, you can receive data for all currency pairs.

Ping

Most of modern web socket libraries support rfc6455 protocol. Please refer to the document of the library you’re using. The pushserver could send websocket Ping message frame(rfc6455) to clients for connection heartbeat check and client also could send to the server for heartbeat check : A ping is just a regular frame, but it's a control frame. Pings have an opcode of 0x9.

Ping message reference URL rfc6455
Ping message reference URL rfc6455

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"
rfc6455 websocket ping message frame

Response

rfc6455 websocket pong message frame

WS REQUEST wss://ws2.korbit.co.kr/v1/user/push

MESSAGE

Ping message frame(rfc6455)

Pong

Most of modern web socket libraries support rfc6455 protocol. Please refer to the document of the library you’re using. The client should send Pong message frame(rfc6455) when receiving Ping message frame from the server and the server will send Pong message frame when it receives Ping message frame from clients : A pong is just a regular frame, but it's a control frame. Pongs have an opcode of 0xA.

Pong message reference URL rfc6455
Pong message reference URL rfc6455

Request

wscat -c  "wss://ws2.korbit.co.kr/v1/user/push"
rfc6455 websocket pong message frame

Response

none

WS REQUEST wss://ws2.korbit.co.kr/v1/user/push

MESSAGE

Pong message frame(rfc6455)

Private - General

Query user informations or balances, etc.

User Balances

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/balances

Response

{
  "krw" : {
      "available" : "123000",
      "trade_in_use" : "13000",
      "withdrawal_in_use" : "0"
  },
  "btc" : {
      "available" : "1.50200000",
      "trade_in_use" : "0.42000000",
      "withdrawal_in_use" : "0.50280000",
      "avg_price": "7115500",
      "avg_price_updated_at": 1528944850000
  },
  "eth" : {
      "available" : "4.80200000",
      "trade_in_use" : "1.23238000",
      "withdrawal_in_use" : "0.00000000",
      "avg_price": "529000",
      "avg_price_updated_at": 1528944250000
  },
  "etc" : {
      "available" : "10.00000000",
      "trade_in_use" : "2.00000000",
      "withdrawal_in_use" : "0.00000000",
      "avg_price": "14770",
      "avg_price_updated_at": 1528945850000
  },
  "xrp" : {
      "available" : "134524.657899",
      "trade_in_use" : "2332.000000",
      "withdrawal_in_use" : "0.000000",
      "avg_price": "594",
      "avg_price_updated_at": 1528944340000
  }
  ...
}

GET https://api.korbit.co.kr/v1/user/balances

You can retrieve the balances and stats for each currency. This API endpoint requires the VIEW scope.

ATTRIBUTES

Name Description
available The amount of funds you can use.
trade_in_use The amount of funds that are being used in trade.
withdrawal_in_use The amount of funds that are being processed for withdrawal.
avg_price The break even price in krw for coin.
avg_price_updated_at The timestamp that the break even price is updated.

Transfer Account Info

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/accounts

Response

{
  "deposit": {
    "btc": {
      "address" :"3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy"
    },
    "etc": {
      "address" :"0x123f681646d4a755815f9cb19e1acc8565a0c2aa"
    },
    "eth": {
      "address" :"0x123f681646d4a755815f9cb19e1acc8565a0c2ac"
    },
    "xrp": {
      "address" : "rMmTCjGFRWPz8S2zAUUoNVSQHxtRQD4eCx",
      "destination_tag" : "100022001"
    },
    "ltc": {
      "address": "MBRQmAR24h4RXZwMXmVjDBDdQZhQ2LAnjH"
    },
    ...
  },
  "withdrawal": {
    ...
  }
}

GET https://api.korbit.co.kr/v1/user/accounts

This API endpoint requires the VIEW scope.

ATTRIBUTES

Name Description
address The address of your wallet.
destination_tag Destination tag used in XRP, XLM, EOS transactions. Only shows if exist.

Trading Volume and Fees

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" "https://api.korbit.co.kr/v1/user/volume?currency_pair=$CURRENCY_PAIR"

Response

{
  "btc_krw": {
    "volume" : "17570000",
    "maker_fee" : "0.00100000",
    "taker_fee" : "0.00200000"
  },
  "eth_krw": {
    "volume" : "0",
    "maker_fee" : "0.00100000",
    "taker_fee" : "0.00200000"
  },
  "etc_krw": {
    "volume" : "6570000",
    "maker_fee" : "0.00100000",
    "taker_fee" : "0.00200000"
  },
  "total_volume" : "24140000",
  "timestamp" : 1386418990000
}

GET https://api.korbit.co.kr/v1/user/volume

To act in line with our newly adopted trading fee policy, we are going to provide API for trading volumes of users in BTC, ETH, ETC, XRP, BCH exchanges. Trading volumes and fee rates are calculated at an every exact 24 hour interval. This API endpoint requires the VIEW scope.

PARAMETERS

Parameter Default Description
currency_pair all The type of exchange of which trading volume and trading fee rates you want to query for. You can specify name of currency pair or all in the parameter and each indicates requesting for trading volumes and trading fee rates in exchanges.

ATTRIBUTES

Name Description
currency_pair The type of currency corresponding to the trading volume and trading fee rates.
volume User's trading volume in the corresponding exchange during the last 30 days in KRW.
maker_fee The rate of trading fee for maker in basis points(BPS).
taker_fee The rate of trading fee for taker in basis points(BPS).
total_volume User's total trading volume of all exchanges in KRW.
timestamp Unix timestamp in milliseconds of the last time when trading volume and fees are calculated on an hourly basis.

Private - Trading

Place an order. List user's open and filled orders.

Place a Bid Order

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&type=$TYPE&price=$PRICE&coin_amount=$COIN_AMOUNT&nonce=$NONCE&post_only=true" https://api.korbit.co.kr/v1/user/orders/buy

Request (Without nonce)

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&type=$TYPE&price=$PRICE&coin_amount=$COIN_AMOUNT&post_only=true" https://api.korbit.co.kr/v1/user/orders/buy

Response

{
  "orderId":"58738",
  "status":"success",
  "currency_pair":"btc_krw"
}

POST https://api.korbit.co.kr/v1/user/orders/buy

This API endpoint requires the TRADE scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
type The type of order. Specify 'limit' to place an order with a specific price you want. Specify 'market' to place an order to fill with the market price.
price The price. This parameter is valid only for 'limit' order. Should be set with reference in [Constants].
coin_amount The amount of trading currency you want to buy. When the order type is 'limit' order, it will place a buy order with a price specified in the 'price' parameter. When the order type is ‘market' order, 'price' and 'coin_amount' parameters should not be used.
fiat_amount The amount you want to spend to buy the trading currency at market price. This parameter is only valid when the order type is 'market' order; When placing market bid orders, 'fiat_amount' should be used instead of 'price' and 'coin_amount' parameters.
nonce [optional] in order to avoid duplicated request. When requested without nonce, the request is considered a new request.
post_only If true, the requested order will canceled immediately once it matches the taker order.

ATTRIBUTES

Name Description
orderId After a successful placement of order, you get the ID of the one you placed.
status 'success' if it was successful. An error symbol shown below if any error happened.
currency_pair The type of currency that the order was processed in.

Error Symbols

Error Name Description
name_unchecked In case the user who did not run the name validation process by using a cell phone in Korea.
not_enough_krw In case the user does not have enough balance in the wallet to place the bid order.
too_many_orders In case the maximum number of orders limit hit.
save_failure This is an internal error. Usually it should not happen.

Place an Ask Order

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&type=$TYPE&price=$PRICE&coin_amount=$COIN_AMOUNT&nonce=$NONCE&post_only=true" https://api.korbit.co.kr/v1/user/orders/sell

Request (Without nonce)

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&type=$TYPE&price=$PRICE&coin_amount=$COIN_AMOUNT&post_only=true" https://api.korbit.co.kr/v1/user/orders/sell

Response

{
  "orderId":"12513",
  "status":"success",
  "currency_pair":"btc_krw"
}

POST https://api.korbit.co.kr/v1/user/orders/sell

This API endpoint requires the TRADE scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
type The type of order. Specify 'limit' to place an order with a specific price you want. Specify 'market' to place an order to fill with the market price.
price The price. This parameter is valid only for 'limit' order. Should be set with reference in [Constants].
coin_amount The amount of the trading currency you want to sell.
nonce [optional] in order to avoid duplicated request. When requested without nonce, the request is considered a new request.
post_only If true, the requested order will canceled immediately once it matches the taker order.

ATTRIBUTES

Name Description
orderId After a successful placement of order, you get the ID of the one you placed.
status "success" if it was successful. An error symbol shown below if any error happened.
currency_pair The type of currency that the order was processed in.

Error Symbols

Error Name Description
name_unchecked In case the user who did not run the name validation process by using a cell phone in Korea.
not_enough_btc In case the user does not have enough balance in the wallet to place the ask order.
too_many_orders In case the maximum number of orders limit hit.
save_failure This is an internal error. Usually it should not happen.

Cancel Open Orders

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&id=$ID&nonce=$NONCE" https://api.korbit.co.kr/v1/user/orders/cancel

Request (Without nonce)

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency_pair=$CURRENCY_PAIR&id=$ID" https://api.korbit.co.kr/v1/user/orders/cancel

Response : For each order, you have a status. The following example response shows that the cancellation of the orders with ID 1000 and 1002 were successful, but the cancellation of the order with ID 1001 was failed because that order does not exist.

[
  {"orderId":"1000","status":"success"},
  {"orderId":"1001","status":"not_found"},
  {"orderId":"1002","status":"success"}
]

POST https://api.korbit.co.kr/v1/user/orders/cancel

This API endpoint requires the TRADE scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
id The ID of order to cancel. You can repeat this parameter to cancel multiple orders at the same time (ex. id=1000&id=1001&id=1002). The ID of order is the id field on the response of v1/user/orders/open, or orderId field on the response of v1/user/orders/buy and v1/user/orders/sell.
nonce [optional] in order to avoid duplicated request. When requested without nonce, the request is considered a new request.

ATTRIBUTES

Name Description
orderId The ID of order that were passed to the 'id' parameter.
status 'success' if the order was successfully canceled. An error symbol shown below otherwise.

Error Symbols

Error Name Description
not_found The order does not exist. This happens if you specify an ID that does not exist.
not_authorized You tried to cancel an order placed by another user.
already_filled The order was fully filled, without any remaining amount before the trial to cancel it.
already_canceled The order is already canceled.
rate_limited Same cancel order ID is requested more than 10 time within 1 second.
cannot_cancel_status The error message "cannot_cancel_status" is displayed when the server has received an order request but the order is momentarily still processing the acceptance. This means that only orders that have been accepted can be cancelled, indicating a situation where the user is unable to cancel the order. Once the acceptance is complete and if the user attempts to cancel again, they will receive one of the following three statuses instead of "cannot_cancel_status":
- success
- already_canceled (either the user has already canceled the order or it was automatically canceled due to insufficient available balance)
- already_filled (the order has already been filled)

List Open Orders

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/orders/open?currency_pair=$CURRENCY_PAIR

Response

[
  {
    "timestamp": 1389173297000,
    "id": "58726",
    "type": "ask",
    "price": {"currency":"krw", "value": "800000"},
    "total": {"currency":"btc", "value": "1.00000000"},
    "open": {"currency":"btc", "value": "0.75000000"}
  },
  {"timestamp":1386419377000,"id":"37499","type":"bid","price":{"currency":"krw","value":"700000"},
  "total":{"currency":"btc","value":"1.50000000"},"open":{"currency":"btc","value":"0.41200000"}},
  ...
]

GET https://api.korbit.co.kr/v1/user/orders/open

This API endpoint requires the TRADE or VIEW scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
offset/limit Offset and limit for pagination of the orders. You can specify the 'offset', which is 0-based, to get list of orders starting from the offset. You can also provide the 'limit' to specify the number of open orders you want to get. The default value of 'offset' is 0 and 'limit' is 10.

ATTRIBUTES

Name Description
timestamp Unix timestamp in milliseconds by the time the order was placed.
id The unique identifier of the order.
type The type of order. 'bid' for the bid orders, 'ask' for the ask orders.
price The price is set to price.value. price.currency is currency used for the transaction.
total The amount in your initial order. You have two sub-fields under this field. One is 'currency', which is set to target currency, another is 'value', which is set to the amount.
open The amount that are not filled yet. You have two sub-fields under this field. One is 'currency', which is set to target currency, another is 'value', which is set to the amount.

View Exchange Orders

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/orders

Response

[
  {
    "id": "89999",
    "currency_pair": "btc_krw",
    "side": "bid",
    "avg_price": "2900000",
    "price": "3000000",
    "order_amount": "0.81140000",
    "filled_amount": "0.33122200",
    "order_total": "2434200",
    "filled_total": "960543",
    "created_at": "1500033942638",
    "last_filled_at": "1500533946947",
    "status": "partially_filled",
    "fee": "0.00000500"
  },
  {
    "id": "90002",
    "currency_pair": "btc_krw",
    "side": "ask",
    "avg_price": "0",
    "price": "5000000",
    "order_amount": "0.71140000",
    "filled_amount": "0",
    "order_total": "3557000",
    "filled_total": "0",
    "created_at": "1500533946947",
    "status": "unfilled"
  },
  {
    "id": "90003",
    "currency_pair": "btc_krw",
    "side": "bid",
    "avg_price": "3000000",
    "price": "3000000",
    "order_amount": "0.81140000",
    "filled_amount": "0.81140000",
    "order_total": "2434200",
    "filled_total": "2434200",
    "created_at": 1400533933748,
    "last_filled_at": "1500510381038",
    "status": "filled",
    "fee": "0.00001000"
  },
  ...
]

GET https://api.korbit.co.kr/v1/user/orders

This API endpoint requires the TRADE or VIEW scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
status Optional parameter for filtering by order status. Default is all statuses. Order status can be one of the following: 'unfilled', 'partially_filled', or 'filled'. These parameters can be chained in order to query for multiple status, for instance, status=unfilled&status=partially_filled to get all open orders.
id Optional parameter for querying by order id. Default is all ids. ID query can be chained in order to query for multiple IDs, for instance, id=93038&id=93484
offset Optional parameter for pagination. You can get the list of transactions starting from the 0-based offset index. Default is 0.
limit Optional parameter for pagination. You can set the maximum number of transactions you want to get with this parameter. Default is 10, Max is 40.

ATTRIBUTES

Name Description
id The unique identifier of the order.
currency_pair The type of currency that the order was processed in.
side The type of the order. 'bid' for bid orders, 'ask' for ask orders.
avg_price The weighted average of the price the currency was traded at.
price The price that the user has set the limit to. 0 if the order was a market order.
order_amount The amount of the trading currency you ordered. Both in bid(i.e. KRW => BTC) and ask(i.e. BTC => KRW) orders, the amount is displayed in the non-fiat currency(i.e. BTC).
filled_amount The amount of the trading currency that has been partially filled. When filledAmount is equal to orderAmount, the order is complete. Shows only if limit trade.
order_total The total amount of the placed order, described in KRW. If the order is a market ask order, this field is not included in the response.
filled_total The filled amount of the order, described in KRW.
created_at Unix timestamp in milliseconds by the time the order was placed.
last_filled_at Unix timestamp in milliseconds when the order was last filled, either partially or fully. Does not show if not filled at all.
status Current status of the order. Can be one of the following: 'unfilled', 'partially_filled', or 'filled'.
fee The amount of the fee charged. The fee is charged at the quote currency. When the order is a bid order(i.e. KRW => BTC), the fee is charged in BTC. When the order is an ask order(i.e. BTC => KRW), the fee is charged in KRW. Doesn't show up if the order is unfilled at all.

Transaction History - Order Fills

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/transactions?currency_pair=$CURRENCY_PAIR

Response

[
  {
    "timestamp": 1383707746000,
    "completedAt": 1383797746000,
    "id": "599",
    "type": "sell",
    "fee":{"currency":"krw","value":"0"},
    "fillsDetail":{
      "price": {"currency": "krw", "value": "1000000"},
      "amount": {"currency": "btc", "value": "1"},
      "native_amount": {"currency": "krw", "value": "1000000"},
      "orderId":"1002"
    },
    "isMaker": true
  },
  {
    "timestamp": 1383705741000,
    "completedAt": 1383797746200,
    "id": "597",
    "type": "buy",
    "fee":{"currency":"btc","value":"0.0015"},
    "fillsDetail":{
      "price": {"currency": "krw", "value": "1000000"},
      "amount": {"currency": "btc", "value": "1"},
      "native_amount": {"currency": "krw", "value": "1000000"},
      "orderId":"1002"
    },
    "isMaker": false
  }
]

GET https://api.korbit.co.kr/v1/user/transactions

This API call is separated into two new enhanced calls (View Exchange Orders and View Transfers. Although this call will still remain in limited functionality for existing users' convenience, the category parameter will be limited to 'fills', and 'balance' field will be removed from the call response. Hence, using the updated calls is strongly recommended.

This API endpoint requires the TRADE or VIEW scope.

PARAMETERS

Parameter Description
currency_pair The type of trading currency pair of which information you want to query for.
We support currency pair that exists in [Constants], but the others.
offset/limit Offset and limit for pagination of transactions. You can specify the 'offset', which is 0-based, to get the list of transactions starting from the offset. You can also provide the 'limit' to specify the number of transactions you want to get. The default value of 'offset' is 0 and 'limit' is 10. Limit's Max is 40.

Common Fields : These fields are common for all categories

Name Description
timestamp Unix timestamp in milliseconds specifying the time that the transaction happened.
completedAt Unix timestamp in milliseconds specifying the time the transaction was completed. For 'fills' category this field is always set. For deposits and withdrawals of BTC and KRW, you have this field only if it is successfully completed. Any pending deposits or withdrawals do not have this field set.
id The unique identifier of the transaction. The ID is unique within the category boundary. For example, the 'id' field is unique within 'fills' category, but the same ID can be used in 'krw' or 'btc' category.
type The type of transaction. See the list of Transaction Types shown below.
fee In case category is 'fills', you have the fee paid by user in this field. The fee paid by buyer comes with 'btc' currency, and the fee paid by seller comes with 'krw' currency. In case category is 'fiats' and type is 'fiat-out', you have the fee paid for KRW withdrawal. In case category is 'coins' and type is 'coin-out', you have the fee paid for BTC withdrawal. In other cases, you don't have this field in the response.
isMaker Maker order execution is applied or not.

Transaction type

This is the list of transaction types you get in the 'type' field on the response. The string within the parenthesis denotes the category parameter you specify. The transaction type can come only if you specify the given category. For each category you get a detailed transaction type. For example, for 'fills' category, you get order fills happened either by your bidding order(type=0) or your asking order(type=1).

Name Description
buy (fills) Order fills - Bidding order.
sell (fills) Order fills - Asking order.

Sub-fields(fillsDetail)

You have following sub-fields under 'fillsDetail' field, which comes only if the category is 'fills'.

Name Description
price The price of an order fill. You have two sub-fields. One is 'currency', which is always set to 'krw' for now. Another is 'value', which is set to the filled price.
amount The amount of selected currency in the order fill. You have two sub-fields. One is 'currency', which is set to one currency you selected in currency_pair field among 'btc', 'etc' or 'eth'. Another is 'value', which is set to the filled amount of that selected currency.
native_amount The calculated amount of the order represented in KRW, based on the filled price.
orderId The ID of the filled order. This is the ID of order you placed.

Private - Wallet

Request or cancel Crypto Currency withdrawals. Query transfer details.

Request Crypto Currency Withdrawal (New)

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency=$CURRENCY&amount=$AMOUNT&address=$ADDRESS&secondary_address=$SECONDARY_ADDRESS&nonce=$NONCE" https://api.korbit.co.kr/v2/user/coins/out

Response

{
  "transferId":"21591",
  "status":"success"
}

POST https://api.korbit.co.kr/v2/user/coins/out

This API endpoint requires the WITHDRAWAL scope.

[How to register for Open API]
To be updated

PARAMETERS

Parameter Description
currency A mandatory parameter. You need to set currency.
amount The amount to withdraw.
address The address to sent.
secondary_address To use if the coin have a secondary address. It is also compatible with the existing destination_tag but is not recommended.

ATTRIBUTES

Name Description
transferId The unique ID of the withdrawal request. You can use this ID to cancel a withdrawal request or get the status of it.
status 'success' if the withdrawal was successful, an error symbol otherwise.

Error Symbols

Error Name Description
another_transfer_in_progress An on-going withdrawal request exists. It takes less than 10 seconds for a withdrawal request to finish. You can create a withdrawal request only if the previous request was successfully finished, or you canceled it.
exceeds_api_daily_limit The user tried to withdraw more than the maximum limit per day.
exceeds_available_size The user tried to transfer more than the available amount.
save_failure This is an internal error. Usually it should not happen.
bad_request Bad request error
unavailable_service Travelrule error
internal_error Internal server error

Cancel Transfer Request

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency=$CURRENCY&id=$ID&nonce=$NONCE" https://api.korbit.co.kr/v1/user/coins/out/cancel

Response

{
  "transferId":"21591",
  "status":"success"
}

POST https://api.korbit.co.kr/v1/user/coins/out/cancel

You can cancel a transfer request by using following API. In case the transfer is being processed by an administrator, or it is completed, you get an error code. This API endpoint requires the WITHDRAWAL scope.

PARAMETERS

Parameter Description
id The unique ID of the withdrawal request.

ATTRIBUTES

Name Description
id The unique ID of the withdrawal request specified on the 'id' parameter.
status 'success' if it was successfully canceled, an error symbol otherwise.

Error Symbols

Error Name Description
not_found The withdrawal request does not exist. If a wrong value is specified on the 'id' parameter , you can get this error symbol.
not_found The user tried to cancel a withdrawal request created by another user.
transfer_locked The withdrawal process has already been started, so it is impossible to cancel it.
already_filled The withdrawal process has already been completed, so it is impossible to cancel it.

View Transfers

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/transfers

Response

[
  {
    "id": "270",
    "type": "deposit",
    "currency": "btc",
    "amount": "0.81140000",
    "completed_at": 11750020020,
    "updated_at": 11550050080,
    "created_at": 11550020020,
    "status": "filled",
    "details": {
      "transaction_id": "2d84855aa9c...",
      "address": "1F1zAaz5x1HUXrCNLbtMDqcw6o5GNx4xqX"
    }
  },
  {
    "id": "280",
    "type": "withdrawal",
    "currency": "btc",
    "amount": "0.81140000",
    "updated_at": 11550050080,
    "created_at": 11550020020,
    "status": "requested",
    "details": {
      "transaction_id": "2d84855aa9c...",
      "address": "1F1zAaz5x1HUXrCNLbtMDqcw6o5GNx4xqX"
    }
  },
  {
    "id": "380",
    "type": "deposit",
    "currency": "krw",
    "amount": "1100000",
    "completed_at": 12550020020,
    "updated_at": 11550020020,
    "created_at": 11233223233,
    "status": "filled"
  },
  {
    "id": "480",
    "timestamp": 12983983983,
    "type": "withdrawal",
    "currency": "krw",
    "amount": "1200000",
    "completed_at": 12550020020,
    "updated_at": 11550020020,
    "created_at": 11233223233,
    "status": "filled",
    "fee": "1800"
  }
]

GET https://api.korbit.co.kr/v1/user/transfers

This API endpoint requires the WITHDRAWAL or VIEW scope.

PARAMETERS

Parameter Description
currency The type of currency you want to query for. Supports KRW, BTC, ETH, ETC XRP and etc.
type Optional parameter for filtering. You can filter by type of transfer, which is either 'deposit' or 'withdrawal'. Default is 'all' transfers.
offset Optional parameter for pagination. You can get the list of transactions starting from the 0-based offset index. Default is 0.
limit Optional parameter for pagination. You can set the maximum number of transactions you want to get with this parameter. Default and Max is 40.

Common Fields : These fields are common for all categories

Name Description
id The unique identifier of the order.
type The type of the transfer, which is either deposit or withdrawal.
currency The currency that the transfer was made in.
amount The amount of the deposit/withdrawal.
completed_at Unix timestamp in milliseconds when the transfer order is complete. Shows only when the order is complete.
updated_at Unix timestamp in milliseconds when the transfer order was last updated. The transfers are ordered by this field, most recently updated transfer showing at the top.
created_at Unix timestamp in milliseconds by the time the transfer order was initiated.
status Current status of the order.
fee The amount of the fee that was charged for withdrawal. Shows only for filled withdrawals that a fee was incurred. The currency is equivalent to the currency of the withdrawal.

Sub-fields (For coin deposit/withdrawal)

Name Description
details.transaction_id Transaction ID of the coin deposit/withdrawal.
details.address Destination address of the coin.
details.destination_tag Destination tag that shows up only when the currency have secondly address like XRP, EOS, XLM.

Query Status of Deposit and Withdrawal

Request

curl -D - -H "Authorization: Bearer $ACCESS_TOKEN" https://api.korbit.co.kr/v1/user/coins/status

Response : A completed Deposit

[
  {
    "timestamp": 1392620446000,
    "id": "5180",
    "type": "coin-in",
    "amount": { "currency": "btc", "value": "0.01"},
    "in": "1anjg6B2XbpjHx8LFw8mXHATH54vrxs2F",
    "completedAt": 1392620446100
  }
]

GET https://api.korbit.co.kr/v1/user/coins/status

Response : A pending withdrawal request

[
  {
    "timestamp": 1392620446000,
    "id": "5180",
    "type": "coin-out",
    "amount": { "currency": "btc", "value": "0.01"},
    "out": "1anjg6B2XbpjHh8LFw8xXHATH54vrxs2F"
  }
]

Response : A completed withdrawal request

[
  {
    "timestamp": 1392620446000,
    "id": "5180",
    "type": "coin-out",
    "amount": { "currency": "btc", "value": "0.01"},
    "out": "1anjg6B2XbpjHh8LFw8xXHATH54vrxs2F",
    "completedAt": 1392620946300
  }
]

You can query status of deposits and transfers by using the following API. This API endpoint requires the WITHDRAWAL or VIEW scope.

PARAMETERS

Parameter Description
currency A mandatory parameter. You need to set currency.
id The unique ID of the withdrawal request. If this parameter is not specified, the API responds with a pending withdrawal request if any.

ATTRIBUTES

Name Description
timestamp Unix timestamp in milliseconds by the time the deposit or withdrawal request was created.
id The unique ID deposit or withdrawal request.
type "coin-in" if it is a deposit request, "coin-out" if it is a withdrawal request.
amount The amount to deposit or withdraw. The value field in it has the amount of deposit or withdrawal. The currency field set target currency.
in The user's address assigned in Korbit system to receive. This field comes only if type is 'coin-in'.
out The user's address to where was sent. this field comes only if type is 'coin-out'.
completedAt Unix timestamp in milliseconds by the time the deposit or withdrawal was completed. If it is pending, this field is not included in the response.

Assign Crypto Currency Address

Request

curl -D - -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -d "currency=$CURRENCY&nonce=$NONCE" https://api.korbit.co.kr/v1/user/coins/address/assign

Response

{
  "address":"1F1xAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
  "status":"success"
}

POST https://api.korbit.co.kr/v1/user/coins/address/assign

Since within Korbit are made internally, a address does not need to be assigned to every user. However, to receive from an outside source to your Korbit account, you can set up your receiving address by using the following API. This API endpoint requires the WITHDRAWAL scope.

PARAMETERS

Parameter Description
currency A mandatory parameter. You need to set currency.

ATTRIBUTES

Name Description
address The newly assigned address. Korbit has the private key of the address to process withdrawal request on behalf of the user. If the address is already assigned to the user the existing one is set to this field.
status 'success', if a new address was assigned, an error symbol otherwise.

Error Symbols

Error Name Description
already_assigned The user already has a address assigned.
no_more_address No address is available in Korbit system. Korbit system administrator needs to allocate more addresses.
save_failure This is an internal error. Usually it should not happen.

Getting API Keys

Receive an API key at the following URL : https://www.korbit.co.kr/my/api