Marketオブジェクト
GET /v2/markets と GET /v2/pairs/{market_id} が返す正規のmarketオブジェクト、およびリアルタイムストリームのエンベロープについて。
APIはREST とストリームの両方で、1つの正規marketオブジェクトを提供します。GET /v2/markets はその一覧を返し、GET /v2/pairs/{market_id} は完全な詳細ブロック付きで1件を返します。従来の軽量tick形状はもう別に存在しません。同じオブジェクトがアイデンティティ・価格・解決のすべてを運び、価格ブロックと解決ブロックは、リクエストで要求された場合にのみ値が入ります。
GET /v2/markets: カタログで、マッチング済みゲームごとに1行です。フィルターなしの場合、価格はnullです。signal=arbは、ライブスナップショットから価格付けされ、確定アービトラージに絞り込まれた同じ行を返します。GET /v2/pairs/{market_id}: idで指定した1件のmarketを、デフォルトでinclude=ids,depth,settlementを適用して返します。venueのハンドル、確信度、outcomeごとの板の厚み(デプス)詳細、解決の開示を含みます。
marketオブジェクト
{
"id": "dino_8f3a1c92-47e8-4c3f-b9d2-f1a8e6c4d5f2",
"slug": null,
"sport": "baseball",
"league": "MLB",
"title": "Nyy vs Bos",
"home": null,
"away": null,
"start_time": "2026-07-01T23:05:00+00:00",
"status": "open",
"match": "high_confidence",
"signal": "arb",
"spread_pts": 2.0,
"potential_arb_pct": 1.83,
"coverage": { "kalshi": true, "polymarket": true },
"outcomes": [
{ "key": "NYY", "name": "NYY", "kalshi": 0.52, "polymarket": 0.54, "cheaper": "kalshi" },
{ "key": "BOS", "name": "BOS", "kalshi": 0.50, "polymarket": 0.46, "cheaper": "polymarket" }
],
"result": null,
"updated_at": "2026-07-01T22:55:00+00:00",
"priced_at": "2026-07-01T22:55:00+00:00",
"links": { "kalshi": "https://kalshi.com/markets/KXMLBGAME-26JUL01NYYBOS", "polymarket": null }
}
オブジェクトのフィールド
| フィールド | 型 | 意味 |
|---|---|---|
id | string | 安定した正規id、dino_<uuid>。GET /v2/pairs/{market_id} の呼び出しに使います。 |
slug | string|null | クリーンな識別子。まだ実装されておらず、現在は常に null です。 |
sport | string | 大分類のスポーツキー。 |
league | string|null | スポーツ内の大会(例: MLB)。venueのシリーズが名前を持たない場合は null。 |
title | string|null | マッチング済みチーム識別子から組み立てられたベストエフォート型のタイトル。 |
home / away | string|null | まだ実装されておらず、現在は常に null です。 |
start_time | string|null | ISO-8601形式のUTCキックオフ時刻。 |
status | string | open、live、closed、settled のいずれか。Statusを参照してください。 |
match | string | マッチ確信度のラベル。提供される行では現在常に high_confidence です。 |
signal | string | "arb" または "spread"。Signalを参照してください。 |
spread_pts | number|null | パーセンテージポイントでの、outcomeごとの最大venue間ギャップ。すべてのoutcomeが両venueで価格付けされていない限り null。 |
potential_arb_pct | number|null | venue手数料を差し引く前の、ask同士のグロスリターン。signal が "arb" のときのみ値が入ります。priced_at 時点のスナップショットの観測値です。 |
coverage | object | { kalshi, polymarket }。それぞれ、そのvenueですべてのoutcomeに価格が付いている場合のみ true。 |
outcomes | array | outcomeごとの価格情報。Outcomesを参照してください。行が価格付けされていない場合は空。 |
result | object|null | 解決の判定結果。status が settled になって初めて値が入ります。 |
updated_at | string|null | マッチングエンジンがこのペアのアイデンティティと解決条件を最後に再分析した時刻。 |
priced_at | string|null | 鮮度を示すシグナルです。RESTでは現在 updated_at と同じ値です。行ごとに個別のライブ価格タイムスタンプはまだ保存されていないため、「最後の価格ティック」ではなく「このペアへの最終書き込み」として扱ってください。WebSocketの markets:* ストリームでは、両方のフレーム種別(market と price)が実際の取得時刻を運びます。updated_at 自体がない行の場合のみ null になります。 |
links | object | { kalshi, polymarket } のvenue URL。polymarket は、安定したリンク形式が利用可能になるまで null です。 |
Outcomes
outcomes の各要素は、1つのmarket outcome(例: 1チーム)を、両venueでの価格とともに表します。
| フィールド | 型 | 意味 |
|---|---|---|
key / name | string | outcomeのラベル(例: チーム名)。 |
kalshi | number|null | Kalshi上のask価格(0から1)。利用できない場合は null。欠落を 0 で表すことはありません。 |
polymarket | number|null | Polymarket上のask価格(0から1)。利用できない場合は null。 |
cheaper | string|null | そのoutcomeでaskがより安いvenue、"kalshi" または "polymarket"。どちらか一方でも価格が付いていない場合は null。 |
include=depth を付けると、各outcomeに kalshi_book と polymarket_book も付与されます。これらは ask、depth、venueのティッカーまたはトークンidを持つ並列オブジェクトで、スカラーの kalshi / polymarket 価格フィールドを置き換えるものではありません。
Status
| 値 | 意味 |
|---|---|
open | アクティブにマッチング・追跡されています(社内的には active と review 待ちの両方のペアを含みます)。 |
live | 進行中の試合用に予約されています。まだ提供されておらず、今のところ live を返す行はありません。 |
closed | 解決の判定結果なしで取り消されました。 |
settled | 解決の判定結果ありで取り消されました。result に値が入ります。 |
open ステータスの行だけが、spread 以外の signal を持ちえます。open でない行は、どんな価格が付いていても常に signal を spread に、potential_arb_pct を null に強制します。
Signal
signal は、マッチングエンジンがそのmarketについて見出した解決上の関係を表すラベルで、リクエストのたびに現在の行と価格から再計算されます。キャッシュされたラベルが信頼されることは決してありません。
| 値 | 意味 |
|---|---|
"arb" | 獲得済み。以下すべてを満たします: statusがopenで確認が2件以上、解決パリティ確認済み、そのペアの完全な内部リスクセットに high または critical の重大度リスクがない、すべてのoutcomeが両venueで価格付き。potential_arb_pct に値が入ります。 |
"spread" | 確定アービトラージ以外のすべて。解決リスクが開示された正しくマッチ済みの試合、価格が付いていないカタログ行、レビュー待ちのcandidateなどを含みます。spread 行を少しでも取引可能とみなす前に、settlement.risks(include=settlement または /v2/pairs/{market_id} 経由)を確認してください。 |
提供される settlement.risks には、キャンセル(cancel_*)イベントが決して含まれません。これらはサーバー側でフィルターされますが、signalのゲート判定自体は完全な内部セットに対して評価されます。arb 行であっても、通常の解決パリティを損なわない範囲で、キャンセル以外のリスクエントリを持つことがあります。つまり arb は risks[] が空であることを意味しません。行動する前は常に解決ブロックを確認してください。
これらのスコアがどのように生成されるか(マッチングのスイープ、曖昧一致の上限、自動昇格ゲートを含む)は、マッチングと確信度で解説しています。
WebSocket上での扱い
marketオブジェクトは、markets:* チャンネル上をフラットなフレームとして流れます: market フレーム(状態変化時の、完全な正規オブジェクト)と price フレーム(価格変動時の、outcomeの key をキーにしたコンパクトな差分)です。両方のフレーム種別はWebSocketストリームページで解説しています。
RESTからのブートストラップ
GET /v2/markets にはストリームのオフセット・フィールドがありません。v2に as_of_offset は存在しません。まず完全な状態から始めて、その後ライブに追従するには、/v2/markets?signal=arb を読んで現在開いているアービトラージを取得し、その後WebSocketストリームに接続してください。接続後に届くメッセージは、その時点から欠落なく届きます。v2にはスナップショットとオフセットの接合はないため、RESTの読み取りとストリームの接続は2つの独立したビューとして扱ってください。WebSocketストリームページでは、接続方法と切断後の復旧方法を解説しています。