POST /v1/responses エンドポイントを提供できます。
このエンドポイントは デフォルトで無効 になっています。利用するには、まず構成ファイルで有効にする必要があります。
- エンドポイント:
POST /v1/responses - ポート: ゲートウェイと同じポート(WebSocket と HTTP のマルチプレックス):
http://<gateway-host>:<port>/v1/responses
openclaw agent と同じパス)として処理されます。そのため、ルーティング、権限、および構成設定はゲートウェイ本体の設定に従います。
認証 (Auth)
ゲートウェイの認証設定を使用します。リクエスト時に Bearer トークンを送信してください:Authorization: Bearer <トークン>
gateway.auth.mode="token"の場合、gateway.auth.token(または環境変数OPENCLAW_GATEWAY_TOKEN) を使用します。gateway.auth.mode="password"の場合、gateway.auth.password(または環境変数OPENCLAW_GATEWAY_PASSWORD) を使用します。gateway.auth.rateLimitが構成されている場合、認証失敗が繰り返されるとエンドポイントは429(Retry-After 付き) を返します。
セキュリティ境界 (重要)
このエンドポイントは、ゲートウェイインスタンスに対する フルアクセス(オペレーター権限) を持つインターフェースとして扱ってください。- ここでの HTTP Bearer 認証は、一般ユーザー向けの制限されたスコープを持つものではありません。
- このエンドポイントで使用する有効なトークンやパスワードは、オーナー/オペレーターの認証情報と同等に扱う必要があります。
- リクエストは、信頼されたオペレーターのアクションと同じコントロールプレーンのエージェントパスを通じて実行されます。
- このエンドポイントには、非所有者や一般ユーザー向けの個別のツール制限レイヤーはありません。ゲートウェイ認証を通過した呼び出し元は、OpenClaw によってこのゲートウェイの信頼されたオペレーターとして扱われます。
- ターゲットとなるエージェントのポリシーで機密ツールが許可されている場合、このエンドポイント経由でもそれらのツールが実行可能です。
- セキュリティのため、このエンドポイントはループバック、Tailnet、またはプライベートなネットワーク内でのみ公開し、インターネット上に直接公開することは避けてください。
エージェントの選択
カスタムヘッダーは不要です。OpenResponses のmodel フィールドにエージェント ID を埋め込んでください:
model: "openclaw:<agentId>"(例:"openclaw:main","openclaw:beta")model: "agent:<agentId>"(エイリアス)
x-openclaw-agent-id: <agentId>(デフォルトはmain)
x-openclaw-session-key: <sessionKey>を指定することで、セッションルーティングを完全に制御できます。
有効化の手順
gateway.http.endpoints.responses.enabled を true に設定してください:
無効化の手順
gateway.http.endpoints.responses.enabled を false に設定してください:
セッションの挙動
デフォルトでは、エンドポイントは リクエストごとにステートレス です(呼び出しのたびに新しいセッションキーが生成されます)。 リクエストに OpenResponses のuser 文字列が含まれている場合、ゲートウェイはそこから固定のセッションキーを導出します。これにより、同じユーザー文字列を使用する繰り返しの呼び出しで、エージェントセッションを共有することが可能になります。
対応しているリクエスト形式
アイテムベースの入力を伴う OpenResponses API に従います。現在サポートされている項目は以下の通りです:input: 文字列、またはアイテムオブジェクトの配列。instructions: システムプロンプトにマージされます。tools: クライアント側のツール定義(function tools)。tool_choice: クライアントツールの使用を制限、あるいは強制します。stream: SSE によるストリーミングを有効にします。max_output_tokens: 出力トークン数の上限を指定します(プロバイダーに依存)。user: 固定のセッションルーティング用文字列。
max_tool_callsreasoningmetadatastoreprevious_response_idtruncation
アイテム (入力)
message
ロール: system, developer, user, assistant。
systemおよびdeveloperはシステムプロンプトの末尾に追加されます。- 最新の
userまたはfunction_call_outputアイテムが「現在のメッセージ」となります。 - それより前のユーザー/アシスタントのメッセージは、文脈(履歴)として含まれます。
function_call_output (ターンベースのツール)
ツールの実行結果をモデルに返します:
reasoning および item_reference
スキーマの互換性のために受け入れられますが、プロンプト構築時には無視されます。
ツール (クライアント側の関数ツール)
tools: [{ type: "function", function: { name, description?, parameters? } }] の形式でツールを提供します。
エージェントがツールの呼び出しを決定した場合、レスポンスには function_call 出力アイテムが含まれます。その後、function_call_output を含む次のリクエストを送信することでターンを継続できます。
画像 (input_image)
base64 または URL ソースをサポートしています:
image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif。
最大サイズ: 10MB。
ファイル (input_file)
base64 または URL ソースをサポートしています:
text/plain, text/markdown, text/html, text/csv, application/json, application/pdf。
最大サイズ: 5MB。
現在の挙動:
- ファイルの内容はデコードされ、ユーザーメッセージではなく システムプロンプト に追加されます。そのため、セッション履歴には保存されず一時的なものとなります。
- PDF はテキスト抽出が行われます。テキストが少ない場合は、最初の数ページが画像化(ラスタライズ)され、画像としてモデルに渡されます。
pdfjs-dist のレガシービルド(ワーカーなし)を使用しています。最新の PDF.js ビルドはブラウザのワーカーや DOM グローバル変数を必要とするため、ゲートウェイ内では使用されません。
URL 取得のデフォルト設定:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(1回のリクエストに含まれる URL ベースのinput_file+input_imageの合計数)- リクエストは安全に保護されます(DNS 解決、プライベート IP のブロック、リダイレクト制限、タイムアウト)。
- 入力タイプごとに追加のホスト名許可リストを指定可能です (
files.urlAllowlist,images.urlAllowlist)。- 完全一致:
"cdn.example.com" - ワイルドカード(サブドメインのみ):
"*.assets.example.com"(apex ドメイン自体には一致しません)
- 完全一致:
ファイルおよび画像の上限設定 (構成)
gateway.http.endpoints.responses 配下で調整可能です:
maxBodyBytes: 20MBmaxUrlParts: 8files.maxBytes: 5MBfiles.maxChars: 20万文字files.maxRedirects: 3files.timeoutMs: 10秒files.pdf.maxPages: 4files.pdf.maxPixels: 4,000,000files.pdf.minTextChars: 200images.maxBytes: 10MBimages.maxRedirects: 3images.timeoutMs: 10秒- HEIC/HEIF 形式の画像は受け入れられ、モデルプロバイダーに送られる前に自動的に JPEG に正規化されます。
- ホスト名許可リストは、最初のフェッチ時およびリダイレクトの各ホップで適用されます。
- ホスト名を許可リストに入れても、プライベート/内部 IP へのブロッキングをバイパスすることはできません。
- インターネットに公開されたゲートウェイを運用する場合は、アプリレベルの保護に加えて、OS/ネットワークレベルでの下り通信制限(Egress control)も適用してください(詳細は セキュリティ を参照)。
ストリーミング (SSE)
stream: true を設定することで、Server-Sent Events (SSE) を受信できます:
Content-Type: text/event-stream- 各イベント行の形式:
event: <タイプ>およびdata: <JSON> - ストリームの終了:
data: [DONE]
response.createdresponse.in_progressresponse.output_item.addedresponse.content_part.addedresponse.output_text.deltaresponse.output_text.doneresponse.content_part.doneresponse.output_item.doneresponse.completedresponse.failed(エラー発生時)
利用状況 (Usage)
下位のプロバイダーからトークン数が報告された場合、レスポンスのusage フィールドに値がセットされます。
エラー形式
エラーは以下の形式の JSON オブジェクトとして返されます:401: 認証情報の欠落、または無効。400: リクエストボディが不正。405: 許可されていないメソッド。