すべてのドキュメントを閲覧

価格ストリームリファレンス

1つのWebSocket接続で商品スポット価格とFXレートを配信し、購読対象ごとの初回価格と価格変更時の更新を送信

アクセスと制限

価格ストリームはBasicとProのプランで利用できます。 Freeプランのキーにはplan_upgrade_requiredが返され、接続が閉じられます。

価格、イベント、予測の各ストリームには共通の同時接続数の上限があり、Freeは1、Basicは2、Proは10です。各接続は月間割り当ての1回分を消費します。

接続

APIキーをAuthorization: Bearerヘッダーに設定し、wss://api.narwhalapi.com/v1/prices/streamに接続します。

ブラウザーはWebSocket接続にそのヘッダーを設定できません。サーバーからPOST /v1/prices/stream-ticketを送信し、返されたチケットを?ticket=に指定して接続します。チケットは1回だけ使用でき、30秒後に期限切れとなり、許可されたオリジンが必要です。 予測ストリームにも同じチケットの規則が適用されます。

購読

サーバーは{"type":"ready"}を送信します。5秒以内に購読メッセージを1件送信してください:

購読メッセージ
{
  "action": "subscribe",
  "commodities": [
    {
      "commodity": "XAU",
      "currency": "USD"
    }
  ],
  "fx": [
    {
      "base": "USD",
      "currencies": [
        "EUR",
        "JPY"
      ]
    }
  ]
}
  • commodities: GET /v1/commodities/spot/{commodity}/{currency}でサポートされる商品と通貨のペアを最大20件指定できます。
  • fx: 基準通貨を最大5件指定できます。currenciesは省略可能です。省略するとその基準通貨で提供されるすべての通貨を受信し、指定する場合は最大64通貨を列挙できます。

サーバーは{"type":"subscribed"}を返し、購読した各価格を1回ずつ送信します。その後は価格が変わった場合にのみ送信します。価格は約1秒ごとに確認されます。

購読内容を変更するには再接続してください。2件目の購読メッセージを送信すると、resubscribe_requiredで接続が閉じられます。

メッセージ

価格メッセージの本文はRESTエンドポイントと同じで、小数の桁数、フォールバック、古いデータを示すフラグも同じです。

メッセージ内容または送信頻度
ready接続開始時に送信されます。5秒以内に購読してください。
subscribed購読が受け付けられました。
commodityspotにはGET /v1/commodities/spot/{commodity}/{currency}のレスポンス本文が入ります。
fxrateには、GET /v1/fx/rates/{base}のratesの1項目と、baseおよびmarket_sessionが入ります。
heartbeatas_ofを含めて30秒ごとに送信されます。
pong{"action":"ping"}への応答です。
errorエラーのcodeを含み、その後接続が閉じられます。
商品価格メッセージ
{
  "type": "commodity",
  "spot": {
    "symbol": "XAU-USD",
    "price": "4195.86",
    "currency": "USD",
    "unit": "troy_ounce",
    "timestamp": "2026-10-11T06:25:00Z",
    "stale": false
  }
}
FXレートメッセージ
{
  "type": "fx",
  "base": "USD",
  "market_session": "open",
  "rate": {
    "currency": "EUR",
    "rate": "0.8924",
    "timestamp": "2026-10-09T00:00:00Z",
    "stale": false
  }
}

スポット価格リファレンス · FXレートリファレンス

接続を維持する

{"action":"ping"}を送信すると{"type":"pong"}が返されます。サーバーは30秒ごとにheartbeatも送信します。メッセージは速やかに読み取ってください。読み取りが5秒間止まったクライアントはslow_consumerで切断されます。

1接続あたり最大30フレームを送信できます。再接続すると購読した各価格が再送信されますが、受信できなかった変更は再送されません。

エラー

エラーは{"type":"error","code":"..."}として届き、その後接続が閉じられます。

コード意味
unauthorizedAPIキーまたはチケットがないか、無効です。
plan_upgrade_requiredこのストリームにはBasicまたはProプランが必要です。
stream_limitプランのストリーム同時接続数の上限に達しました。
quota_unavailable月間割り当てを使い切ったか、確認できません。
subscribe_requiredreadyメッセージから5秒以内に購読メッセージを受信しませんでした。
resubscribe_required2件目の購読メッセージが送信されました。購読内容を変更するには再接続してください。
invalid_commandメッセージは購読アクションでもpingアクションでもありません。
invalid_frameメッセージのJSONが無効か、購読の上限を超えています。
commodity_not_supported購読メッセージ内の商品は提供されていません。
currency_not_supported購読メッセージ内の通貨は提供されていません。
revokedAPIキーが取り消されたか、接続リースが失われました。
slow_consumerクライアントが5秒間メッセージを読み取りませんでした。
command_limitクライアントが1つの接続で30フレームを超えて送信しました。
unavailableストリームは一時的に利用できません。後で再接続してください。