kalshi について
Kalshi APIは、予測市場取引所Kalshiとの連携向けリファレンススキルです。公開市場データと認証が必要な取引・ポートフォリオAPIを扱い、署名、ページネーション、SDKの情報もまとめています。
主な機能
- 01市場、イベント、オーダーブックの参照
- 02認証が必要な注文・ポートフォリオへのアクセス
- 03WebSocketとREST APIのガイド
- 04RSA-PSSによるリクエスト署名
- 05公式Python・TypeScript SDKの利用
活用シーン
- 01市場データ連携の構築
- 02注文の作成と管理
- 03ポジション、約定、決済の追跡
- 04過去の市場データAPIの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ outsharp/ shipp-skills --skill kalshiインストール後、Claude Code で/kalshiを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
Kalshi API
Kalshi は、CFTC の規制を受ける予測市場取引所で、ユーザーは現実世界の出来事の結果を取引できます。
このスキルと公式ドキュメントを 頻繁に 確認してください。すべてのドキュメントを網羅した正規の機械可読インデックスは、次の場所にあります。
構築を始める前に、必ず llms.txt を参照して、利用可能なすべてのページを確認してください。エンドポイントのリファレンス、SDK ドキュメント、WebSocket チャネル、FIX プロトコルの詳細、スタートガイドについては、ここが唯一の信頼できる情報源です。
主な概念(用語集)
| 用語 | 定義 |
|---|---|
| マーケット | 単一の二者択一の結果を扱う契約(Yes/No)で、価格はセント単位(1~99¢)です。 |
| イベント | 現実世界で起こる事象(選挙、気象観測値など)を表す、関連するマーケットの集合です。 |
| シリーズ | 同じ構成とルールを共有する、繰り返し発生するイベントのテンプレートです(例:「NYC の日次最高気温」)。 |
| オーダーブック | 買い注文のみを扱います。二者択一のマーケットでは、X¢の YES 買い注文は(100−X)¢の NO 売り注文と同等です。 |
| 約定 | 自分の注文の一つにマッチした取引です。 |
| 決済 | 判定後に行われる、マーケットの最終的な結果確定(Yes または No)です。 |
| 多変量イベント | 多変量イベントコレクションから動的に作成されるコンボイベントです。 |
用語集全体:https://docs.kalshi.com/getting_started/terms.md
ベース URL
| 環境 | REST API | WebSocket |
|---|---|---|
| 本番環境 | https://api.elections.kalshi.com/trade-api/v2 | wss://api.elections.kalshi.com/trade-api/ws/v2 |
| デモ環境 | https://demo-api.kalshi.co/trade-api/v2 | wss://demo-api.kalshi.co/trade-api/ws/v2 |
注:
electionsサブドメインですが、本番 URL は経済、天気、テクノロジー、エンターテインメントなど、Kalshi のすべてのマーケットを提供します。
デモ環境の情報:https://docs.kalshi.com/getting_started/demo_env.md
ドキュメントとリファレンス
詳細な例、リクエスト/レスポンスのスキーマ、手順ガイドはすべて公式ドキュメントに記載されています。構築を始める前に、必ずこれらを参照してください。
認証
Kalshi では、Bearer トークンではなく、RSA-PSS 署名付きリクエストを使用します。認証が必要なリクエストには、次の 3 つのヘッダーが必要です。
| ヘッダー | 値 |
|---|---|
KALSHI-ACCESS-KEY | API キー ID |
KALSHI-ACCESS-TIMESTAMP | 現在の Unix タイムスタンプ(ミリ秒単位) |
KALSHI-ACCESS-SIGNATURE | {timestamp}{METHOD}{path} の RSA-PSS 署名を Base64 エンコードした値 |
重要: 署名する際は、クエリパラメーターを含まないパスを使用してください。たとえば、リクエスト URL が /trade-api/v2/portfolio/orders?limit=5 でも、/trade-api/v2/portfolio/orders に署名します。
API キーの生成
- ログイン → アカウント設定 → API キーセクションに移動します。
- 「Create New API Key」をクリックして RSA キーペアを生成します。
- 秘密鍵はすぐに保管してください。 再取得できません。
詳しいガイド:https://docs.kalshi.com/getting_started/api_keys.md
Python の署名例
import base64, datetime, requests
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
def load_private_key(file_path):
with open(file_path, "rb") as f:
return serialization.load_pem_private_key(f.read(), password=None)
def sign_pss(private_key, text: str) -> str:
sig = private_key.sign(
text.encode("utf-8"),
padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.DIGEST_LENGTH),
hashes.SHA256(),
)
return base64.b64encode(sig).decode("utf-8")
def kalshi_headers(key_id, private_key, method, path):
ts = str(int(datetime.datetime.now().timestamp() * 1000))
path_no_qs = path.split("?")[0]
sig = sign_pss(private_key, ts + method + path_no_qs)
return {
"KALSHI-ACCESS-KEY": key_id,
"KALSHI-ACCESS-SIGNATURE": sig,
"KALSHI-ACCESS-TIMESTAMP": ts,
}
JavaScript の署名例
const crypto = require("crypto");
const fs = require("fs");
function signPss(privateKeyPem, text) {
const sign = crypto.createSign("RSA-SHA256");
sign.update(text);
sign.end();
return sign.sign({
key: privateKeyPem,
padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST,
}).toString("base64");
}
function kalshiHeaders(keyId, privateKeyPem, method, path) {
const ts = Date.now().toString();
const pathNoQs = path.split("?")[0];
const sig = signPss(privateKeyPem, ts + method + pathNoQs);
return {
"KALSHI-ACCESS-KEY": keyId,
"KALSHI-ACCESS-SIGNATURE": sig,
"KALSHI-ACCESS-TIMESTAMP": ts,
};
}
SDK
Kalshi は公式 SDK を提供しています。本番環境との統合には、こちらの利用を推奨します。
| SDK | インストール | ドキュメント |
|---|---|---|
| Python(同期) | pip install kalshi_python_sync | https://docs.kalshi.com/sdks/python/quickstart.md |
| Python(非同期) | pip install kalshi_python_async | https://docs.kalshi.com/sdks/python/quickstart.md |
| TypeScript | npm install kalshi-typescript | https://docs.kalshi.com/sdks/typescript/quickstart.md |
旧
kalshi-pythonパッケージは非推奨です。kalshi_python_syncまたはkalshi_python_asyncに移行してください。
SDK の概要:https://docs.kalshi.com/sdks/overview.md
本番アプリケーションでは、OpenAPI 仕様から独自のクライアントを生成することも検討してください。
レート制限
| ティア | 読み取り | 書き込み |
|---|---|---|
| Basic | 20/s | 10/s |
| Advanced | 30/s | 30/s |
| Premier | 100/s | 100/s |
| Prime | 400/s | 400/s |
書き込みが制限されるエンドポイント:CreateOrder、CancelOrder、AmendOrder、DecreaseOrder、BatchCreateOrders、BatchCancelOrders。バッチ API では各項目が 1 トランザクションとしてカウントされます(ただし、BatchCancelOrders ではキャンセル 1 件につき 0.2 トランザクションです)。
詳しくは、https://docs.kalshi.com/getting_started/rate_limits.md をご覧ください。
ページネーション
API ではカーソルベースのページネーションを使用します。レスポンスには cursor フィールドが含まれます。次のリクエストでは、これを ?cursor={value} として渡してください。カーソルが空または null の場合、続きのページはありません。デフォルトのページサイズは 100 です(通常、最大 1000)。
詳しいガイド:https://docs.kalshi.com/getting_started/pagination.md
REST API エンドポイントの概要
以下に、ドメイン別に整理した概要を示します。リクエスト/レスポンスのスキーマ全体については、リンク先のドキュメントを参照するか、https://docs.kalshi.com/llms.txt をご覧ください。
マーケット
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/markets | GET | 不要 | フィルター(ステータス、シリーズ、タイムスタンプ)を指定してマーケットを一覧表示します。ドキュメント:マーケットの取得 |
/markets/{ticker} | GET | 不要 | ティッカーを指定して単一のマーケットを取得します。ドキュメント:マーケットの取得 |
/markets/{ticker}/orderbook | GET | 不要 | 現在のオーダーブック(Yes の買い注文+No の買い注文)を取得します。ドキュメント:マーケットのオーダーブックの取得 |
/markets/{ticker}/candlesticks | GET | 不要 | ローソク足データ(1m、1h、1d)を取得します。ドキュメント:マーケットのローソク足の取得 |
/markets/candlesticks | POST | 不要 | 最大 100 個のティッカーについて、ローソク足データを一括取得します。ドキュメント:マーケットのローソク足の一括取得 |
/markets/trades | GET | 不要 | すべての公開取引を取得します。ドキュメント:取引の取得 |
/series/{ticker} | GET | 不要 | シリーズを取得します。ドキュメント:シリーズの取得 |
/series | GET | 不要 | シリーズを一覧表示します。ドキュメント:シリーズ一覧の取得 |
イベント
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/events | GET | No | イベントを一覧表示します(多変量イベントを除く)。ドキュメント:イベントの取得 |
/events/{ticker} | GET | No | 単一のイベントを取得します。ドキュメント:イベントの取得 |
/events/{ticker}/metadata | GET | No | イベントのメタデータのみを取得します。ドキュメント:イベントメタデータの取得 |
/events/{ticker}/candlesticks | GET | No | イベントの集計ローソク足データを取得します。ドキュメント:イベントのローソク足データの取得 |
/events/{ticker}/forecast/percentile_history | GET | No | 予測パーセンタイルの履歴を取得します。ドキュメント:イベント予測パーセンタイル履歴の取得 |
/events/multivariate | GET | No | 多変量イベントを一覧表示します。ドキュメント:多変量イベントの取得 |
注文(認証必須)
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/portfolio/orders | POST | Yes | 注文を作成します。ドキュメント:注文の作成 |
/portfolio/orders | GET | Yes | 注文(未約定/キャンセル済み/約定済み)を一覧表示します。ドキュメント:注文の取得 |
/portfolio/orders/{order_id} | GET | Yes | 単一の注文を取得します。ドキュメント:注文の取得 |
/portfolio/orders/{order_id} | DELETE | Yes | 注文をキャンセルします。ドキュメント:注文のキャンセル |
/portfolio/orders/{order_id}/amend | POST | Yes | 価格/数量を変更します。ドキュメント:注文の変更 |
/portfolio/orders/{order_id}/decrease | POST | Yes | 契約数を減らします。ドキュメント:注文数量の削減 |
/portfolio/orders/{order_id}/queue_position | GET | Yes | キュー内の順位を取得します。ドキュメント:注文のキュー順位の取得 |
/portfolio/orders/queue_positions | GET | Yes | すべての未約定注文のキュー内順位を取得します。ドキュメント:注文のキュー順位一覧の取得 |
/portfolio/orders/batched | POST | Yes | 注文を一括作成します(最大20件)。ドキュメント:注文の一括作成 |
/portfolio/orders/batched | DELETE | Yes | 注文を一括キャンセルします(最大20件)。ドキュメント:注文の一括キャンセル |
ポートフォリオ(認証必須)
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/portfolio/balance | GET | Yes | 口座残高(セント)を取得します。ドキュメント:残高の取得 |
/portfolio/positions | GET | Yes | 市場ポジションを取得します。ドキュメント:ポジションの取得 |
/portfolio/fills | GET | Yes | 約定履歴を取得します。ドキュメント:約定履歴の取得 |
/portfolio/settlements | GET | Yes | 清算履歴を取得します。ドキュメント:清算履歴の取得 |
/portfolio/resting_order_value | GET | Yes | 未約定注文の合計金額(FCM)を取得します。ドキュメント:未約定注文の合計金額の取得 |
サブアカウント(認証済み)
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/portfolio/subaccounts | POST | Yes | サブアカウントを作成します(最大32件)。ドキュメント:サブアカウントの作成 |
/portfolio/subaccounts/balances | GET | Yes | すべてのサブアカウントの残高です。ドキュメント:すべてのサブアカウント残高の取得 |
/portfolio/subaccounts/transfers | GET | Yes | サブアカウントの振替履歴です。ドキュメント:サブアカウントの振替履歴の取得 |
/portfolio/subaccounts/transfer | POST | Yes | サブアカウント間で振り替えます。ドキュメント:サブアカウント間の振替 |
注文グループ(認証済み)
注文グループには、15秒間のローリング契約数制限が適用されます。制限に達すると、グループ内のすべての注文が自動的にキャンセルされます。
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/portfolio/order_groups | POST | Yes | グループを作成します。ドキュメント:注文グループの作成 |
/portfolio/order_groups | GET | Yes | グループの一覧を取得します。ドキュメント:注文グループの取得 |
/portfolio/order_groups/{id} | GET | Yes | グループを取得します。ドキュメント:注文グループの取得 |
/portfolio/order_groups/{id} | DELETE | Yes | グループを削除します。ドキュメント:注文グループの削除 |
/portfolio/order_groups/{id}/reset | POST | Yes | カウンターをリセットします。ドキュメント:注文グループのリセット |
/portfolio/order_groups/{id}/trigger | POST | Yes | 手動でトリガーします。ドキュメント:注文グループのトリガー |
/portfolio/order_groups/{id}/limit | PUT | Yes | 制限を更新します。ドキュメント:注文グループの制限の更新 |
通信/RFQ(認証済み)
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/communications/id | GET | Yes | 自分の通信 ID を取得します。ドキュメント:通信 ID の取得 |
/rfqs | POST | Yes | RFQ を作成します(未完了は最大100件)。ドキュメント:RFQ の作成 |
/rfqs | GET | Yes | RFQ の一覧を取得します。ドキュメント:RFQ の取得 |
/rfqs/{id} | GET | Yes | RFQ を取得します。ドキュメント:RFQ の取得 |
/rfqs/{id} | DELETE | Yes | RFQ を削除します。ドキュメント:RFQ の削除 |
/quotes | POST | Yes | 見積もりを作成します。ドキュメント:見積もりの作成 |
/quotes | GET | Yes | 見積もりの一覧を取得します。ドキュメント:見積もりの取得 |
/quotes/{id} | GET | Yes | 見積もりを取得します。ドキュメント:見積もりの取得 |
/quotes/{id} | DELETE | Yes | 見積もりを削除します。ドキュメント:見積もりの削除 |
/quotes/{id}/accept | POST | Yes | 見積もりを受け入れます。ドキュメント:見積もりの受け入れ |
/quotes/{id}/confirm | POST | Yes | 見積もりを確定します。ドキュメント:見積もりの確定 |
過去のデータ(認証が必要)
過去のデータは、カットオフ時刻を過ぎたアーカイブ済みの市場、注文、約定に関するものです。
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/historical/cutoff_timestamps | GET | Yes | カットオフ境界です。ドキュメント:過去のカットオフ時刻を取得 |
/historical/markets | GET | Yes | アーカイブ済みの市場です。ドキュメント:過去の市場を取得 |
/historical/markets/{ticker} | GET | Yes | 単一のアーカイブ済み市場です。ドキュメント:過去の市場を取得 |
/historical/markets/{ticker}/candlesticks | GET | Yes | アーカイブ済みのローソク足データです。ドキュメント:過去の市場のローソク足データを取得 |
/historical/fills | GET | Yes | アーカイブ済みの約定です。ドキュメント:過去の約定を取得 |
/historical/orders | GET | Yes | アーカイブ済みの注文です。ドキュメント:過去の注文を取得 |
過去のデータに関するガイド:https://docs.kalshi.com/getting_started/historical_data.md
多変量コレクション
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/multivariate/collections | GET | No | コレクションの一覧です。ドキュメント:多変量イベントコレクションを取得 |
/multivariate/collections/{ticker} | GET | No | コレクションを取得します。ドキュメント:多変量イベントコレクションを取得 |
/multivariate/collections/{ticker}/markets | POST | Yes | コレクションに市場を作成します。ドキュメント:多変量イベントコレクションに市場を作成 |
/multivariate/collections/{ticker}/lookup | GET | No | ティッカーを検索します。ドキュメント:多変量イベントコレクション内の市場のティッカーを検索 |
/multivariate/collections/{ticker}/lookup_history | GET | No | 最近の検索履歴です。ドキュメント:多変量イベントコレクションの検索履歴を取得 |
マイルストーンと構造化ターゲット
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/milestones | GET | No | マイルストーンの一覧です。ドキュメント:マイルストーンを取得 |
/milestones/{id} | GET | No | マイルストーンを取得します。ドキュメント:マイルストーンを取得 |
/structured_targets | GET | No | 構造化ターゲットの一覧です。ドキュメント:構造化ターゲットを取得 |
/structured_targets/{id} | GET | No | 構造化ターゲットを取得します。ドキュメント:構造化ターゲットを取得 |
ライブデータ
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/live_data/{milestone_id} | GET | No | マイルストーンのライブデータです。ドキュメント:ライブデータを取得 |
/live_data | GET | No | 複数のマイルストーンのライブデータです。ドキュメント:複数のライブデータを取得 |
検索と検出
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/search/sports/filters | GET | No | スポーツのフィルター。ドキュメント:Get Filters for Sports |
/search/tags | GET | No | カテゴリ別のタグ。ドキュメント:Get Tags for Series Categories |
取引所とアカウント
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/exchange/status | GET | No | 取引所のステータス。ドキュメント:Get Exchange Status |
/exchange/schedule | GET | No | 取引所のスケジュール。ドキュメント:Get Exchange Schedule |
/exchange/announcements | GET | No | お知らせ。ドキュメント:Get Exchange Announcements |
/exchange/data_timestamp | GET | Yes | データの鮮度を示すタイムスタンプ。ドキュメント:Get User Data Timestamp |
/exchange/series_fee_changes | GET | No | 手数料の変更。ドキュメント:Get Series Fee Changes |
/account/api_limits | GET | Yes | ご利用のレート制限ティア。ドキュメント:Get Account API Limits |
/account/api_keys | GET | Yes | API キーの一覧。ドキュメント:Get API Keys |
/account/api_keys | POST | Yes | API キーの作成。ドキュメント:Create API Key |
/account/api_keys/generate | POST | Yes | キーペアの生成。ドキュメント:Get API Keys |
/account/api_keys/{id} | DELETE | Yes | API キーの削除。ドキュメント:Delete API Key |
インセンティブプログラム
| エンドポイント | メソッド | 認証 | 説明 |
|---|---|---|---|
/incentives | GET | No | インセンティブの一覧。ドキュメント:Get Incentives |
WebSocket API
認証済みの WebSocket 接続を 1 つ確立すると、リアルタイムのストリーミングを利用できます。JSON コマンドを送信してチャネルを購読します。
接続
wss://api.elections.kalshi.com/trade-api/ws/v2 (production)
wss://demo-api.kalshi.co/trade-api/ws/v2 (demo)
認証ヘッダー(KALSHI-ACCESS-KEY、KALSHI-ACCESS-SIGNATURE、KALSHI-ACCESS-TIMESTAMP)は、ハンドシェイク時に含める必要があります。文字列 {timestamp}GET/trade-api/ws/v2 に署名してください。
利用可能なチャンネル
| チャンネル | 認証が必要 | 説明 | ドキュメント |
|---|---|---|---|
ticker | いいえ* | 市場価格/出来高/OI の更新 | マーケットティッカー |
trade | いいえ* | 公開取引の通知 | 公開取引 |
market_lifecycle_v2 | いいえ* | 市場/イベントの状態変更 | 市場とイベントのライフサイクル |
multivariate | いいえ* | 多変量検索の通知 | 多変量検索 |
orderbook_delta | はい | リアルタイムのオーダーブック更新 | オーダーブックの更新 |
fill | はい | 自分の約定通知 | ユーザーの約定 |
order | はい | 自分の注文の更新 | ユーザーの注文 |
market_positions | はい | 自分のポジションの更新 | 市場ポジション |
communications | はい | RFQ/見積もりの通知 | 通信 |
order_group_updates | はい | 注文グループのライフサイクル | 注文グループの更新 |
*公開チャンネルでも、接続自体には常に認証が必要です。
購読コマンド
{
"id": 1,
"cmd": "subscribe",
"params": {
"channels": ["ticker", "orderbook_delta"],
"market_tickers": ["KXHIGHNY-24JAN01-T60"]
}
}
キープアライブ
Kalshi は 10 秒ごとに、本文が heartbeat の Ping フレームを送信します。クライアントは Pong フレームで応答する必要があります。ドキュメント:接続のキープアライブ
WebSocket の完全ガイド:https://docs.kalshi.com/getting_started/quick_start_websockets.md
オーダーブックの構造
Kalshi のオーダーブックが返すのは買い注文のみです(売り注文はありません)。二値市場では、次のようになります。
- X¢の YES 買い注文 = (100−X)¢の NO 売り注文
- Y¢の NO 買い注文 = (100−Y)¢の YES 売り注文
各エントリは [価格, 数量] で、昇順に並んでいます。最良買い注文は最後の要素です。
スプレッドの計算:
- 最良 YES 売り注文 =
100 - 最良のno買い注文 - スプレッド = 最良 YES 売り注文 − 最良 YES 買い注文
完全ガイド:https://docs.kalshi.com/getting_started/orderbook_responses.md
FIX プロトコル
Kalshi は、低遅延取引向けに Financial Information eXchange(FIX)プロトコルもサポートしています。
よくあるパターン
シリーズのすべてのオープン市場を取得する
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?series_ticker=KXHIGHNY&status=open" | jq '.markets[] | {ticker, title, yes_price, volume}'
市場のオーダーブックを取得する
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets/KXHIGHNY-24JAN01-T60/orderbook" | jq '.orderbook'
すべての結果をページネーションで取得する
# First page
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?limit=100" > page1.json
# Extract cursor for next page
CURSOR=$(jq -r '.cursor' page1.json)
# Next page
curl -s "https://api.elections.kalshi.com/trade-api/v2/markets?limit=100&cursor=$CURSOR" > page2.json
使用上のヒント
- 最初に必ず
llms.txtを確認してください: https://docs.kalshi.com/llms.txt には、すべてのエンドポイントとガイドが掲載されています。 - テストにはデモ環境を使用してください。認証情報は本番環境とは別です。
- API キーをハードコードしないでください。 環境変数または安全なキー保管を使用してください。
- 価格の単位はセントです(1~99)。WebSocket のポジションチャネルにおける金額の単位はセントの百分の一です(ドルに換算するには10,000で割ります)。
- クエリパラメーターを含めずにパスに署名してください。 署名する前に、
?以降をすべて削除してください。 - ページネーションを処理してください。
cursorが null でないことを必ず確認し、すべてのデータを取得するまでループしてください。 - レート制限を守ってください。 429 レスポンスに対して指数バックオフを実装してください。
- REST と WebSocket を組み合わせると、最も正確な状態を把握できます。 初期スナップショットには REST を、リアルタイムの差分には WebSocket を使用してください。
- オーダーブックに含まれるのは買い注文のみです。 100−価格の補数から売り注文を算出してください。
- 過去データとライブデータ: カットオフタイムスタンプを確認し、ライブエンドポイントと履歴エンドポイントのどちらに問い合わせるかを判断してください。
- 市場ステータスの値には、
unopened、open、closed、settledを使用してください。 - 一括操作は、項目ごとに毎秒の書き込み制限にカウントされます。
エラー処理
標準的な HTTP エラーコードが適用されます。API は、説明的なメッセージを含む JSON エラーボディを返します。429(レート制限)および 5xx(サーバーエラー)に対して、バックオフ付きの再試行を実装してください。
WebSocket エラーコード
| コード | 意味 |
|---|---|
| 1 | メッセージを処理できません |
| 2 | パラメーターが必要です |
| 3 | チャネルが必要です |
| 5 | 不明なコマンドです |
| 8 | 不明なチャネル名です |
| 9 | 認証が必要です |
| 14 | 市場ティッカーが必要です |
| 16 | 市場が見つかりません |
| 17 | 内部エラーです |
| 18 | コマンドがタイムアウトしました |
エラーコードの一覧:https://docs.kalshi.com/getting_started/quick_start_websockets.md
プロジェクト例:Alph Bot
Alph Bot は、Kalshi API と、リアルタイムのスポーツデータを提供する Shipp、確率推定を行う Claude AI を連携させた、本番環境品質の統合を実証するオープンソースの自動取引ボットです。
Alph Bot による Kalshi の利用方法
- 市場の検出 — ライブのスポーツ試合に関連する Kalshi のイベント契約(例:NBA の点差、合計得点)を検索します。
- オーダーブックの読み取り — オーダーブックのデータを取得し、現在の市場が示唆する確率を特定します(セント単位の価格は、そのまま確率の%に対応します)。
- 優位性の検出 — Kalshi の市場価格と、Claude と Shipp のリアルタイム試合データを活用して AI が推定した確率を比較します。
- 注文の執行 — 十分な優位性が見つかった場合、ケリー基準を用いてポジションサイズを決定し、指値注文を行います。
- リスク管理 — サーキットブレーカー(1日の最大損失)、ポジションサイズの上限、単一市場へのエクスポージャー上限、最低口座残高のしきい値を適用します。
Alph Bot の Kalshi 設定
.env.example より:
ALPH_BOT_KALSHI_API_KEY_ID=abc123
ALPH_BOT_KALSHI_PRIVATE_KEY_PATH=./keys/kalshi-private.pem
# Strategy
ALPH_BOT_MIN_EDGE_PCT=5
ALPH_BOT_MIN_CONFIDENCE=medium
ALPH_BOT_KELLY_FRACTION=0.25
# Risk controls
ALPH_BOT_MAX_TOTAL_EXPOSURE_USD=10000
ALPH_BOT_MAX_POSITION_SIZE_USD=1000
ALPH_BOT_MAX_SINGLE_MARKET_PERCENT=20
ALPH_BOT_MAX_DAILY_LOSS_USD=500
ALPH_BOT_MAX_DAILY_TRADES=50
ALPH_BOT_MIN_ACCOUNT_BALANCE_USD=100
試してみる
git clone https://gitlab.com/outsharp/shipp/alph-bot.git
cd alph-bot
cp .env.example .env
# Add your Kalshi, Shipp, and Anthropic API keys
yarn migrate
# Find a game to trade on
./index.ts available-games --sport NBA
# Run value betting in demo mode (uses Kalshi demo environment)
./index.ts value-bet -d --game <GAME_ID>
# Run in paper mode (no real orders executed)
./index.ts value-bet --paper --game <GAME_ID>
警告: デモ/ペーパーモード以外で Kalshi を利用して取引すると、実際のお金が関わります。必ずデモ口座から始めてください。
設定手順の詳細は、Alph Bot の READMEをご覧ください。
バージョン管理
現在の API バージョンは、/trade-api/v2 配下の v2 です。更新情報はAPI 変更履歴でご確認ください。SDK のバージョンはOpenAPI 仕様に準拠しており、通常は毎週公開されます。