先物契約と現物取引を管理する、実績のあるAPIを介して、世界で最も流動性の高い暗号通貨取引所の1つにアクセスできることを想像してみてください。Krakenはまさにそれを提供し、2011年に設立され、190カ国で1,000万人以上のユーザーにサービスを提供し、200以上の取引ペアで豊富な流動性を持つ取引所に対し、WebSocketおよびRESTインターフェースを提供しています。
暗号通貨取引APIは、個人利用の利便性のために設計されたものと、機関投資家レベルの信頼性のために構築されたものの2つのカテゴリに分類されます。多くの取引所は、APIの安定性よりもモバイルアプリを優先するため、アルゴリズム戦略を制限するレート制限や、機能リリースに遅れをとるドキュメントが発生します。Krakenは、取引量に基づいたティア制APIアクセス、包括的なサンドボックス環境、高頻度トレーダー向けの専用エンドポイントを提供することで、これらの摩擦点を排除します。これにより、趣味のスクリプトから機関投資家レベルのシステムまでスケーリング可能な自動化戦略を構築できます。
目次:
- KrakenのAPIアーキテクチャの理解
- 認証とAPIキーの設定
- REST APIによる現物取引
- WebSocketによるリアルタイムデータ
- 先物取引と高度な機能
- 結論
KrakenのAPIアーキテクチャの理解
Krakenは、現物REST、先物REST、WebSocketという3つの異なるAPIエコシステムを運用しています。これらのアーキテクチャを理解することで、適切な統合パスを選択できます。
現物REST API
現物REST APIは、Krakenの主要な取引所機能へのアクセスを提供します。公開エンドポイント(市場データ、ティッカー情報、オーダーブック深度)とプライベートエンドポイント(口座残高、注文管理、資金調達)に分かれています。すべてのリクエストはTLS 1.2以上を使用するHTTPSで行われます。
ベースURL: https://api.kraken.com/0
公開エンドポイントは認証を必要としません。プライベートエンドポイントは、APIキーによるHMAC-SHA512リクエスト署名を使用します。応答形式は異なり、一部のエンドポイントは最初のエラー文字列が配列で返され(レガシー設計)、新しいエンドポイントは標準のJSONオブジェクトを使用します。
先物REST API
Kraken Futuresは、現物取引所とは独立して独自のAPIインフラストラクチャで運営されています。最大50倍のレバレッジで暗号通貨の無期限スワップと固定満期先物をサポートしています。
ベースURL:
- 本番環境:
https://futures.kraken.com/api/v3 - サンドボックス:
https://demo-futures.kraken.com/api/v3
先物APIは、現物とは異なる認証メカニズムとエンドポイント構造を使用します。現物取引の認証情報とは別に、futures.kraken.comで生成された個別のAPIキーが必要です。
WebSocket API
Krakenは、2つのWebSocketサーバーを介してリアルタイムデータストリームを提供します。
- 公開:
wss://ws.kraken.com— 市場データ、オーダーブック、取引 - プライベート:
wss://ws-auth.kraken.com— 口座更新、注文状況、残高変更
RESTポーリングとは異なり、WebSocket接続はデータが利用可能になり次第プッシュするため、レイテンシーを数百ミリ秒から数十ミリ秒に短縮します。公開サーバーは認証を必要としません。プライベートサーバーは、REST APIを介して取得したWebSocketトークンを必要とします。
レート制限
Krakenは、ティアベースのレート制限を実装しています。
- Starter: 1分あたり60回 (公開), 1分あたり30回 (プライベート)
- Intermediate: 1分あたり125回 (公開), 1分あたり60回 (プライベート)
- Pro: 30日間の取引量に基づいて1分あたり250回以上
制限を超過すると、HTTP 429エラーが発生し、リクエストを再開できる時期を示すRetry-Afterヘッダーが返されます。

認証とAPIキーの設定
Krakenは、nonceベースのリプレイ保護機能を備えたHMAC-SHA512認証を使用します。これにより、マルチスレッドアプリケーションでよく発生する「Invalid nonce」エラーを回避するために、慎重な実装が必要です。
APIキーの生成
Krakenダッシュボードの「Account」→「Security」→「API」に移動します。
- 「Generate New Key」をクリックします。
- 権限を選択します。
- Query: 口座残高、未決済注文、取引履歴の読み取り
- Trade: 注文の発注とキャンセル
- Withdraw: 資金の移動(慎重に使用してください)
- Deposit: 入金アドレスと方法の表示
3. IPホワイトリスト登録を指定します(本番環境では推奨)。
4. APIキーとプライベートキーを安全に保管します—Krakenはプライベートキーを二度と表示しません。
先物取引の場合は、futures.kraken.com/settings/apiでこのプロセスを繰り返します。demo-futures.kraken.comのサンドボックス環境では、個別の認証情報を使用します。

HMAC-SHA512署名(手動実装)
SDKを使用しない場合、認証は次のように実装します。
import requests
import hmac
import hashlib
import base64
import time
import json
class KrakenAuth:
def __init__(self, api_key, api_secret):
self.api_key = api_key
self.api_secret = base64.b64decode(api_secret)
self.base_url = "https://api.kraken.com"
def generate_signature(self, urlpath, data):
# Nonce must be higher than any previous nonce used
nonce = str(int(time.time() * 1000))
data['nonce'] = nonce
# Create message: nonce + POST data
message = nonce + json.dumps(data, separators=(',', ':'))
# Create HMAC-SHA512 signature
signature = hmac.new(
self.api_secret,
urlpath.encode() + hashlib.sha256(message.encode()).digest(),
hashlib.sha512
).hexdigest()
return {
'API-Key': self.api_key,
'API-Sign': signature,
'Content-Type': 'application/x-www-form-urlencoded'
}, data
def private_request(self, method, params=None):
urlpath = f'/0/private/{method}'
data = params or {}
headers, signed_data = self.generate_signature(urlpath, data)
response = requests.post(
f"{self.base_url}{urlpath}",
headers=headers,
data=signed_data
)
return response.json()
# Usage
kraken = KrakenAuth(
api_key="YOUR_API_KEY",
api_secret="YOUR_BASE64_ENCODED_PRIVATE_KEY"
)
# Get account balance
balance = kraken.private_request('Balance')
print(balance)
重要: Nonce管理
Krakenは、APIキーごとに厳密に増加するnonceを必要とします。同じキーを使用する複数のスレッドまたはプロセスがある場合、それらは競合し、「EAPI:Invalid nonce」エラーを生成します。解決策:
- 各取引アルゴリズムまたはサービスに異なるAPIキーを使用する
- キーの共有が避けられない場合は、Redisまたはデータベースを介してnonce同期を実装する
- 衝突の可能性を減らすためにマイクロ秒精度のタイムスタンプを使用する(Unix時間を1000倍する)
公式SDK
Krakenは、公式PythonおよびNode.js SDKを提供しており、Go、Rust、Julia、その他の言語用のコミュニティSDKもあります。
# Python
pip install python-kraken-sdk
# Node.js
npm install @kraken-api/sdk
公式SDKは、認証、nonce管理、エラー解析を自動的に処理します。カスタムHTTP処理に特定の要件がない限り、これらを使用してください。

REST APIによる現物取引
現物REST APIは、十分に文書化されたエンドポイントを介して包括的な取引機能を提供します。
市場データ(公開)
利用可能な取引ペアを取得します。
curl "https://api.kraken.com/0/public/AssetPairs"
ティッカー情報を取得します。
curl "https://api.kraken.com/0/public/Ticker?pair=XBTUSD"
Krakenは、ビットコインにはBTCではなくXBT、一部のレガシーエンドポイントではXXBT、USDではなくZUSDという非標準のペアシンボルを使用します。取引する前に、AssetPairsエンドポイントを使用して常にアセットコードを確認してください。
オーダーブックの深度を取得します。
curl "https://api.kraken.com/0/public/Depth?pair=XBTUSD&count=10"
口座残高(プライベート)
balance = kraken.private_request('Balance')
print(balance)
応答形式は、アセットコードをキーとして使用します(USDの場合はZUSD、ビットコインの場合はXXBT)。
{
"error": [],
"result": {
"ZUSD": "1000.50",
"XXBT": "0.2500"
}
}
注文の発注
指値買い注文を発注します。
order = kraken.private_request('AddOrder', {
'pair': 'XBTUSD',
'type': 'buy',
'ordertype': 'limit',
'price': '65000.00',
'volume': '0.01',
'oflags': 'post' # Post-only flag
})
print(order)
注文タイプには以下が含まれます。
market: 最良の利用可能な価格で即時約定limit: 指定された価格またはそれ以上の価格で約定stop-loss: 価格がしきい値を超えたときに成行注文を発動take-profit: ストップロスとは逆trailing-stop: 価格の動きに追随する動的ストップ
注文管理
未決済注文をリストします。
open_orders = kraken.private_request('OpenOrders')
print(open_orders)
注文をキャンセルします。
kraken.private_request('CancelOrder', {
'txid': 'XXXXXX-XXXXXX-XXXXXX'
})
すべての注文をキャンセルします(緊急停止)。
kraken.private_request('CancelAll')
取引履歴
約定済み取引を照会します。
trades = kraken.private_request('TradesHistory', {
'start': '1704067200', # Unix timestamp
'end': '1706659200'
})
ProTipApidog

WebSocketによるリアルタイムデータ
RESTポーリングは、アルゴリズム取引にとって許容できないレイテンシーを引き起こします。KrakenのWebSocket APIは、リアルタイムのオーダーブック更新、取引、口座イベントをストリーミングします。
公開WebSocketへの接続
const WebSocket = require('ws');
const ws = new WebSocket('wss://ws.kraken.com');
ws.on('open', () => {
console.log('Connected to Kraken public WebSocket');
// Subscribe to ticker for BTC/USD
ws.send(JSON.stringify({
event: 'subscribe',
pair: ['XBT/USD'],
subscription: {
name: 'ticker'
}
}));
});
ws.on('message', (data) => {
const message = JSON.parse(data);
// Ticker format: [channelID, tickerData, pair, channelName]
if (Array.isArray(message) && message[2] === 'XBT/USD') {
const [channelID, ticker, pair, channelName] = message;
console.log(`BTC Price: Bid ${ticker.b[0]}, Ask ${ticker.a[0]}`);
}
});
// Heartbeat every 30 seconds
setInterval(() => {
ws.send(JSON.stringify({ event: 'ping' }));
}, 30000);
WebSocketのサブスクリプションは、数値チャネルIDを含む配列形式でデータを返します。これらのIDをサブスクリプションにマッピングして、データを正しくルーティングします。
オーダーブックのストリーミング
レベル2オーダーブックデータにサブスクライブします。
ws.send(JSON.stringify({
event: 'subscribe',
pair: ['XBT/USD'],
subscription: {
name: 'book',
depth: 25 // 25, 100, 500, or 1000 levels
}
}));
ブックフィードはスナップショットを送信し、その後にインクリメンタルな更新を送信します。デルタを適用してローカルのオーダーブック状態を維持します。
let orderBook = { asks: {}, bids: {} };
ws.on('message', (data) => {
const message = JSON.parse(data);
if (message[1] === 'as' || message[1] === 'bs') {
// Snapshot: initialize order book
const [channelID, type, asks, bids] = message;
orderBook.asks = Object.fromEntries(asks.map(([price, volume]) => [price, volume]));
orderBook.bids = Object.fromEntries(bids.map(([price, volume]) => [price, volume]));
} else if (message[1] === 'a' || message[1] === 'b') {
// Update: apply delta
const [channelID, type, delta] = message;
const side = type === 'a' ? 'asks' : 'bids';
delta.forEach(([price, volume]) => {
if (volume === '0.00000000') {
delete orderBook[side][price];
} else {
orderBook[side][price] = volume;
}
});
}
});
プライベートWebSocket認証
RESTを介してWebSocketトークンを取得します。
token_response = kraken.private_request('GetWebSocketsToken')
token = token_response['result']['token']
プライベートWebSocketに接続します。
const privateWs = new WebSocket('wss://ws-auth.kraken.com');
privateWs.on('open', () => {
// Authenticate
privateWs.send(JSON.stringify({
event: 'subscribe',
subscription: {
name: 'ownTrades',
token: 'YOUR_WEBSOCKET_TOKEN'
}
}));
});
privateWs.on('message', (data) => {
const message = JSON.parse(data);
if (message[1] === 'ownTrades') {
console.log('Your trade executed:', message[0]);
}
});
プライベートWebSocketトークンは15分で期限切れになります。本番システムには、自動トークン更新および再接続ロジックを実装してください。
先物取引と高度な機能
Kraken Futuresは、高度な注文タイプとポートフォリオ証拠金を含むデリバティブ取引のための独立したインフラストラクチャを提供します。
先物認証
先物は、現物のHMACとは異なるベアラートークン認証を使用します。
import requests
import hmac
import hashlib
import base64
import json
class KrakenFuturesAuth:
def __init__(self, api_key, api_secret):
self.api_key = api_key
self.api_secret = api_secret
self.base_url = "https://futures.kraken.com/api/v3"
def generate_signature(self, endpoint, method, body=None):
nonce = str(int(time.time() * 1000))
message = endpoint + method + nonce
if body:
message += json.dumps(body, separators=(',', ':'))
signature = base64.b64encode(
hmac.new(
base64.b64decode(self.api_secret),
message.encode(),
hashlib.sha256
).digest()
).decode()
return {
'APIKey': self.api_key,
'Nonce': nonce,
'Authent': signature,
'Content-Type': 'application/json'
}
def request(self, endpoint, method='GET', body=None):
url = f"{self.base_url}{endpoint}"
headers = self.generate_signature(endpoint, method, body)
if method == 'GET':
response = requests.get(url, headers=headers)
else:
response = requests.post(url, headers=headers, json=body)
return response.json()
# Usage
futures = KrakenFuturesAuth('FUTURES_API_KEY', 'FUTURES_SECRET')
先物注文の発注
ビットコイン無期限先物に指値注文を発注します。
order = futures.request('/sendorder', 'POST', {
'orderType': 'lmt',
'side': 'buy',
'size': 1,
'limitPrice': 65000,
'symbol': 'PI_XBTUSD' # Perpetual Inverse BTC/USD
})
先物シンボルは異なる表記規則を使用します。
PI_XBTUSD: 無期限逆方向ビットコイン/USDPF_ETHUSD: 無期限線形イーサリアム/USDFI_XBTUSD_250228: 2025年2月28日満期の固定満期先物
バッチ操作
先物APIはバッチ注文の送信をサポートしています。
batch = futures.request('/batchorder', 'POST', {
'batchOrder': [
{
'order': 'send',
'order_tag': '1',
'orderType': 'lmt',
'symbol': 'PI_XBTUSD',
'side': 'buy',
'size': 1,
'limitPrice': 64000
},
{
'order': 'send',
'order_tag': '2',
'orderType': 'lmt',
'symbol': 'PI_XBTUSD',
'side': 'sell',
'size': 1,
'limitPrice': 66000
}
]
})
高度な注文機能
- トレーリングストップ: 価格の動きに合わせてストップ価格を調整
- テイクプロフィット/ストップロス: リスク管理のためのブラケット注文
- ポストオンリー: 注文が流動性を提供することを確認(メイカー手数料)
- 減額のみ: ポジションが増加するのを防ぐ
デッドマンズスイッチ
接続が失われた場合、すべての注文をキャンセルします。
# Set 60-second timeout
kraken.private_request('CancelAllOrdersAfter', {
'timeout': 60
})
これはサーバー側のタイマーを作成します。60秒以内にハートビートを送信しない場合、Krakenはすべての未決済注文を自動的にキャンセルします。
結論
KrakenのAPIは、REST、WebSocket、および専用の先物インターフェースを通じて、機関投資家レベルの暗号通貨市場へのアクセスを提供します。HMAC-SHA512署名で認証し、nonceシーケンスを慎重に管理し、現物取引からレバレッジをかけた先物までスケーリングします。ティア制のレート制限は、カジュアルなポートフォリオのリバランスから高頻度マーケットメイキングまで、さまざまな戦略に対応します。
認証と注文の発注をテストするには、サンドボックス環境から始めてください。nonceの競合を避けるために、各取引戦略に個別のAPIキーを使用してください。リアルタイムデータにはWebSocket接続を実装し、リスク管理にはデッドマンズスイッチを実装してください。レート制限ヘッダーを監視し、429エラーには指数関数的バックオフを実装してください。
Krakenエンドポイントのテスト、認証署名のデバッグ、複数のAPI統合の管理など、暗号通貨取引アプリケーションを構築する際には、Apidogで開発ワークフローを効率化してください。視覚的なAPIテスト、自動ドキュメント生成、チームコラボレーションを処理するため、HMAC署名と格闘する代わりに取引ロジックに集中できます。
