API リファレンス

リアルタイム

WS/v1/realtime

テキストと音声を 1 本の持続的な接続でやり取りする必要がある場合は、Realtime エンドポイントを使います。HTTP API と同じ API キー、キーのスコープ、モデル権限、レート制限で保護されています。

#サーバーから接続する

信頼できるサーバープロセスから WebSocket を開き、ハンドシェイク時に API キーを Authorization: Bearer で送信してください。有効期限の長い API キーをブラウザの JavaScript に置かないでください:ブラウザはこのヘッダーを安全に付与できず、配布されたキーは誰でも抜き出せます。

server.ts
import WebSocket from "ws";

const socket = new WebSocket("wss://YOUR_DOMAIN/v1/realtime", {
  headers: { Authorization: "Bearer sk-YOUR_KEY" },
});

socket.on("open", () => {
  // Send standard Realtime session and conversation events here.
});

socket.on("message", (event) => {
  // Forward text / audio deltas to your client.
});

#セッションとイベントの流れ

接続後、選択したモデルの標準的な Realtime のセッションイベントと会話イベントを送信します。サーバーイベントは自前の短命なチャネルを通じてブラウザに転送してください。これにより、プラットフォームのキーと上流の WebSocket を自分の管理下に置けます。

1

接続

認証済みのサーバー側ソケットを 1 本開きます。

2

設定

セッション設定と会話の入力を送信します。

3

中継

差分をクライアントに転送し、完了したらセッションを閉じます。

#再接続は意図的に

WebSocket はステートフルです。接続が閉じたら新しいセッションを作成し、意図的に保持していたアプリケーションの状態だけをリプレイしてください。401、403、402、429 はアカウントやキーについて対処が必要なシグナルとして扱い、一時的なネットワーク障害や 5xx は回数に上限を設けたバックオフで再試行してください。

リアルタイム音声が不要なら HTTP から始める

通常のテキストのストリーミングなら、/v1/chat/completions のほうがデプロイが簡単で、Server-Sent Events を使います。持続的な低レイテンシーのセッションがプロダクト体験の一部になったら Realtime に移行してください。

まだ解決しませんか?

リクエスト ID かエラーメッセージを送っていただければ、こちらで調査します。