API

APIについて

API

一般的な使用法

注意:すべてのAPI URLは、api.kraken.comのドメインを使用してください。

PublicメソッドはGETまたはPOSTのいずれかを使うことができます。

PrivateメソッドはPOSTを使用し、次のように設定しなければなりません。

HTTPヘッダ:

API-Key = APIキー
API-Sign = HMAC-SHA512署名:(URIパス + SHA256(nonce + POSTデータ))を、base64でデコードされたAPI秘密鍵で署名してください

POSTデータ:

nonce = (ナンス)常に増加する符号なしの64ビット整数
otp = 2段階認証用パスワード(未設定の場合は不要)

注: ナンスをリセットすることはできませんので、以前に使ったナンスより低い値が生成されないようにしてください。永続カウンターや現在の時刻100分の1秒までの時間などを使うのがお勧めです。

通貨資産を必要とするAPI呼び出しは、ISOに登録されている名前がある場合はISO4217-A3の名前を使用し、未登録の名前の場合は通常使用されている3文字もしくは、O4217-A3コードを使用(参照: http://www.ifex-project.org/)してください。

サーバーからのレスポンスはすべてJSON式で、以下のようになります。

error = 以下の形式のエラーメッセージの配列
    <文字-重大度コード><文字列-エラーカテゴリ>:<文字列-エラータイプ>[:<文字列-補足情報>]
    重大度コードは、エラーの場合はE、または警告の場合はWとなります
result = APIコールの結果(エラーが発生した場合には存在しない場合もあります)

注: 数字を文字列として扱う場合は、標準データタイプをオーバーフローさせる可能性がありますので注意してください。

公開マーケット データ

サーバータイムを表示

URL: https://api.kraken.com/0/public/Time

結果:サーバータイム

unixtime = UNIXのタイプスタンプ
rfc1123 = RFC 1123タイムフォーマット

注: サーバー、クライアント間の時差を計算するために使えます。

資産情報の表示

URL: https://api.kraken.com/0/public/Assets

入力:

info = 取得する情報(任意):
    info = すべての情報(デフォルト)
aclass = 資産クラス(任意):
    通貨 (デフォルト)
asset = 情報を取得する資産のリスト(カンマ区切り)(任意、 デフォルト = 付与された全資産クラス)

結果:資産名と情報の配列

 = 資産名
    altname = 代替名
    aclass = 資産クラス
    decimals = Kraken内計算に使う少数桁数
    display_decimals = ユーザーに表示する少数桁数

取引可能な資産ペアの表示

URL: https://api.kraken.com/0/public/AssetPairs

入力:

info = 取得する情報(任意):
    info = すべての情報(デフォルト)
    leverage = レバレッジ情報
    fees = 手数料体
    margin = 証拠金情報
pair = 情報を取得する資産のカンマ区切りリスト(任意、 デフォルト = all)

結果:ペア名と情報の配列

 = ペア名
    altname = 代替ペア名
    aclass_base = ベースコンポーネントの資産クラス
    base = ベースコンポーネントの資産ID
    aclass_quote = ベースコンポーネントの資産ID
    quote = クオートコンポーネントの資産ID
    lot = ボリュームロットサイズ
    pair_decimals = ペアの少数桁数
    lot_decimals = ボリュームの少数桁数
    lot_multiplier = 通貨ボリュームを得るために掛け合わせるロットボリュームの量
    leverage = 利用できるレバレッジ金額の配列
    fees =  [ボリューム、%手数料]タプルの手数料体系の配列
    fee_volume_currency = ボリュームディスカウント通貨
    margin_call = 証拠金請求レベル
    margin_stop = ストップアウト/清算証拠金レベル

ティッカー情報の表示

URL: https://api.kraken.com/0/public/Ticker

入力:

pair = 情報を取得するための資産ペアのリスト(カンマ区切り)

結果:ペア名とティッカー情報の配列

 = ペア名
    a = 買い配列(<価格>, <ロットボリューム>),
    b = 売り配列(<価格>, <ロットボリューム>),
    c = 最終取引クローズ配列(<価格>, <ロットボリューム>),
    v = ボリューム配列(<今日>, <過去24時間>),
    p = 出来高加重平均価格配列(VWAP)(<今日>, <過去24時間>),
    t = 取引配列の数(<今日>, <過去24時間>),
    l = 低配列(<今日>, <過去24時間>),
    h = 高配列(<今日>, <過去24時間>),
    o = 今日の開始価格

注: 本日の取引は、00:00:00 UTCに開始します。

OHLCデータ

URL: https://api.kraken.com/0/public/OHLC

入力:

pair = OHLCデータを取得する資産ペア
interval = タイムフレーム間隔(分単位)(任意):
	1 (デフォルト)、5、15、30、60、240、1440、10080、21600
since = 付与ID以降のコミットされたOHLCデータを返す(任意、排他的)

結果:ペア名とOHLCデータの配列

注:OHLC 配列の最終項目は、現在まだ終了していない時間帯になります。「Since」の値に関わらず最終項目が、常に現在の最新情報となります。

 = 配列入力のペア名配列(<時間>, <オープン>, <高い>, <低い>, <クローズ>, , <出来高>, <総数>)
last = 新規取引データをポーリングして以降、使用されるOHLCデータ

オーダーブックを表示

URL: https://api.kraken.com/0/public/Depth

入力:

pair = 市場の深さを取得する資産ペア
count = 買い/売りの最大数(任意)

結果:ペア名と市場の深さの配列

 = ペア名
    asks = 配列入力の買い側配列(<価格>, <出来高>, <タイムスタンプ>)
    bids = 配列入力の売り側配列(<価格>, <出来高>, <タイムスタンプ>)

最新の取引を表示

URL: https://api.kraken.com/0/public/Trades

入力:

pair = 取引データを取得する資産ペア
since = 付与ID以降の取引データを返却する(任意、 排他的)

結果:ペア名と最新の取引データの配列

 = 配列入力のペア名配列(<価格>, <ボリューム>, <タイム>, <買い/売り>, <成行/指値>, <その他>)
last = 新規取引データをポーリングして以降、使用されるID

最新のスプレッドデータの表示

URL: https://api.kraken.com/0/public/Spread

入力:

pair = 取引データを取得する資産ペア
since = 付与ID以降の取引データを返す(任意、包括的)

結果:ペア名と最新のスプレッドデータの配列

 = 配列入力のペア名配列(<タイム>, , )
last = 新規スプレッドデータを引き出して以降、使用されるID

注: 「since」は包括的ですので、過去のセットと同時刻に返却されたすべてのデータは、その当時の過去のせっと同様に入力のすべてを上書きしなければなりません。

ユーザ個人情報

アカウント残高の取得

URL: https://api.kraken.com/0/private/Balance

結果:資産名と情報の配列

取引残高を取得

URL: https://api.kraken.com/0/private/TradeBalance

入力:

aclass = 資産クラス(任意):
    通貨 (デフォルト)
asset = 残高の決定に使用するベース資産 (デフォルト = ZUSD)

結果:取引残高情報の配列

tb = 取引残高(全通貨の連結残高)
m = オープンポジションの当初証拠金額
n = オープンポジションの未回収の純利益/損失
c = オープンポジションのコストベース
v = オープンポジションの現在の流動評価
e = エクイティー = 取引残高 + 未回収の純利益/損失
mf = フリー証拠金 = エクイティー - 当初証拠金(新規のオープンポジションに利用可能な最大証拠金)
ml = 証拠金レベル = (エクイティー / 当初証拠金) * 100

注: 流動評価に使用されるレートは、最善の売り値と買い値の中間点です。

オープン注文の表示

URL: https://api.kraken.com/0/private/OpenOrders

入力:

trades = 取引を出力に含むかどうか (任意、デフォルト = false)
userref = 参照 id を付与されたユーザに結果を制限(任意)

結果:キーとしてのtxidを伴うオープン配列のオーダー情報の配列

refid = この注文に作成された参照注文トランザクションID
userref = ユーザー参照ID
status = 注文状況:
    pending = 保留注文として記載されたもの
    open =  オープン注文
    closed = クローズされた注文
    canceled = キャンセル済みの注文
    expired = 期限切れの注文
opentm = 発注時のUNIXタイムスタンプ
starttm = 注文開始時のUNIXタイムスタンプ(設定されていない場合は0)
expiretm = 注文終了時のUNIXタイムスタンプ(設定されていない場合は0)
descr = 注文説明情報
    pair = 資産ペア
    type = 注文タイプ(買い/売り)
    ordertype = 注文タイプ(標準注文を追加を参照)
    price = 1次価格
    price2 = 2次価格
    leverage = レバレッジの金額
    position = クローズするTX ID(注文がポジションの場合)
    order =  注文の説明
    close = 条件付きクローズ注文の説明(条件が設定されている場合)
vol = 注文の総額(oflagsでviqcが設定されていない場合、ベース通貨)
vol_exec = 実行された総額(oflagsでviqcが設定されていない場合、見積もり通貨)
cost = 合計費用(oflagsでviqcが設定されていない場合、見積もり通貨)
fee = 合計手数料(見積もり通貨)
price = 平均価格(oflagsでviqcが設定されていない場合、見積もり通貨)
stopprice = ストップ価格(トレーリングスタップでは見積もり通貨)
limitprice = 注文が実行される指値価格(指値ベースの注文タイプがトリガされるばあいには見積もり通貨)
misc = その他の情報(カンマ区切り)
    stopped = ストップ価格で実行
    touched = タッチ価格でトリガ
    liquidated = 清算
    partial = 部分約定
oflags =  注文フラグのカンマ区切りのリスト
    viqc = 見積もり通貨での総額
    plbc = ベース通貨での利益/損失を優先
    nompp = 成行価格保護なし
trades =  注文に関連する取引IDの配列(取引情報がリクエストされ、データが利用できる場合)

注: 別途注記のない場合、コスト、費用、価格、出来高は、通貨のスケールではなく、資産ペアのスケールとなります。たとえば、資産ペアがスケール8のロットサイズを使用する場合、表示する通貨がスケール2のみであってもボリュームはスケール8を使用します。同様に、資産ペアの価格スケールが5の場合は、基礎通貨がスケール8であってもスケールは5のままです。

クローズオーダーの表示

URL: https://api.kraken.com/0/private/OpenOrders

入力:

trades = 取引を出力に含むかどうか (任意、デフォルト = false)
userref = 参照 id を付与されたユーザに結果を制限(任意)
start = 開始時のUNIXタイムスタンプ、または注文TX ID発行時(任意、排他的)
end = 終了時のUNIXタイムスタンプ、または注文TX ID発行時(任意、包括的)
ofs = 結果オフセット
closetime = 使用する時間(任意)
    open
    close
    both (デフォルト)

結果: 注文情報の配列

closed = 注文情報の配列。オープンオーダーの取得を参照。追加フィールド:
    closetm = 注文クローズ時のUNIXタイムスタンプ
    reason = ステータスに関する追加情報(該当する場合)
count = 基準に一致する利用可能な注文情報の量

注: 注文TX IDに付与された時刻は、UNIXタイムスタンプより正確です。注文TX IDに時刻がついている場合は、注文オープン時の時刻が使用されます。

注文情報のクエリ

URL: https://api.kraken.com/0/private/QueryOrders

入力:

trades = 取引を出力に含むかどうか (任意、デフォルト = false)
userref = 参照 id を付与されたユーザに結果を制限(任意)
txid = 情報をクエリするトランザクションIDのリスト(カンマ区切り、最大20)

結果: 注文情報に関連した配列

 = オーダー情報  オープン注文の取得/クローズ注文の取得を参照

取引履歴を取得

URL: https://api.kraken.com/0/private/TradesHistory

入力:

type = 取引のタイプ(任意)
    all = すべてのタイプ(デフォルト)
    any position = すべてのポジション(オープンまたはクローズ)
    closed position = クローズされたポジション
    closing position = ポジションの全部または一部をクローズする任意の取引
    no position = ポジションを伴わない取引
trades = ポジションに関連する取引を出力に含めるかどうか(任意、デフォルト = false)
start = 開始時のUNIXタイムスタンプ、または取引TX ID発行時(任意、エクスクルーシブ)
end = 終了時のUNIXタイムスタンプ、または取引TX ID発行時(任意、インクルーシブ)
ofs = 結果オフセット

結果: 取引情報の配列

trades = TXIDをキーとした取引情報の配列
    ordertxid = 取引の実行を伴った注文
    pair = 資産ペア
    time = 取引のUNIXタイムスタンプ
    type = 注文のタイプ(買い/売り)
    ordertype = 注文タイプ
    price = 注文が(見積もり通貨)にて実行された平均価格
    cost = 注文の合計コスト(見積もり通貨)
    fee = 合計金額(見積もり通貨)
    vol = 出来高(ベース通貨)
    margin = 当初証拠金(見積もり通貨)
    misc = その他の情報のリスト(カンマ区切り)
        closing = ポジションの全部または一部をクローズする取引
count = 基準に一致する利用可能な取引情報の数

取引でポジションをオープンした場合、次のフィールドは、取引情報にも存在します。

    posstatus = ポジションのステータス(オープン/クローズ)
    cprice = ポジションのクローズした部分の平均価格(見積もり通貨)
    ccost = ポジションのクローズした部分の合計費用(見積もり通貨)
    cfee = ポジションのクローズした部分の合計手数料(見積もり通貨)
    cvol = ポジションのクローズした部分の合計手数料(見積もり通貨)
    cmargin = ポジションのクローズした部分で開放された合計証拠金(見積もり通貨)
    net = ポジションのクローズした部分の純利益/損失(見積もり通貨、見積もり通貨スケール)
    trades = ポジションのクローズした取引のリスト(該当する場合)

注:

  • 別途注記のない場合、コスト、費用、価格、出来高は、通貨のスケールではなく、資産ペアのスケールとなります。
  • 注文TX IDに付与された時刻は、UNIXタイムスタンプより正確です。

取引情報のクエリ

URL: https://api.kraken.com/0/private/QueryTrades

入力:

txid = 情報をクエリするトランザクションIDのリスト(カンマ区切り、最大20)
trades = ポジションに関連する取引を出力に含めるかどうか(任意、デフォルト = false)

結果: 取引情報に関連した配列

 = 取引情報。取引履歴を取得を参照

オープンポジションの取得

URL: https://api.kraken.com/0/private/OpenPositions

入力:

txid = 出力を制限するトランザクションIDのリスト(カンマ区切り)
docalcs = 利益/損失の計算を含めるかどうか(任意、デフォルト = false)

結果: オープンポジション情報に関連した配列

 = オープンポジション情報
    ordertxid = 取引の実行を担当する注文
    pair = 資産ペア
    time = 取引のUNIXタイムスタンプ
    type = ポジションをオープンするために使用した注文のタイプ(買い/売り)
    ordertype = ポジションをオープンするために使用した注文のタイプ
    cost = ポジションのオープン時の費用(oflagsでviqcが設定されていない場合、見積もり通貨)
    fee = ポジションのオープン時の手数料(見積もり通貨)
    vol = ポジションのボリューム(oflagsでviqcが設定されていない場合、ベース通貨)
    vol_closed = クローズされたポジション出来高(oflagsでviqcが設定されていない場合、ベース通貨)
    margin = 当初証拠金(見積もり通貨)
    value = 残っているポジションの現在価値(docalcsがリクエストされた場合、見積もり通貨)
    net = 残っているポジションの未回収の利益/損失(docalcsがリクエストされた場合、見積もり通貨、見積もり通貨スケール)
    misc = その他の情報(カンマ区切り)
    oflags = 注文フラグのリスト(カンマ区切り)
        viqc = 見積もり通貨での出来高

注: 別途注記のない場合、コスト、費用、価格、ボリュームは、通貨のスケールではなく、資産ペアのスケールとなります。

帳簿情報の取得

URL: https://api.kraken.com/0/private/Ledgers

入力:

aclass = 資産クラス(任意):
    currency(デフォルト)
asset = 出力を制限する資産のリスト(カンマ区切り)(任意、デフォルト = all)
type = 取得する帳簿のタイプ(任意):
    all(デフォルト)
    deposit
    withdrawal
    trade
    margin
start = 開始時のUNIXタイムスタンプまたは結果の帳簿ID(任意、エクスクルーシブ)
end = 終了時のUNIXタイムスタンプまたは結果の帳簿ID(任意、インクルーシブ)
ofs = 結果オフセット

結果: 帳簿情報に関連した配列

 = 帳簿情報
    refid = 参照ID
    time = 帳簿のUNIXタイムスタンプ
    type = 帳簿入力のタイプ
    aclass = 資産クラス
    asset = 資産
    amount = トランザクション金額
    fee = トランザクション手数料
    balance = 結果残高

注: 帳簿IDに付与された時刻は、UNIXタイムスタンプより正確です。

帳簿のクエリ

URL: https://api.kraken.com/0/private/QueryLedgers

入力:

id = 情報をクエリする帳簿IDのリスト(カンマ区切り、最大20)

結果: 帳簿情報に関連した配列

 = 帳簿情報。帳簿情報の取得を参照

取引額の取得

URL: https://api.kraken.com/0/private/TradeVolume

入力:

pair = 手数料情報を取得する資産ペアのリスト(カンマ区切り)(任意)

結果: 関連する配列

currency = 通貨額
volume = 現在の割引額
fees = 資産ペアと手数料認証レベル情報の配列(リクエストされた場合)
    fee = 現在の手数料(%)
    minfee = ペアの最小手数料(固定手数料でない場合)
    maxfee = ペアの最大手数料(固定手数料でない場合)
    nextfee = ペアの次の認証レベルの手数料(固定手数料でない場合、最低の手数料認証レベルの場合はnil)
    nextvolume = 次の認証レベルの出来高レベル(固定手数料でない場合、最低の手数料認証レベルの場合はnil)
    tiervolume = 現在のティアの出来高レベル(固定手数料でない場合、最低の手数料認証レベルの場合はnil)

プライベトユーザー取引

スタンダード注文の追加

URL: https://api.kraken.com/0/private/AddOrder

入力:

pair = 資産ペア
type = 注文のタイプ(買い/売り)
ordertype = 注文のタイプ:
    market
    limit(price = 指値価格)
    stop-loss(price = ストップロス価格)
    take-profit(price = 利益確定価格)
    stop-loss-profit(price = ストップロス価格, price2 = 利益確定価格)
    stop-loss-profit-limit(price = ストップロス価格, price2 = 利益確定価格)
    stop-loss-limit(price = ストップロストリガ価格, price2 = トリガーが指定された指値価格)
    take-profit-limit(price = 利益確定トリガ価格, price2 = トリガーが指定された指値価格)
    trailing-stop(price = トレーリングストップオフセット)
    trailing-stop-limit(price = トレーリングストップオフセット, price2 = トリガーが指定された指値価格)
    stop-loss-and-limit(price = ストップロス価格, price2 = 指値価格)
price = price(任意、ordertypeに依存)
price2 = 2次価格(任意、ordertypeに依存)
volume = 注文出来高(ロット単位)
leverage = 希望のレバレッジ金額(任意、デフォルト = none)
position = クローズするポジションのTX ID(任意、ポジションをクローズする貯めに使用)
oflags =  注文フラグのリスト(カンマ区切り)(任意):
    viqc = 見積もり通貨でのボリューム
    plbc = ベース通貨での利益/損失を優先
     nompp = 成行価格保護なし
starttm = スケジュールされたスタート時間(任意):
    0 = 現在(デフォルト)
    + = スタート時間を現在から  秒後にスケジュール
     = スタート時間のUNIXタイムスタンプ
expiretm = 期限切れの時間(任意):
    0 = 期限切れなし(デフォルト)
    + = 現在から  秒後に期限切れ
     = 期限切れ時間のUNIXタイムスタンプ
userref = ユーザー参照ID。32ビットの符号つき数字。(任意)
validate = 入力のみを認証する。注文を送信しない(任意)

注文が約定した場合に、クローズ注文をシステムに追加するオプション:
    close[ordertype] = 注文タイプ
    close[price] = 価格
    close[price2] = 2次価格

結果:

descr = 注文説明情報
    order = 注文説明
    close = 条件付きクローズ注文の説明(条件付きクローズが設定されている場合)
txid = 注文のトランザクションIDの配列(注文が正常に追加された場合)

エラー: エラーには次のものがあります(これらに限るものではありません)。

EGeneral:Invalid arguments
EService:Unavailable
ETrade:Invalid request
EOrder:Cannot open position
EOrder:Cannot open opposing position
EOrder:Margin allowance exceeded
EOrder:Margin level too low
EOrder:Insufficient margin (exchange does not have sufficient funds to allow margin trading)
EOrder:Insufficient funds (insufficient user funds)
EOrder:Order minimum not met (volume too low)
EOrder:Orders limit exceeded
EOrder:Positions limit exceeded
EOrder:Rate limit exceeded
EOrder:Scheduled orders limit exceeded
EOrder:Unknown position

注:

  • 資産ペア価格、ロット、レバレッジの仕様については、取引可能な資産ペアを参照。
  • 価格の前には+、-、または#を付け、その価格が相対価格であるかどうかを指定できます(例外: トレーリングストップは常に相対価格となります)。+ 現在提供されている価格に金額を加算します。- 現在提供されている価格に金額を減算します。#は、使用するタイプと注文タイプに応じて、現在提供されている価格に対し、金額を加算または減算します。相対価格は%を末尾に付けて、提供されている価格のパーセントとして相対価格を指定できます。
  • ポジションは、その注文でオープンされたすべてのポジションを表す注文TX IDとなる場合があります。これが使用された場合、注文がまだ割り当てられていない、特定の注文に関連するすべてのオープンポジションは、そのポジションの残りの注文総額に対してポジションを持つことになります。例: 注文OAが、ポジションP1 @ 1ロット、P2 @ 2ロット、P3 @ 3ロットをオープンします。約定されていないP3の2ロットをクローズする注文が行われます。OAのポジションを使用して成行注文を送信すると、P1 @ 1ロットと、P2 @ 2ロットをクローズする注文が作成されます。P3にはすでにオープン注文がありますので、P3に対しては注文は行われません。しかし、P3の2ロットをクローズする注文が約定した場合で、成行注文を送信する前にその注文が完了した場合には、P3 @ 1ロットをクローズする注文も作成されます。

オープン注文のキャンセル

URL: https://api.kraken.com/0/private/CancelOrder

入力:

txid = 取引ID

結果:

count = キャンセルされた注文の数
pending = 設定すると、注文はキャンセル手続きを保留します

注: txid は注文tx idまたはユーザー参照idとなります。注文tx idの前に*を付けて、特定の注文tx id によってオープンされたポジションに関連するすべてのオープン注文をキャンセルできます。

APIクライアントの例

以下は、ユーザーが独自のAPIクライアントを記述する場合に使用できるAPIクライアントコードライブラリのサンプルです。Paywardまたは第三者のAPI作成者は、APIのバグまたは不正な使用による損失について一切の責任を負わないことをご理解ください。Paywardは、第三者のコードについては、掲載前に安全性の初回検証を行っていますが、それ以降に加えられた変更については保証できません。この件に関しましてご質問がある場合はカスタマーサポートまでご連絡ください。

C#

第三者によるコードhttps://bitbucket.org/arrivets/krakenapiを参照してください。

C++

第三者によるコードhttps://github.com/voidloop/krakenapiを参照してください。

Go

第三者によるコードhttps://github.com/Beldur/kraken-go-api-clientを参照してください。

Node.JS

第三者によるコードhttps://github.com/nothingisdead/npm-kraken-apiを参照してください。

PERL

第三者によるコードhttp://search.cpan.org/~philippe/Finance-Bank-Kraken-0.1/を参照してください。

Python 3

第三者によるコードhttps://github.com/veox/python3-krakenexを参照してください。

Python 2

第三者によるコードhttps://github.com/veox/python2-krakenexを参照してください。

PHP

クラケンのチームは、クラケンREST APIとのインタフェース用に、基本的なPHPライブラリを提供しています。ソースと使用例についてはPaywardのkraken-api-client githubレポジトリで利用できます。これらはMITがライセンスを保有しています

ライブラリ

このライブラリクラスを使用すると、PHPクライアントを使用してクラケンREST APIを呼び出します。APIメソッドの正しいURLパスを自動的に判別し、各リクエストにnonceを生成し、APIの秘密鍵と生成されたnonceを使用して署名済みのヘッダを追加します。

<?php
/**
 * Reference implementation for Kraken's REST API.
 *
 * See https://www.kraken.com/help/api for more info.
 *
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2013 Payward, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

class KrakenAPIException extends ErrorException {};

class KrakenAPI
{
    protected $key;     // API key
    protected $secret;  // API secret
    protected $url;     // API base URL
    protected $version; // API version
    protected $curl;    // curl handle

    /**
     * Constructor for KrakenAPI
     *
     * @param string $key API key
     * @param string $secret API secret
     * @param string $url base URL for Kraken API
     * @param string $version API version
     * @param bool $sslverify enable/disable SSL peer verification.disable if using beta.api.kraken.com
     */
    function __construct($key, $secret, $url='https://api.kraken.com', $version='0', $sslverify=true)
    {
        $this->key = $key;
        $this->secret = $secret;
        $this->url = $url;
        $this->version = $version;
        $this->curl = curl_init();

        curl_setopt_array($this->curl, array(
            CURLOPT_SSL_VERIFYPEER => $sslverify,
            CURLOPT_SSL_VERIFYHOST => 2,
            CURLOPT_USERAGENT => 'Kraken PHP API Agent',
            CURLOPT_POST => true,
            CURLOPT_RETURNTRANSFER => true)
        );
    }

    function __destruct()
    {
        curl_close($this->curl);
    }

    /**
     * Query public methods
     *
     * @param string $method method name
     * @param array $request request parameters
     * @return array request result on success
     * @throws KrakenAPIException
     */
    function QueryPublic($method, array $request = array())
    {
        // build the POST data string
        $postdata = http_build_query($request, '', '&');

        // make request
        curl_setopt($this->curl, CURLOPT_URL, $this->url .'/' .$this->version .'/public/' .$method);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $postdata);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER, array());
        $result = curl_exec($this->curl);
        if($result===false)
            throw new KrakenAPIException('CURL error:' . curl_error($this->curl));

        // decode results
        $result = json_decode($result, true);
        if(!is_array($result))
            throw new KrakenAPIException('JSON decode error');

        return $result;
    }

    /**
     * Query private methods
     *
     * @param string $path method path
     * @param array $request request parameters
     * @return array request result on success
     * @throws KrakenAPIException
     */
    function QueryPrivate($method, array $request = array())
    {
        if(!isset($request['nonce'])) {
            // generate a 64 bit nonce using a timestamp at microsecond resolution
            // string functions are used to avoid problems on 32 bit systems
            $nonce = explode(' ', microtime());
            $request['nonce'] = $nonce[1] . str_pad(substr($nonce[0], 2, 6), 6, '0');
        }

        // build the POST data string
        $postdata = http_build_query($request, '', '&');

        // set API key and sign the message
        $path = '/' .$this->version .'/private/' .$method;
        $sign = hash_hmac('sha512', $path . hash('sha256', $request['nonce'] .$postdata, true), base64_decode($this->secret), true);
        $headers = array(
            'API-Key:' .$this->key,
            'API-Sign:' . base64_encode($sign)
        );

        // make request
        curl_setopt($this->curl, CURLOPT_URL, $this->url .$path);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $postdata);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER, array());
        $result = curl_exec($this->curl);
        if($result===false)
            throw new KrakenAPIException('CURL error:' . curl_error($this->curl));

        // decode results
        $result = json_decode($result, true);
        if(!is_array($result))
            throw new KrakenAPIException('JSON decode error');

        return $result;
    }
}

使用例

以下は、KrakenAPIライブラリクラスの初期化に関係する手順と、APIメソッドの呼び出しを示したものです。形式化された結果セットは各APIコールスニペットの下に表示されています。

初期化

KrakenAPIオブジェクトのインスタンス化を作成する場合には、ライブラリファイルを含め、APIキーと秘密鍵を提供します。



メソッド呼び出し

アクティブな資産とプロパティの公開リストへのクエリ:

$res = $kraken->QueryPublic('Assets');
print_r($res);

返却された資産はISO-4217-A3-Xの名前で入力されます。以下は出力例です。

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [XXBT] => Array
                (
                    [aclass] => currency
                    [altname] => XBT
                    [decimals] => 10
                    [display_decimals] => 5
                )

            [XLTC] => Array
                (
                    [aclass] => currency
                    [altname] => LTC
                    [decimals] => 10
                    [display_decimals] => 5
                )

            [XXRP] => Array
                (
                    [aclass] => currency
                    [altname] => XRP
                    [decimals] => 8
                    [display_decimals] => 5
                )

            [ZEUR] => Array
                (
                    [aclass] => currency
                    [altname] => EUR
                    [decimals] => 4
                    [display_decimals] => 2
                )
            ...
)

XBT/USDペアのパブリックティッカー情報のクエリ:

$res = $kraken->QueryPublic('Ticker', array('pair' => 'XXBTZUSD'));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [XXBTZUSD] => Array
                (
                    [a] => Array
                        (
                            [0] => 106.09583
                            [1] => 111
                        )

                    [b] => Array
                        (
                            [0] => 105.53966
                            [1] => 4
                        )

                    [c] => Array
                        (
                            [0] => 105.98984
                            [1] => 0.13910102
                        )

                    ...
        )
)

2013-08-07T18:20:42+00:00以降の、最新のXBT/EURペアの取引をクエリする:

注:「since」パラメーターは将来変更になる場合があります。例えばその精度が変更になる場合があるか、またはタイムスタンプを表示しなくなる場合もあります。最善の方法は、結果セットに返却される「last」値をベースにすることです。

$res = $kraken->QueryPublic('Trades', array('pair' => 'XXBTZEUR', 'since' => '137589964200000000'));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [XXBTZEUR] => Array
                (
                    [0] => Array
                        (
                            [0] => 78.60500
                            [1] => 2.03990000
                            [2] => 1375897934.1176
                            [3] => s
                            [4] => m
                            [5] =>
                        )

                    [1] => Array
                        (
                            [0] => 79.41809
                            [1] => 2.02203000
                            [2] => 1375898123.0771
                            [3] => b
                            [4] => m
                            [5] =>
                        )

                    [2] => Array
                        (
                            [0] => 79.86999
                            [1] => 7.00000000
                            [2] => 1375898123.2587
                            [3] => b
                            [4] => m
                            [5] =>
                        )
                    ...
            )
            [last] => 137589925237491170
        )
)

プライベート資産残高のクエリ:

$res = $kraken->QueryPrivate('Balance');
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [ZUSD] => 3415.8014
            [ZEUR] => 155.5649
            [XXBT] => 149.9688412800
            [XXRP] => 499889.51600000
        )

)

プライベートオープン注文と、それに含まれる関連取引のクエリ:

$res = $kraken->QueryPrivate('OpenOrders', array('trades' => true));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [open] => Array
                (
                    [O7ICPO-F4CLJ-MVBLHC] => Array
                        (
                            [refid] =>
                            [userref] =>
                            [status] => open
                            [opentm] => 1373750306.9819
                            [starttm] => 0
                            [expiretm] => 0
                            [descr] => Array
                                (
                                    [order] => sell 3.00000000 XBTUSD @ limit 500.00000
                                )

                            [vol] => 3.00000000
                            [vol_exec] => 0.00000000
                            [cost] => 0.00000
                            [fee] => 0.00000
                            [price] => 0.00000
                            [misc] =>
                            [oflags] =>
                        )
                    ...
                )
        )
)

標準注文: 売り 1.123 XBT/USD @ 指値 $120 を追加します。

$res = $kraken->QueryPrivate('AddOrder', array(
    'pair' => 'XXBTZUSD',
    'type' => 'sell',
    'ordertype' => 'limit',
    'price' => '120',
    'volume' => '1.123'
));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [descr] => Array
                (
                    [order] => sell 1.12300000 XBTUSD @ limit 120.00000
                )

            [txid] => Array
                (
                    [0] => OAVY7T-MV5VK-KHDF5X
                )

        )

)

標準注文の追加: 買い 2013-08-12T09:27:22+0000 に成行価格で XBT 価額 €300

$res = $kraken->QueryPrivate('AddOrder', array(
    'pair' => 'XXBTZEUR',
    'type' => 'buy',
    'ordertype' => 'market',
    'oflags' => 'viqc',
    'volume' => '300',
    'starttm' => '1376299642'
));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [descr] => Array
                (
                    [order] => buy 300.00000000 XBTEUR @ market
                )

            [txid] => Array
                (
                    [0] => ONQN65-L2GNR-HWJLF5
                )

        )

)

標準注文の追加: 買い 2.12345678 XBTUSD @ 指値 $101.9901 レバレッジ 2:1、 ストップロス付き、利益確定注文: 逆指値 -5% 損失、利益確定 +$10 価格上昇(# 付記により、署名済みのストップ/ロス価格は自動的に決定されます):

$res = $kraken->QueryPrivate('AddOrder', array(
    'pair' => 'XXBTZUSD',
    'type' => 'buy',
    'ordertype' => 'limit',
    'price' => '101.9901',
    'volume' => '2.12345678',
    'leverage' => '2:1',
    'close' => array(
        'ordertype' => 'stop-loss-profit',
        'price' => '#5%',  // stop loss price (relative percentage delta)
        'price2' => '#10'  // take profit price (relative delta)
    )
));
print_r($res);

出力例:

Array
(
    [error] => Array
        (
        )

    [result] => Array
        (
            [descr] => Array
                (
                    [order] => buy 2.12345678 XBTUSD @ limit 101.99010 with 2:1 leverage
                    [close] => close position @ stop loss -5.0000%, take profit +10.00000
                )

            [txid] => Array
                (
                    [0] => OFMYYE-POAPQ-63IMWL
                )

        )

)

Private user funding

NOTE:This is a tentative funding API and may be updated in the future. Please refer to the main API page for more information on using the API.

Get deposit methods

URL: https://api.kraken.com/0/private/DepositMethods

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being deposited

Result: associative array of deposit methods:

method = name of deposit method
limit = maximum net amount that can be deposited right now, or false if no limit
fee = amount of fees that will be paid
address-setup-fee = whether or not method has an address setup fee (optional)

Get deposit addresses

URL: https://api.kraken.com/0/private/DepositAddresses

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being deposited
method = name of the deposit method
new = whether or not to generate a new address (optional.  default = false)

Result: associative array of deposit addresses:

address = deposit address
expiretm = expiration time in unix timestamp, or 0 if not expiring
new = whether or not address has ever been used

Get status of recent deposits

URL: https://api.kraken.com/0/private/DepositStatus

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being deposited
method = name of the deposit method

Result: array of array deposit status information:

method = name of the deposit method used
aclass = asset class
asset = asset X-ISO4217-A3 code
refid = reference id
txid = method transaction id
info = method transaction information
amount = amount deposited
fee = fees paid
time = unix timestamp when request was made
status = status of deposit
status-prop = additional status properties (if available)
    return = a return transaction initiated by Kraken
    onhold = deposit is on hold pending review
For information about the status, please refer to the IFEX financial transaction states.

Get withdrawal information

URL: https://api.kraken.com/0/private/WithdrawInfo

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being withdrawn
key = withdrawal key name, as set up on your account
amount = amount to withdraw

Result: associative array of withdrawal info:

method = name of the withdrawal method that will be used
limit = maximum net amount that can be withdrawn right now
fee = amount of fees that will be paid

Withdraw funds

URL: https://api.kraken.com/0/private/Withdraw

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being withdrawn
key = withdrawal key name, as set up on your account
amount = amount to withdraw, including fees

Result: associative array of withdrawal transaction:

refid = reference id

Get status of recent withdrawals

URL: https://api.kraken.com/0/private/WithdrawStatus

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being withdrawn
method = withdrawal method name (optional)

Result: array of array withdrawal status information:

method = name of the withdrawal method used
aclass = asset class
asset = asset X-ISO4217-A3 code
refid = reference id
txid = method transaction id
info = method transaction information
amount = amount withdrawn
fee = fees paid
time = unix timestamp when request was made
status = status of withdrawal
status-prop = additional status properties (if available)
    cancel-pending = cancelation requested
    canceled = canceled
    cancel-denied = cancelation requested but was denied
    return = a return transaction initiated by Kraken; it cannot be canceled
    onhold = withdrawal is on hold pending review
For information about the status, please refer to the IFEX financial transaction states.

Request withdrawal cancelation

URL: https://api.kraken.com/0/private/WithdrawCancel

Input:

aclass = asset class (optional):
    currency (default)
asset = asset being withdrawn
refid = withdrawal reference id

Result: true on success

Note: Cancelation cannot be guaranteed. This will put in a cancelation request. Depending upon how far along the withdrawal process is, it may not be possible to cancel the withdrawal.