Gateway OpenClaw dapat menyajikan endpoint Chat Completions kecil yang kompatibel dengan OpenAI. Endpoint ini dinonaktifkan secara default. Aktifkan terlebih dahulu di konfigurasi.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
POST /v1/chat/completions- Port yang sama dengan Gateway (multipleks WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent), sehingga routing/izin/konfigurasi cocok dengan Gateway Anda.
Autentikasi
Menggunakan konfigurasi autentikasi Gateway. Jalur autentikasi HTTP umum:- autentikasi rahasia bersama (
gateway.auth.mode="token"atau"password"):Authorization: Bearer <token-or-password> - autentikasi HTTP pembawa identitas tepercaya (
gateway.auth.mode="trusted-proxy"): rutekan melalui proxy sadar-identitas yang dikonfigurasi dan biarkan ia menyisipkan header identitas yang diperlukan - autentikasi terbuka ingress privat (
gateway.auth.mode="none"): tidak memerlukan header autentikasi
- Saat
gateway.auth.mode="token", gunakangateway.auth.token(atauOPENCLAW_GATEWAY_TOKEN). - Saat
gateway.auth.mode="password", gunakangateway.auth.password(atauOPENCLAW_GATEWAY_PASSWORD). - Saat
gateway.auth.mode="trusted-proxy", permintaan HTTP harus berasal dari sumber proxy tepercaya yang dikonfigurasi; proxy loopback host yang sama memerlukangateway.auth.trustedProxy.allowLoopback = truesecara eksplisit. - Jika
gateway.auth.rateLimitdikonfigurasi dan terjadi terlalu banyak kegagalan autentikasi, endpoint mengembalikan429denganRetry-After.
Batas keamanan (penting)
Perlakukan endpoint ini sebagai permukaan akses operator penuh untuk instance gateway.- Autentikasi bearer HTTP di sini bukan model cakupan per pengguna yang sempit.
- Token/kata sandi Gateway yang valid untuk endpoint ini harus diperlakukan seperti kredensial pemilik/operator.
- Permintaan berjalan melalui jalur agen control-plane yang sama seperti tindakan operator tepercaya.
- Tidak ada batas alat non-pemilik/per pengguna terpisah pada endpoint ini; begitu pemanggil lolos autentikasi Gateway di sini, OpenClaw memperlakukan pemanggil tersebut sebagai operator tepercaya untuk gateway ini.
- Untuk mode autentikasi rahasia bersama (
tokendanpassword), endpoint memulihkan default operator penuh normal meskipun pemanggil mengirim headerx-openclaw-scopesyang lebih sempit. - Mode HTTP pembawa identitas tepercaya (misalnya autentikasi proxy tepercaya atau
gateway.auth.mode="none") menghormatix-openclaw-scopessaat ada dan jika tidak ada kembali ke kumpulan cakupan default operator normal. - Jika kebijakan agen target mengizinkan alat sensitif, endpoint ini dapat menggunakannya.
- Pertahankan endpoint ini hanya pada loopback/tailnet/ingress privat; jangan mengeksposnya langsung ke internet publik.
gateway.auth.mode="token"atau"password"+Authorization: Bearer ...- membuktikan kepemilikan rahasia operator gateway bersama
- mengabaikan
x-openclaw-scopesyang lebih sempit - memulihkan kumpulan cakupan operator default penuh:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - memperlakukan giliran chat pada endpoint ini sebagai giliran pengirim-pemilik
- mode HTTP pembawa identitas tepercaya (misalnya autentikasi proxy tepercaya, atau
gateway.auth.mode="none"pada ingress privat)- mengautentikasi sebagian identitas tepercaya luar atau batas deployment
- menghormati
x-openclaw-scopessaat header ada - kembali ke kumpulan cakupan default operator normal saat header tidak ada
- hanya kehilangan semantik pemilik saat pemanggil secara eksplisit mempersempit cakupan dan menghilangkan
operator.admin
Kontrak model yang mengutamakan agen
OpenClaw memperlakukan kolommodel OpenAI sebagai target agen, bukan id model provider mentah.
model: "openclaw"merutekan ke agen default yang dikonfigurasi.model: "openclaw/default"juga merutekan ke agen default yang dikonfigurasi.model: "openclaw/<agentId>"merutekan ke agen tertentu.
x-openclaw-model: <provider/model-or-bare-id>menimpa model backend untuk agen yang dipilih.x-openclaw-agent-id: <agentId>tetap didukung sebagai penimpaan kompatibilitas.x-openclaw-session-key: <sessionKey>sepenuhnya mengontrol routing sesi.x-openclaw-message-channel: <channel>menetapkan konteks kanal ingress sintetis untuk prompt dan kebijakan yang sadar kanal.
model: "openclaw:<agentId>"model: "agent:<agentId>"
Mengaktifkan endpoint
Aturgateway.http.endpoints.chatCompletions.enabled ke true:
Menonaktifkan endpoint
Aturgateway.http.endpoints.chatCompletions.enabled ke false:
Perilaku sesi
Secara default endpoint ini stateless per permintaan (kunci sesi baru dibuat pada setiap panggilan). Jika permintaan menyertakan stringuser OpenAI, Gateway menurunkan kunci sesi stabil darinya, sehingga panggilan berulang dapat berbagi satu sesi agen.
Mengapa permukaan ini penting
Ini adalah kumpulan kompatibilitas dengan leverage tertinggi untuk frontend dan tooling yang di-host sendiri:- Sebagian besar setup Open WebUI, LobeChat, dan LibreChat mengharapkan
/v1/models. - Banyak sistem RAG mengharapkan
/v1/embeddings. - Klien chat OpenAI yang sudah ada biasanya dapat memulai dengan
/v1/chat/completions. - Klien yang lebih agent-native makin sering memilih
/v1/responses.
Daftar model dan routing agen
What does `/v1/models` return?
What does `/v1/models` return?
Daftar target agen OpenClaw.Id yang dikembalikan adalah entri
openclaw, openclaw/default, dan openclaw/<agentId>.
Gunakan langsung sebagai nilai model OpenAI.Does `/v1/models` list agents or sub-agents?
Does `/v1/models` list agents or sub-agents?
Ini mencantumkan target agen tingkat atas, bukan model provider backend dan bukan sub-agen.Sub-agen tetap menjadi topologi eksekusi internal. Mereka tidak muncul sebagai pseudo-model.
Why is `openclaw/default` included?
Why is `openclaw/default` included?
openclaw/default adalah alias stabil untuk agen default yang dikonfigurasi.Artinya klien dapat terus menggunakan satu id yang dapat diprediksi meskipun id agen default sebenarnya berubah antar lingkungan.How do I override the backend model?
How do I override the backend model?
Gunakan
x-openclaw-model.Contoh:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.5Jika Anda menghilangkannya, agen yang dipilih berjalan dengan pilihan model normal yang dikonfigurasi.How do embeddings fit this contract?
How do embeddings fit this contract?
/v1/embeddings menggunakan id model target-agen yang sama.Gunakan model: "openclaw/default" atau model: "openclaw/<agentId>".
Saat Anda memerlukan model embedding tertentu, kirimkan di x-openclaw-model.
Tanpa header itu, permintaan diteruskan ke setup embedding normal agen yang dipilih.Streaming (SSE)
Aturstream: true untuk menerima Server-Sent Events (SSE):
Content-Type: text/event-stream- Setiap baris event adalah
data: <json> - Stream berakhir dengan
data: [DONE]
Kontrak alat chat
/v1/chat/completions mendukung subset alat fungsi yang kompatibel dengan klien OpenAI Chat umum.
Kolom permintaan yang didukung
tools: array dari{ "type": "function", "function": { ... } }tool_choice:"auto","none"- giliran lanjutan
messages[*].role: "tool" messages[*].tool_call_iduntuk mengikat hasil alat kembali ke panggilan alat sebelumnyamax_completion_tokens: angka; batas per panggilan untuk total token completion (termasuk token reasoning). Nama kolom OpenAI Chat Completions saat ini; diprioritaskan saatmax_completion_tokensdanmax_tokenssama-sama dikirim.max_tokens: angka; alias lama yang diterima untuk kompatibilitas ke belakang. Diabaikan saatmax_completion_tokensjuga ada.
max_completion_tokens untuk endpoint keluarga OpenAI, dan max_tokens untuk provider yang hanya menerima nama lama (seperti Mistral dan Chutes).
Varian yang tidak didukung
Endpoint mengembalikan400 invalid_request_error untuk varian alat yang tidak didukung, termasuk:
toolsnon-array- entri alat non-fungsi
tool.function.nameyang hilang- varian
tool_choicesepertiallowed_toolsdancustom tool_choice: "required"(belum ditegakkan saat runtime; akan didukung setelah penegakan keras diimplementasikan)tool_choice: { "type": "function", "function": { "name": "..." } }(alasan yang sama sepertirequired)- nilai
tool_choice.function.nameyang tidak cocok dengantoolsyang disediakan
Bentuk respons alat non-streaming
Saat agen memutuskan untuk memanggil alat, respons menggunakan:choices[0].finish_reason = "tool_calls"- entri
choices[0].message.tool_calls[]dengan:idtype: "function"function.namefunction.arguments(string JSON)
choices[0].message.content (mungkin kosong).
Bentuk respons alat streaming
Saatstream: true, panggilan alat dipancarkan sebagai potongan SSE inkremental:
- delta peran asisten awal
- delta komentar asisten opsional
- satu atau beberapa potongan
delta.tool_callsyang membawa identitas alat dan fragmen argumen - potongan akhir dengan
finish_reason: "tool_calls" data: [DONE]
stream_options.include_usage=true, potongan usage penutup dipancarkan sebelum [DONE].
Loop tindak lanjut alat
Setelah menerimatool_calls, klien harus menjalankan fungsi yang diminta dan mengirim permintaan lanjutan yang menyertakan:
- pesan panggilan alat asisten sebelumnya
- satu atau beberapa pesan
role: "tool"dengantool_call_idyang cocok
Setup cepat Open WebUI
Untuk koneksi Open WebUI dasar:- Base URL:
http://127.0.0.1:18789/v1 - Base URL Docker di macOS:
http://host.docker.internal:18789/v1 - API key: token bearer Gateway Anda
- Model:
openclaw/default
GET /v1/modelsharus mencantumkanopenclaw/default- Open WebUI harus menggunakan
openclaw/defaultsebagai id model chat - Jika Anda menginginkan provider/model backend tertentu untuk agen tersebut, atur model default normal agen atau kirim
x-openclaw-model
openclaw/default, sebagian besar setup Open WebUI dapat terhubung dengan Base URL dan token yang sama.
Contoh
Non-streaming:/v1/modelsmengembalikan target agen OpenClaw, bukan katalog penyedia mentah.openclaw/defaultselalu tersedia sehingga satu id stabil dapat digunakan di berbagai lingkungan.- Override penyedia/model backend harus berada di
x-openclaw-model, bukan di kolommodelOpenAI. /v1/embeddingsmendukunginputsebagai string atau array string.