Kraken APIの使い方:取引完全ガイド

Ashley Goolam

Ashley Goolam

6 2月 2026

Kraken APIの使い方:取引完全ガイド

先物契約と現物取引を管理する、実績のあるAPIを介して、世界で最も流動性の高い暗号通貨取引所の1つにアクセスできることを想像してみてください。Krakenはまさにそれを提供し、2011年に設立され、190カ国で1,000万人以上のユーザーにサービスを提供し、200以上の取引ペアで豊富な流動性を持つ取引所に対し、WebSocketおよびRESTインターフェースを提供しています。

暗号通貨取引APIは、個人利用の利便性のために設計されたものと、機関投資家レベルの信頼性のために構築されたものの2つのカテゴリに分類されます。多くの取引所は、APIの安定性よりもモバイルアプリを優先するため、アルゴリズム戦略を制限するレート制限や、機能リリースに遅れをとるドキュメントが発生します。Krakenは、取引量に基づいたティア制APIアクセス、包括的なサンドボックス環境、高頻度トレーダー向けの専用エンドポイントを提供することで、これらの摩擦点を排除します。これにより、趣味のスクリプトから機関投資家レベルのシステムまでスケーリング可能な自動化戦略を構築できます。

目次:

💡
自動化された暗号通貨取引システムを構築するには、RESTおよびWebSocketエンドポイント全体で信頼性の高いAPIテストが必要です。Apidogは、暗号通貨取引所向けに特別に設計された視覚的なAPIテスト、自動ドキュメント生成、チームコラボレーション機能を提供します。Apidogを無料で試して、Kraken API開発を効率化しましょう。クレジットカードは不要です。
button

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:

先物APIは、現物とは異なる認証メカニズムとエンドポイント構造を使用します。現物取引の認証情報とは別に、futures.kraken.comで生成された個別のAPIキーが必要です。

WebSocket API

Krakenは、2つのWebSocketサーバーを介してリアルタイムデータストリームを提供します。

RESTポーリングとは異なり、WebSocket接続はデータが利用可能になり次第プッシュするため、レイテンシーを数百ミリ秒から数十ミリ秒に短縮します。公開サーバーは認証を必要としません。プライベートサーバーは、REST APIを介して取得したWebSocketトークンを必要とします。

レート制限

Krakenは、ティアベースのレート制限を実装しています。

制限を超過すると、HTTP 429エラーが発生し、リクエストを再開できる時期を示すRetry-Afterヘッダーが返されます。

karken crypto trading api

認証とAPIキーの設定

Krakenは、nonceベースのリプレイ保護機能を備えたHMAC-SHA512認証を使用します。これにより、マルチスレッドアプリケーションでよく発生する「Invalid nonce」エラーを回避するために、慎重な実装が必要です。

APIキーの生成

Krakenダッシュボードの「Account」→「Security」→「API」に移動します。

  1. 「Generate New Key」をクリックします。
  2. 権限を選択します。

3. IPホワイトリスト登録を指定します(本番環境では推奨)。

4. APIキーとプライベートキーを安全に保管します—Krakenはプライベートキーを二度と表示しません。

先物取引の場合は、futures.kraken.com/settings/apiでこのプロセスを繰り返します。demo-futures.kraken.comのサンドボックス環境では、個別の認証情報を使用します。

generate an api key

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」エラーを生成します。解決策:

  1. 各取引アルゴリズムまたはサービスに異なるAPIキーを使用する
  2. キーの共有が避けられない場合は、Redisまたはデータベースを介してnonce同期を実装する
  3. 衝突の可能性を減らすためにマイクロ秒精度のタイムスタンプを使用する(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処理に特定の要件がない限り、これらを使用してください。

kraken python sdk

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、一部のレガシーエンドポイントではXXBTUSDではなく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)

注文タイプには以下が含まれます。

注文管理

未決済注文をリストします。

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
Testing API endpoints with Apidog
ApidogでAPIエンドポイントをテスト

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
})

先物シンボルは異なる表記規則を使用します。

バッチ操作

先物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署名と格闘する代わりに取引ロジックに集中できます。

button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる

Kraken APIの使い方:取引完全ガイド