API说明

エンドポイント URL

https://www.btcbox.co.jp/api/v1

BTCBOXには、APIキーによる認証が必要となるHTTP Private APIと、認証の必要がない HTTP Public APIがございます。

APIの制限

HTTP APIは、以下のとおりの呼出回数制限を行なっております。

  • trade_add(注文を出す):毎秒5回以内
  • trade_list(注文一覧の確認):毎秒3回以内
  • balance(残高の確認):毎秒5回以内

その他に呼出回数の上限はございませんが、システムに負荷をかける目的で呼出を繰り返していると当社で判断した場合には、APIの使用を制限させていただく場合がございますので、ご了承ください。

【Public API】

・暗号資産の情報一覧(tickers)

リクエスト方法:GET

https://www.btcbox.co.jp/api/v1/tickers

レスポンス

  • 4種類の暗号資産の情報を同時に取得(BTC/JPY、BCH/JPY、LTC/JPY、ETH/JPY)
名称データ型説明
highNUMBER24時間の高値
lowNUMBER24時間の安値
buyNUMBER買い気配
sellNUMBER売り気配
lastNUMBER直近の約定価格
volNUMBER24時間の取引量

サンプル

{
  BTC_JPY: {
    high: 1120536,
    low: 1090060,
    buy: 1104140,
    sell: 1106870,
    last: 1105752,
    vol: 1015.8602
  },
  BCH_JPY: {
    high: 33296,
    low: 31992,
    buy: 32425,
    sell: 33266,
    last: 33249,
    vol: 1088.826
  },
  LTC_JPY: {
    high: 7945,
    low: 7447,
    buy: 7871,
    sell: 7878,
    last: 7874,
    vol: 716.8658
  },
  ETH_JPY: {
    high: 21570,
    low: 20421,
    buy: 21435,
    sell: 21450,
    last: 21449,
    vol: 1357.1235
  }
}

・暗号資産情報(ticker)

リクエスト方法:GET

https://www.btcbox.co.jp/api/v1/ticker

例:ETH/JPYのリアルタイムレート

https://www.btcbox.co.jp/api/v1/ticker?coin=eth

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)

レスポンス

名称データ型説明
highNUMBER24時間の高値
lowNUMBER24時間の安値
buyNUMBER買い気配
sellNUMBER売り気配
lastNUMBER直近の約定価格
volNUMBER24時間の取引量

サンプル

 {
    "high":39700,
    "low":36300,
    "buy":1.879,
    "sell":0,
    "last":38800,
    "vol":283.954
  }

・オーダーブック・板情報(depth)

リクエスト方法:GET

https://www.btcbox.co.jp/api/v1/depth

例:ETH/JPYの板情報

https://www.btcbox.co.jp/api/v1/depth?coin=eth

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)

レスポンス

名称データ型説明
asksArray現在の「売り注文価格・数量」を表示
注文の並びは価格順(高→低)
bidsArray現在の「買い注文価格・数量」を表示。
注文の並びは価格順(低→高)

サンプル

{  
   "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

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)

レスポンス

名称データ型説明
dateSTRING約定日時(UNIX時間)
priceNUMBER約定価格
amountNUMBER約定数量
tidSTRING注文ID
typeSTRING売買区分(”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利用の手順

  1. 該当するパラメータを用意し、秘密鍵を使って署名を行います(署名の詳細は下記参照)
  2. 各パラメータとその署名した文字列(signature)をPOST形式でサーバに送ります。パラメータを送る順序と署名時のパラメータの配列順序は一致している必要がございますので、ご注意下さい。

 署名(signature)について

残高の確認のAPIを例にすると:

  1. 署名自体(signature)以外のパラメータを収集する:coin, key, nonce
  2. 下記のように文字列を作成する: key=xxxxxx&coin=btc&nonce=1508482053
  3. HMacSHA256関数を使用して上記の文字列を暗号化します。暗号化キーは、MD5アルゴリズムでダイジェストされたプライベートAPIキーです。
  4. 署名とその他のパラメータをAPIへ送信します。

 ノンス(nonce)について

通常はUNIXタイムスタンプで設定すれば問題ありませんが、システムのチェックは同一UIDの場合はnonceが前回リクエストしたnonceより大きくなければなりません。マルチスレッドプログラミングを行われる際はご注意下さい。

・残高の確認(balance)

BTCBOXアカウント内の残高を確認する

リクエスト方法:POST

https://www.btcbox.co.jp/api/v1/balance

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
keySTRINGPublic APIキー
nonceSTRINGノンス(nonce)
signatureSTRING署名

レスポンス

名称データ型説明
uidNUMBER各顧客に割り振られたユーザーID
nameauthNUMBER本人認証の状態
『0:未認証』『1:認証済』
moflagNUMBERSMS認証設定の状態
『0:未設定』『1:設定済』
btc_balanceNUMBERBTC残高
btc_lockNUMBER注文中のBTC数量
bch_balanceNUMBERBCH残高
bch_lockNUMBER注文中のBCH数量
ltc_balanceNUMBERLTC残高
ltc_lockNUMBER注文中のLTC数量
eth_balanceNUMBERETH残高
eth_lockNUMBER注文中のETH数量
Jpy_balanceNUMBER日本円残高
jpy_lockNUMBER注文中の日本円数量

サンプル

{
    "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,
    "jpy_balance":2344581.519,
    "jpy_lock":868862.481
}

・アドレスの確認(wallet)

BTCBOXアカウント内のコイン入金アドレスを取得する

リクエスト方法:POST

https://www.btcbox.co.jp/api/v1/wallet

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
keySTRINGAPIキー
nonceSTRINGノンス(nonce)
signatureSTRING署名

レスポンス

名称データ型説明
resultBOOL『true:成功』『false:失敗』
addressSTRING該当コインの入金アドレス

サンプル

{  
   "result":true,
   "address":"1xxxxxxxxxxxxxxxxxxxxxxxx"
}

・注文一覧(trade_list)

最新の注文から指定の日時(since)まで最大100件の注文情報をArrayで取得

リクエスト方法:POST

https://www.btcbox.co.jp/api/v1/trade_list

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
keySTRINGAPIキー
nonceSTRINGノンス(nonce)
sinceNUMBER指定の日時
UNIXタイムスタンプ(UTC時間)
デフォルト: 0
signatureSTRING署名

レスポンス

名称フォーマット説明
idNUMBER注文ID
datetimeSTRING
(YYYY-MM-DD hh:mm:ss)
注文日時
typeSTRING売買区分
(”buy” “sell”)
priceNUMBER注文価格
amount_originalNUMBER注文数量
amount_outstandingNUMBER未約定数量

サンプル

[  
   {  
      "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

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
idSTRING注文ID
keySTRINGAPIキー
nonceSTRINGノンス(nonce)
signatureSTRING署名

レスポンス

名称データ型説明
idNUMBER注文ID
datetimeSTRING注文を出した日時
(yyyy-mm-dd hh:mm:ss)
typeSTRING注文の種類
buy(買い注文)sell(売り注文)
priceNUMBER注文価格
amount_originalNUMBER注文数量
amount_outstandingNUMBER未約定数量
statusSTRING注文状態:
『wait:未約定』『part:一部約定』
『cancelled:取消済み』『all:全て約定済み』

サンプル

{  
   "id":11,
   "datetime":"2014-10-21 10:47:20",
   "type":"sell",
   "price":42000,
   "amount_original":1.2,
   "amount_outstanding":1.2,
   "status":"closed",
   "trades":[  

   ]
}

・注文を取り消す(trade_cancel)

指定された注文を取り消す。

リクエスト方法:POST

https://www.btcbox.co.jp/api/v1/trade_cancel

パラメータ

名称データ型必須説明
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
idNUMBER注文ID
keySTRINGPublic APIキー
nonceNUMBERノンス(nonce)
signatureSTRING署名

レスポンス

名称データ型説明
resultBOOL結果
『true:取消済』
『false:取消失敗』
idNUMBER取消対象の注文ID

サンプル

{
    result: true,
    id: 11
}

・注文を出す(trade_add)

指定の条件で注文を出す

リクエスト方法:POST

https://www.btcbox.co.jp/api/v1/trade_add

パラメータ

名称データ型必須備考
coinSTRINGBTC、BCH、LTC、ETH
(デフォルト: BTC)
keySTRINGPublic APIキー
nonceNUMBERノンス(nonce)
amountNUMBER注文数量
priceNUNBER注文価格
typeSTRING注文種類
buy(買い注文)sell(売り注文)
signatureSTRING署名

レスポンス

名称データ型説明
resultBOOL結果
『true:注文済』
『false:注文失敗』
idNUMBER注文が成功して
生成された注文ID

サンプル

{
    "result":true,
    "id":11
}

エラーコード一覧

エラーコード説明
100必須パラメーターを空にすることはできません
101無効なパラメータです
102コインが存在しません
103キーが存在しません
104署名が一致しません
105権限がありません
106リクエストが期限切れになりました(ノンスエラー)
107価格は整数にして下さい
200殘高がありません
201取引数が少なすぎます
202価格は0〜1000000である必要があります
203注文が存在しません
301確認されていません
401システムエラー
402リクエストが頻繁すぎます
403非オープンAPIです
404IP制限はリソースを要求していません

【サンプルコード】

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, $type = 'all')
	{
		return $this->request('trade_list', array('since' => $since, 'type' => $type), '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;
	}
}