OpenAI Chat Completions(HTTP)
OpenClawのGatewayは、小規模なOpenAI互換のChat Completionsエンドポイントを提供できます。 このエンドポイントはデフォルトで無効です。まず設定で有効化してください。POST /v1/chat/completions- Gatewayと同じポート(WS + HTTP多重化):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent と同じコードパス)ので、ルーティング、権限、設定はGatewayと一致します。
認証
Gatewayの認証設定を使用します。 一般的なHTTP認証パス:- 共有シークレット認証(
gateway.auth.mode="token"または"password"):Authorization: Bearer <token-or-password> - 信頼されたID保持HTTP認証(
gateway.auth.mode="trusted-proxy"): 設定されたID対応プロキシを経由し、必要なIDヘッダーを 挿入させます - プライベートイングレスのオープン認証(
gateway.auth.mode="none"): 認証ヘッダーは不要です
gateway.auth.mode="token"の場合は、gateway.auth.token(またはOPENCLAW_GATEWAY_TOKEN)を使用します。gateway.auth.mode="password"の場合は、gateway.auth.password(またはOPENCLAW_GATEWAY_PASSWORD)を使用します。gateway.auth.mode="trusted-proxy"の場合、HTTPリクエストは 設定済みの非loopback trusted proxyソースから来る必要があります。同一ホストのloopback proxyでは このモードを満たしません。gateway.auth.rateLimitが設定されており、認証失敗が多すぎる場合、エンドポイントはRetry-After付きで429を返します。
セキュリティ境界(重要)
このエンドポイントは、このGatewayインスタンスに対する完全なオペレーターアクセスのサーフェスとして扱ってください。- ここでのHTTP bearer認証は、狭いユーザー単位スコープモデルではありません。
- このエンドポイント用の有効なGateway token/passwordは、owner/operator認証情報として扱う必要があります。
- リクエストは、信頼されたオペレーター操作と同じコントロールプレーンagentパスを通ります。
- このエンドポイントには、別個の非owner/ユーザー単位ツール境界はありません。呼び出し元がここでGateway認証を通過した時点で、OpenClawはその呼び出し元をこのGatewayの信頼されたoperatorとして扱います。
- 共有シークレット認証モード(
tokenとpassword)では、呼び出し元がより狭いx-openclaw-scopesヘッダーを送っても、エンドポイントは通常の完全なoperatorデフォルトを復元します。 - 信頼されたID保持HTTPモード(たとえばtrusted proxy authや
gateway.auth.mode="none")では、x-openclaw-scopesが存在すればそれを尊重し、存在しない場合は通常のoperatorデフォルトスコープセットにフォールバックします。 - 対象agentポリシーが機密ツールを許可している場合、このエンドポイントはそれらを使用できます。
- このエンドポイントはloopback/tailnet/private ingressのみに保持してください。公開インターネットへ直接公開しないでください。
gateway.auth.mode="token"または"password"+Authorization: Bearer ...- 共有gateway operatorシークレットの所持を証明します
- より狭い
x-openclaw-scopesを無視します - 完全なデフォルトoperatorスコープセットを復元します:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - このエンドポイント上のチャットターンをowner-senderターンとして扱います
- 信頼されたID保持HTTPモード(たとえばtrusted proxy auth、またはprivate ingress上の
gateway.auth.mode="none")- 何らかの外側の信頼されたIDまたはデプロイ境界を認証します
- ヘッダーが存在する場合は
x-openclaw-scopesを尊重します - ヘッダーがない場合は通常のoperatorデフォルトスコープセットにフォールバックします
- 呼び出し元が明示的にスコープを狭めて
operator.adminを省略した場合にのみownerセマンティクスを失います
agent優先のモデル契約
OpenClawはOpenAIのmodel フィールドを、生のプロバイダーモデルIDではなくagentターゲットとして扱います。
model: "openclaw"は設定済みのデフォルトagentにルーティングされます。model: "openclaw/default"も設定済みのデフォルトagentにルーティングされます。model: "openclaw/<agentId>"は特定のagentにルーティングされます。
x-openclaw-model: <provider/model-or-bare-id>は、選択されたagentのバックエンドモデルを上書きします。x-openclaw-agent-id: <agentId>も互換性上の上書きとして引き続きサポートされます。x-openclaw-session-key: <sessionKey>はセッションルーティングを完全に制御します。x-openclaw-message-channel: <channel>は、チャネル認識プロンプトとポリシーのためにsynthetic ingress channelコンテキストを設定します。
model: "openclaw:<agentId>"model: "agent:<agentId>"
エンドポイントの有効化
gateway.http.endpoints.chatCompletions.enabled を true に設定します。
エンドポイントの無効化
gateway.http.endpoints.chatCompletions.enabled を false に設定します。
セッション動作
デフォルトでは、このエンドポイントはリクエストごとにステートレスです(呼び出しごとに新しいセッションキーが生成されます)。 リクエストにOpenAIのuser 文字列が含まれている場合、Gatewayはそこから安定したセッションキーを導出するため、繰り返しの呼び出しでagentセッションを共有できます。
このサーフェスが重要な理由
これは、セルフホスト型フロントエンドやツール群にとって、最も効果の高い互換性セットです。- ほとんどのOpen WebUI、LobeChat、LibreChat構成は
/v1/modelsを想定します。 - 多くのRAGシステムは
/v1/embeddingsを想定します。 - 既存のOpenAIチャットクライアントは通常、
/v1/chat/completionsから開始できます。 - よりagentネイティブなクライアントは、ますます
/v1/responsesを好むようになっています。
モデル一覧とagentルーティング
`/v1/models` は何を返しますか?
`/v1/models` は何を返しますか?
OpenClawのagentターゲット一覧です。返されるidは
openclaw、openclaw/default、および openclaw/<agentId> の各項目です。
それらをOpenAIの model 値として直接使用してください。`/v1/models` はagentを一覧表示しますか、それともsub-agentですか?
`/v1/models` はagentを一覧表示しますか、それともsub-agentですか?
一覧表示するのはトップレベルのagentターゲットであり、バックエンドのprovider modelでもsub-agentでもありません。sub-agentは内部実行トポロジーのままです。擬似モデルとしては表示されません。
なぜ `openclaw/default` が含まれているのですか?
なぜ `openclaw/default` が含まれているのですか?
openclaw/default は、設定済みデフォルトagentの安定したエイリアスです。つまり、環境ごとに実際のデフォルトagent idが変わっても、クライアントは予測可能な1つのidを使い続けられます。バックエンドモデルはどうやって上書きしますか?
バックエンドモデルはどうやって上書きしますか?
x-openclaw-model を使用してください。例:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.4これを省略した場合、選択されたagentは通常の設定済みモデル選択で実行されます。embeddingsはこの契約にどう適合しますか?
embeddingsはこの契約にどう適合しますか?
/v1/embeddings は同じagentターゲット model idを使用します。model: "openclaw/default" または model: "openclaw/<agentId>" を使用してください。
特定の埋め込みモデルが必要な場合は、それを x-openclaw-model で送信します。
このヘッダーがない場合、リクエストは選択されたagentの通常の埋め込み設定に渡されます。ストリーミング(SSE)
Server-Sent Events(SSE)を受け取るにはstream: true を設定します。
Content-Type: text/event-stream- 各イベント行は
data: <json>です - ストリームは
data: [DONE]で終了します
Open WebUI クイックセットアップ
基本的なOpen WebUI接続では次を使用します。- Base URL:
http://127.0.0.1:18789/v1 - macOS上のDocker用Base URL:
http://host.docker.internal:18789/v1 - API key: Gateway bearer token
- Model:
openclaw/default
GET /v1/modelsはopenclaw/defaultを一覧表示するはずです- Open WebUIはチャットモデルIDとして
openclaw/defaultを使用するはずです - そのagentに対して特定のバックエンドprovider/modelが必要な場合は、agentの通常のデフォルトモデルを設定するか、
x-openclaw-modelを送信してください
openclaw/default が返るなら、ほとんどのOpen WebUI構成は同じBase URLとtokenで接続できます。
例
非ストリーミング:/v1/modelsは生のprovider catalogではなく、OpenClawのagentターゲットを返します。openclaw/defaultは常に存在するため、1つの安定したidを環境をまたいで使えます。- バックエンドprovider/modelの上書きは、OpenAIの
modelフィールドではなくx-openclaw-modelに属します。 /v1/embeddingsは、文字列または文字列配列としてのinputをサポートします。