エンドポイント URL
https://www.btcbox.co.jp/api/v1
BTCBOXには、APIキーによる認証が必要となるHTTP Private APIと、認証の必要がない HTTP Public APIがございます。
APIの制限
HTTP APIは、以下のとおりの呼出回数制限を行なっております。
- trade_add(注文を出す) 毎秒2回以内
- balance (残高の確認)毎秒2回以内
- trade_list (注文一覧の確認)毎秒1回以内
- order_history(注文履歴)毎秒4回以内
- trade_view (注文詳細)毎秒1回以内
その他に呼出回数の上限はございませんが、システムに負荷をかける目的で呼出を繰り返していると当社で判断した場合には、APIの使用を制限させていただく場合がございますので、ご了承ください。
【Public API】
・暗号資産の情報一覧(tickers)
リクエスト方法:GET
https://www.btcbox.co.jp/api/v1/tickers
レスポンス
- 7種類の暗号資産の情報を同時に取得(BTC/JPY、BCH/JPY、LTC/JPY、ETH/JPY、DOGE/JPY、DOT/JPY、TRX/JPY)
名称 | データ型 | 説明 |
---|---|---|
high | NUMBER | 24時間の高値 |
low | NUMBER | 24時間の安値 |
buy | NUMBER | 買い気配 |
sell | NUMBER | 売り気配 |
last | NUMBER | 直近の約定価格 |
vol | NUMBER | 24時間の取引量 |
サンプル
{
"BTC_JPY": {
"high": 2829667,
"low": 2759378,
"buy": 2774453,
"sell": 2777955,
"last": 2774210,
"vol": 566.6947
},
"BCH_JPY": {
"high": 17067,
"low": 16000,
"buy": 16010,
"sell": 16277,
"last": 16242,
"vol": 867.8011
},
"LTC_JPY": {
"high": 7905,
"low": 7501,
"buy": 7500,
"sell": 7550,
"last": 7548,
"vol": 820.1909
},
"ETH_JPY": {
"high": 192570,
"low": 185069,
"buy": 186038,
"sell": 186691,
"last": 186237,
"vol": 231.9109
},
"DOGE_JPY": {
"high": 9.04,
"low": 8.38,
"buy": 8.62,
"sell": 8.63,
"last": 8.62,
"vol": 20925.4521
},
"DOT_JPY": {
"high": 936,
"low": 892,
"buy": 902,
"sell": 902,
"last": 902,
"vol": 21380.8126
},
"TRX_JPY": {
"high": 9.47,
"low": 8.93,
"buy": 8.97,
"sell": 8.97,
"last": 8.97,
"vol": 21140.7387
}
}
・暗号資産情報(ticker)
リクエスト方法:GET
https://www.btcbox.co.jp/api/v1/ticker
例:ETH/JPYのリアルタイムレート
https://www.btcbox.co.jp/api/v1/ticker?coin=eth
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth、doge、dot、trx (デフォルト: btc) |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
high | NUMBER | 24時間の高値 |
low | NUMBER | 24時間の安値 |
buy | NUMBER | 買い気配 |
sell | NUMBER | 売り気配 |
last | NUMBER | 直近の約定価格 |
vol | NUMBER | 24時間の取引量 |
サンプル
{
"high": 2829667,
"low": 2759378,
"buy": 2774660,
"sell": 2777845,
"last": 2776343,
"vol": 566.7368
}
・オーダーブック・板情報(depth)
リクエスト方法:GET
https://www.btcbox.co.jp/api/v1/depth
例:ETH/JPYの板情報
https://www.btcbox.co.jp/api/v1/depth?coin=eth
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
asks | Array | 現在の「売り注文価格・数量」を表示 注文の並びは価格順(高→低) |
bids | Array | 現在の「買い注文価格・数量」を表示。 注文の並びは価格順(低→高) |
サンプル
{
"asks":[
[
41700,
10
],
[
41300,
6
],
[
40900,
10
],
[
40500,
6
],
[
40125,
10.0277
],
[
40100,
5
],
[
40089,
0.509
],
[
39800,
14.7132
],
[
39799,
0.0695
],
[
39798,
5
],
[
39700,
2.89
],
[
39000,
0.209
]
],
"bids":[
[
38300,
1.879
],
[
38100,
1.0078
],
[
38000,
1.24
],
[
37700,
4.706
],
[
37600,
3.8313
],
[
37001,
0.146
],
[
36999,
5.8
],
[
36400,
5
],
[
36200,
1.3314
],
[
36002,
2
],
[
36000,
1.568
],
[
35501,
0.282
],
[
35500,
9.9
],
[
35200,
5.6
]
]
}
・約定履歴(orders)
直近100件の約定情報を約定時間の昇順で取得
リクエスト方法:GET
https://www.btcbox.co.jp/api/v1/orders
例:ETH/JPYの約定履歴
https://www.btcbox.co.jp/api/v1/orders?coin=eth
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
date | STRING | 約定日時(UNIX時間) |
price | NUMBER | 約定価格 |
amount | NUMBER | 約定数量 |
tid | STRING | 注文ID |
type | STRING | 売買区分(”buy” “sell”) |
サンプル
[
{
"date":"0",
"price":3,
"amount":0.1,
"tid":"1",
"type":"buy"
},
{
"date":"0",
"price":32323,
"amount":2,
"tid":"2",
"type":"sell"
},
{
"date":"0",
"price":32,
"amount":432,
"tid":"3",
"type":"sell"
},
{
"date":"0",
"price":323,
"amount":2,
"tid":"4",
"type":"sell"
},
{
"date":"0",
"price":2100,
"amount":0.3,
"tid":"5",
"type":"buy"
}
]
【Private API】
認証について
Private APIを利用するには認証が必要となります。認証は下記の手順で行います。
APIキーの取得
下記URLを参照して、APIの公開鍵と秘密鍵を取得します。
APIキーの取得
注意:秘密鍵が第三者に知られた場合、お客様が意図しない資産の操作・取引等が行われ、損害が発生する可能性がございます。必ず安全な方法により、ご自身で管理して下さい。
Private API利用の手順
- 該当するパラメータを用意し、秘密鍵を使って署名を行います(署名の詳細は下記参照)
- 各パラメータとその署名した文字列(signature)をPOST形式でサーバに送ります。パラメータを送る順序と署名時のパラメータの配列順序は一致している必要がございますので、ご注意下さい。
署名(signature)について
残高の確認のAPIを例にすると:
- 署名自体(signature)以外のパラメータを収集する:coin, key, nonce
- 下記のように文字列を作成する:
key=xxxxxx&coin=btc&nonce=1508482053
- HMacSHA256関数を使用して上記の文字列を暗号化します。暗号化キーは、MD5アルゴリズムでダイジェストされたプライベートAPIキーです。
- 署名とその他のパラメータをAPIへ送信します。
ノンス(nonce)について
通常はUNIXタイムスタンプで設定すれば問題ありませんが、システムのチェックは同一UIDの場合はnonceが前回リクエストしたnonceより大きくなければなりません。マルチスレッドプログラミングを行われる際はご注意下さい。
・残高の確認(balance)
BTCBOXアカウント内の残高を確認する
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/balance
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth、doge、dot、trx (デフォルト: btc) |
key | STRING | 必 | Public APIキー |
nonce | STRING | 必 | ノンス(nonce) |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
uid | NUMBER | 各顧客に割り振られたユーザーID |
nameauth | NUMBER | 本人認証の状態 『0:未認証』『1:認証済』 |
moflag | NUMBER | SMS認証設定の状態 『0:未設定』『1:設定済』 |
{coin}_balance | NUMBER | 暗号資産の残高(例:BTCの場合は[btc_balance]) |
{coin}_lock | NUMBER | 注文中の暗号資産の数量(例:BTCの場合は[btc_lock]) |
jpy_balance | NUMBER | 日本円の残高 |
jpy_lock | NUMBER | 注文中の日本円の残高 |
サンプル
{
"uid":8,
"nameauth":0,
"moflag":0,
"btc_balance":4.234234,
"btc_lock":0,
"bch_balance":234,
"bch_lock":15,
"ltc_balance":32429.6,
"ltc_lock":2.4,
"eth_balance":0,
"eth_lock":0,
"doge_balance":0,
"doge_lock":0,
"dot_balance":0,
"dot_lock":0,
"trx_balance":0,
"trx_lock":0,
"jpy_balance":2344581.519,
"jpy_lock":868862.481
}
・アドレスの確認(wallet)
BTCBOXアカウント内のコイン入金アドレスを取得する
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/wallet
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth、doge、dot、trx (デフォルト: btc) |
key | STRING | 必 | APIキー |
nonce | STRING | 必 | ノンス(nonce) |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
result | BOOL | 『true:成功』『false:失敗』 |
address | STRING | 該当コインの入金アドレス |
サンプル
{
"result":true,
"address":"1xxxxxxxxxxxxxxxxxxxxxxxx"
}
・注文一覧(trade_list)
最新の注文から指定の日時(since)まで最大100件の注文情報をArrayで取得
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/trade_list
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
key | STRING | 必 | APIキー |
nonce | STRING | 必 | ノンス(nonce) |
since | NUMBER | 不 | 指定の日時 UNIXタイムスタンプ(UTC時間) デフォルト: 0 |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
id | NUMBER | 注文ID |
datetime | STRING (YYYY-MM-DD hh:mm:ss) | 注文日時 |
type | STRING | 売買区分 (”buy” “sell”) |
price | NUMBER | 注文価格 |
amount_original | NUMBER | 注文数量 |
amount_outstanding | NUMBER | 未約定数量 |
サンプル
[
{
"id":"7",
"datetime":"2014-10-20 13:27:38",
"type":"buy",
"price":42750,
"amount_original":0.235,
"amount_outstanding":0.235
},
{
"id":"6",
"datetime":"2014-10-20 13:27:15",
"type":"buy",
"price":43299,
"amount_original":4.789,
"amount_outstanding":4.789
},
{
"id":"5",
"datetime":"2014-10-20 13:26:52",
"type":"buy",
"price":42500,
"amount_original":14,
"amount_outstanding":14
},
{
"id":"4",
"datetime":"2014-10-20 13:26:23",
"type":"buy",
"price":43200,
"amount_original":0.4813,
"amount_outstanding":0.4813
},
{
"id":"3",
"datetime":"2014-10-20 13:25:57",
"type":"buy",
"price":43200,
"amount_original":0.4813,
"amount_outstanding":0.4813
}
]
・注文の詳細情報(trade_view)
指定された注文内容を取得
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/trade_view
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
id | STRING | 必 | 注文ID |
key | STRING | 必 | APIキー |
nonce | STRING | 必 | ノンス(nonce) |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
id | NUMBER | 注文ID |
datetime | STRING | 注文を出した日時 (yyyy-mm-dd hh:mm:ss) |
type | STRING | 注文の種類 buy(買い注文)sell(売り注文) |
price | NUMBER | 注文価格 |
amount_original | NUMBER | 注文数量 |
amount_outstanding | NUMBER | 未約定数量 |
status | STRING | 注文状態: 『wait:未約定』『Not Executed or Part:一部約定』 『cancelled:取消済み』『all:全て約定済み』 |
trades | ARRAY | 詳細は下の表をご確認ください |
名称 | データ型 | 説明 |
---|---|---|
trade_id | NUMBER | 注文ID |
amount | NUMBER | 注文数量 |
price | NUMBER | 注文価格 |
datetime | STRING | 注文を出した日時 |
fee | NUMBER | 手数料 |
サンプル
{
"id": 11,
"datetime": "2014-10-21 10:47:20",
"type": "buy",
"price": 42000,
"amount_original": 2.4,
"amount_outstanding": 0,
"status": "all",
"trades": [
{
"trade_id": "12",
"amount": 1.1,
"price": 42000,
"datetime": "2014-10-21 10:47:20",
"fee": 0.0001
},
{
"trade_id": "13",
"amount": 1.3,
"price": 42000,
"datetime": "2014-10-21 10:47:20",
"fee": 0.0001
}
]
}
・注文を取り消す(trade_cancel)
指定された注文を取り消す。
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/trade_cancel
パラメータ
名称 | データ型 | 必須 | 説明 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
id | NUMBER | 必 | 注文ID |
key | STRING | 必 | Public APIキー |
nonce | NUMBER | 必 | ノンス(nonce) |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
result | BOOL | 結果 『true:取消済』 『false:取消失敗』 |
id | NUMBER | 取消対象の注文ID |
サンプル
{
result: true,
id: 11
}
・注文を出す(trade_add)
指定の条件で注文を出す
リクエスト方法:POST
https://www.btcbox.co.jp/api/v1/trade_add
パラメータ
名称 | データ型 | 必須 | 備考 |
---|---|---|---|
coin | STRING | 不 | btc、bch、ltc、eth (デフォルト: btc) |
key | STRING | 必 | Public APIキー |
nonce | NUMBER | 必 | ノンス(nonce) |
amount | NUMBER | 必 | 注文数量 |
price | NUNBER | 必 | 注文価格 |
type | STRING | 必 | 注文種類 buy(買い注文)sell(売り注文) |
signature | STRING | 必 | 署名 |
レスポンス
名称 | データ型 | 説明 |
---|---|---|
result | BOOL | 結果 『true:注文済』 『false:注文失敗』 |
id | NUMBER | 注文が成功して 生成された注文ID |
サンプル
{
"result":true,
"id":11
}
エラーコード一覧
エラーコード | 説明 |
---|---|
100 | 必須パラメーターを空にすることはできません |
101 | 無効なパラメータです |
102 | コインが存在しません |
103 | キーが存在しません |
104 | 署名が一致しません |
105 | 権限がありません |
106 | リクエストが期限切れになりました(ノンスエラー) |
107 | 注文価格が0以下になっています |
200 | 殘高が不足しています |
201 | 取引数が少なすぎます |
202 | 注文価格が市場価格上下20%の範囲を超えています |
203 | 注文が存在しません |
204 | 注文価格が上限を超えています(BTCは1000万円、その他のコインは100万円) |
301 | 本人確認が完了していません |
302 | 本人確認書類の有効期限が切れています |
401 | システムエラー |
402 | リクエスト回数が上限を上回っています |
403 | 非オープンAPIです |
404 | IP制限はリソースを要求していません |
900 | アカウントが解約されています |
901 | 取引が一時的に停止されています |
【サンプルコード】
・Python
Python・PHP
<?php
$api = new apidemo('Public Key', 'Private Key', 'btc');
$api->get_balance();
class apidemo
{
/**
* API URL
*
* @var string
*/
private $apiurl = 'https://www.btcbox.co.jp/api/v1/';
/**
* Public Key
* Apply address:https://www.btcbox.co.jp/api/secret/keys/
*
* @var string
*/
private $key;
/**
* Private Key
* Apply address:https://www.btcbox.co.jp/api/secret/keys/
*
* @var string
*/
private $passphrase;
/**
* Coin
*/
public $coin;
/**
* construct
*/
public function __construct($key = false, $passphrase = false, $coin = 'btc')
{
$this->key = $key;
$this->passphrase = $passphrase;
$this->coin = $coin;
}
/**
* Market
*
* @return array
* @access open
*/
public function ticker()
{
return $this->request('ticker', array(), 'GET', false);
}
/**
* Depth
*
* @return array
* @access open
*/
public function get_depth()
{
return $this->request('depth', array(), 'GET', false);
}
/**
* Get Orders
*
* @param $since -1~9999999999
*
* @return array
* @access open
*/
public function get_trades($since = -1)
{
return $this->request('orders', array('since' => $since), 'GET', false);
}
/**
* Account Balance
*
* @return array
* @access readonly
*/
public function get_balance()
{
return $this->request('balance', array(), 'POST');
}
/**
* Wallet Adress
*
* @return array
* @access readonly
*/
public function get_wallet()
{
return $this->request('wallet', array(), 'POST');
}
/**
* Get your recent orders
*
* @param integer $since After a time(Default All)
* @param string open|all $type type
*
* @return array
* @access readonly
*/
public function get_orders($since = 0)
{
return $this->request('trade_list', array('since' => $since), 'POST');
}
/**
* Order Details
*
* @param integer $orderid Orders Id
*
* @return array
* @access readonly
*/
public function fetch_order($orderid)
{
return $this->request('trade_view', array('id' => $orderid), 'POST');
}
/**
* Cancel Order
*
* @param integer $orderid Order ID
*
* @return array
* @access full
*/
public function cancel_order($orderid)
{
return $this->request('trade_cancel', array('id' => $orderid), 'POST');
}
/**
* Trade
*
* @param float $amount number
* @param float $price price
*
* @return array
* @access full
*/
public function add($amount, $price, $type)
{
return $this->request('trade_add', array('amount' => $amount, 'price' => $price, 'type' => $type), 'POST');
}
/**
* Request
*
* @param string $method API Url
* @param array $params Parameters
* @param string GET|POST $http_method Request method
* @param bool $auth is Verify
*
* @return array
*/
protected function request($method, $params = array(), $http_method = 'GET', $auth = true)
{
# coin
$params['coin'] = $this->coin;
if ($auth) {
# Unique number
$mt = explode(' ', microtime());
$params['nonce'] = $mt[1] . substr($mt[0], 2, 2);
# verify information
$params['key'] = $this->key;
$params['signature'] = hash_hmac('sha256', http_build_query($params, '', '&'), md5($this->passphrase));
}
# data string
$data = http_build_query($params, '', '&');
$data = $this->do_curl($method, $data, ($http_method == 'GET' ? 'GET' : 'POST'));
return $data;
}
/**
* Request
*/
private function do_curl($path, $data, $http_method)
{
static $ch = null;
$url = $this->apiurl . $path;
if (is_null($ch)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; Btcbox PHP client; ' . php_uname('s') . '; PHP/' . phpversion() . ')');
}
if ($http_method == 'GET') {
$url .= '?' . $data;
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
if (!$response = curl_exec($ch)) {
throw new Exception('Could not get reply: ' . curl_error($ch));
}
if (!$data = json_decode($response, true)) {
throw new Exception('Invalid data received');
}
return $data;
}
}