OpenResponses API(HTTP)
OpenClawのGatewayは、OpenResponses互換のPOST /v1/responses エンドポイントを提供できます。
このエンドポイントはデフォルトで無効です。まず設定で有効にしてください。
POST /v1/responses- Gatewayと同じポート(WS + HTTP多重化):
http://<gateway-host>:<port>/v1/responses
openclaw agent と同じコードパス)。そのため、ルーティング/権限/設定はGatewayと一致します。
認証、セキュリティ、ルーティング
運用上の挙動は OpenAI Chat Completions と一致します。- 一致するGateway HTTP認証パスを使用します:
- shared-secret認証(
gateway.auth.mode="token"または"password"):Authorization: Bearer <token-or-password> - trusted-proxy認証(
gateway.auth.mode="trusted-proxy"): 設定済みの非loopback trusted proxyソースからのidentity-aware proxyヘッダー - private-ingress open auth(
gateway.auth.mode="none"): 認証ヘッダーなし
- shared-secret認証(
- このエンドポイントを、そのgatewayインスタンスに対する完全なoperatorアクセスとして扱います
- shared-secret認証モード(
tokenとpassword)では、より狭いbearer宣言のx-openclaw-scopes値を無視し、通常の完全なoperatorデフォルトに戻します - trusted identity-bearing HTTPモード(たとえばtrusted proxy認証や
gateway.auth.mode="none")では、x-openclaw-scopesが存在する場合はそれを尊重し、存在しない場合は通常のoperatorデフォルトのスコープセットにフォールバックします model: "openclaw"、model: "openclaw/default"、model: "openclaw/<agentId>"、またはx-openclaw-agent-idでagentを選択します- 選択されたagentのバックエンドモデルを上書きしたい場合は
x-openclaw-modelを使用します - 明示的なセッションルーティングには
x-openclaw-session-keyを使用します - デフォルト以外のsynthetic ingress channelコンテキストが必要な場合は
x-openclaw-message-channelを使用します
gateway.auth.mode="token"または"password"+Authorization: Bearer ...- 共有gateway operator secretの所持を証明します
- より狭い
x-openclaw-scopesを無視します - 完全なデフォルトoperatorスコープセットを復元します:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - このエンドポイント上のチャットターンをowner-senderターンとして扱います
- trusted identity-bearing HTTPモード(たとえばtrusted proxy認証、またはprivate ingress上の
gateway.auth.mode="none")- ヘッダーが存在する場合は
x-openclaw-scopesを尊重します - ヘッダーが存在しない場合は通常のoperatorデフォルトスコープセットにフォールバックします
- 呼び出し元が明示的にスコープを狭め、かつ
operator.adminを省略した場合にのみownerセマンティクスを失います
- ヘッダーが存在する場合は
gateway.http.endpoints.responses.enabled で有効または無効にできます。
同じ互換サーフェスには、次も含まれます。
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default、embeddingsパススルー、バックエンドモデル上書きがどのように組み合わさるかについての正式な説明は、
OpenAI Chat Completions と Model list and agent routing を参照してください。
セッションの挙動
デフォルトでは、このエンドポイントはリクエストごとにステートレスです(呼び出しごとに新しいセッションキーが生成されます)。 リクエストにOpenResponsesのuser 文字列が含まれている場合、Gatewayは
それから安定したセッションキーを導出するため、繰り返し呼び出しでagentセッションを共有できます。
リクエスト形式(サポート対象)
リクエストは、アイテムベース入力のOpenResponses APIに従います。現在のサポート内容:input: 文字列またはアイテムオブジェクトの配列。instructions: システムプロンプトにマージされます。tools: クライアントツール定義(function tools)。tool_choice: クライアントツールを絞り込む、または必須化します。stream: SSEストリーミングを有効にします。max_output_tokens: ベストエフォートの出力上限(プロバイダー依存)。user: 安定したセッションルーティング。
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: リクエストが同じagent/user/要求されたセッションスコープ内にとどまる場合、OpenClawは以前のresponseセッションを再利用します。
アイテム(入力)
message
ロール: system, developer, user, assistant。
systemとdeveloperはシステムプロンプトに追加されます。- 最新の
userまたはfunction_call_outputアイテムが「現在のメッセージ」になります。 - それ以前のuser/assistantメッセージは、コンテキスト用の履歴として含まれます。
function_call_output(ターンベースツール)
ツール結果をモデルに送り返します:
reasoning と item_reference
スキーマ互換性のために受け付けますが、プロンプト構築時には無視されます。
ツール(クライアント側function tools)
tools: [{ type: "function", function: { name, description?, parameters? } }] でツールを指定します。
agentがツール呼び出しを行うと判断した場合、レスポンスは 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。
現在の挙動:
- ファイル内容はデコードされてシステムプロンプトに追加され、ユーザーメッセージには追加されません。 そのため、一時的なものとして扱われます(セッション履歴には保存されません)。
- デコードされたファイルテキストは、追加前に信頼されていない外部コンテンツとしてラップされるため、 ファイル内容は信頼された命令ではなくデータとして扱われます。
- 注入されるブロックは、
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>のような明示的な境界マーカーを使い、Source: Externalメタデータ行を含みます。 - このファイル入力パスでは、プロンプト予算を維持するために長い
SECURITY NOTICE:バナーを意図的に省略しています。 それでも境界マーカーとメタデータは維持されます。 - PDFはまずテキストとして解析されます。ほとんどテキストが見つからない場合、
最初のページ群が画像へラスタライズされてモデルに渡され、注入されるファイルブロックでは
[PDF content rendered to images]というプレースホルダーが使われます。
pdfjs-dist legacy build(workerなし)を使用します。
モダンなPDF.js buildはブラウザーworker/DOMグローバルを前提とするため、Gatewayでは使いません。
URLフェッチのデフォルト:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(1リクエストあたりのURLベースinput_file+input_imageパート合計)- リクエストは保護されます(DNS解決、private IPブロック、リダイレクト上限、タイムアウト)。
- オプションで、入力タイプごとのhostname allowlistをサポートします(
files.urlAllowlist,images.urlAllowlist)。- 完全一致ホスト:
"cdn.example.com" - ワイルドカードサブドメイン:
"*.assets.example.com"(apexには一致しません) - allowlistが空、または省略された場合は、hostname allowlist制限はありません。
- 完全一致ホスト:
- URLベースのフェッチを完全に無効にするには、
files.allowUrl: falseおよび/またはimages.allowUrl: falseを設定してください。
ファイル + 画像の上限(設定)
デフォルトはgateway.http.endpoints.responses 配下で調整できます:
maxBodyBytes: 20MBmaxUrlParts: 8files.maxBytes: 5MBfiles.maxChars: 200kfiles.maxRedirects: 3files.timeoutMs: 10sfiles.pdf.maxPages: 4files.pdf.maxPixels: 4,000,000files.pdf.minTextChars: 200images.maxBytes: 10MBimages.maxRedirects: 3images.timeoutMs: 10s- HEIC/HEIF の
input_imageソースは受け付けられ、プロバイダーへの送信前にJPEGへ正規化されます。
- URL allowlistは、フェッチ前とリダイレクト先の各ホップで強制されます。
- hostnameをallowlistに追加しても、private/internal IPブロックは回避されません。
- インターネット公開されたgatewayでは、アプリレベルの保護に加えてネットワークegress制御も適用してください。 Security を参照してください。
ストリーミング(SSE)
stream: true を設定すると、Server-Sent Events(SSE)を受け取れます:
Content-Type: text/event-stream- 各イベント行は
event: <type>と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 が設定されます。
OpenClawは、これらのカウンターが下流のstatus/sessionサーフェスに到達する前に、
一般的なOpenAI形式のエイリアスを正規化します。これには input_tokens / output_tokens
および prompt_tokens / completion_tokens が含まれます。
エラー
エラーは次のようなJSONオブジェクトを使用します:401認証なし/認証不正400リクエストボディ不正405メソッド不正