API OpenResponses (HTTP)
Gateway OpenClaw dapat menyajikan endpointPOST /v1/responses yang kompatibel dengan OpenResponses.
Endpoint ini nonaktif secara default. Aktifkan terlebih dahulu di konfigurasi.
POST /v1/responses- Port yang sama dengan Gateway (multiplex WS + HTTP):
http://<gateway-host>:<port>/v1/responses
openclaw agent), sehingga perutean/izin/konfigurasi cocok dengan Gateway Anda.
Autentikasi, keamanan, dan perutean
Perilaku operasional cocok dengan OpenAI Chat Completions:- gunakan jalur autentikasi HTTP Gateway yang sesuai:
- autentikasi shared-secret (
gateway.auth.mode="token"atau"password"):Authorization: Bearer <token-or-password> - autentikasi trusted-proxy (
gateway.auth.mode="trusted-proxy"): header proxy yang sadar identitas dari sumber trusted proxy non-loopback yang dikonfigurasi - autentikasi terbuka private-ingress (
gateway.auth.mode="none"): tanpa header autentikasi
- autentikasi shared-secret (
- perlakukan endpoint ini sebagai akses operator penuh untuk instans gateway
- untuk mode autentikasi shared-secret (
tokendanpassword), abaikan nilaix-openclaw-scopesyang dideklarasikan bearer dan lebih sempit, lalu pulihkan default operator penuh yang normal - untuk mode HTTP terpercaya yang membawa identitas (misalnya autentikasi trusted proxy atau
gateway.auth.mode="none"), hormatix-openclaw-scopesbila ada dan jika tidak fallback ke set cakupan default operator normal - pilih agen dengan
model: "openclaw",model: "openclaw/default",model: "openclaw/<agentId>", ataux-openclaw-agent-id - gunakan
x-openclaw-modelsaat Anda ingin menimpa model backend agen yang dipilih - gunakan
x-openclaw-session-keyuntuk perutean sesi eksplisit - gunakan
x-openclaw-message-channelsaat Anda menginginkan konteks channel ingress sintetis non-default
gateway.auth.mode="token"atau"password"+Authorization: Bearer ...- membuktikan kepemilikan shared secret operator gateway
- mengabaikan
x-openclaw-scopesyang lebih sempit - memulihkan set 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 terpercaya yang membawa identitas (misalnya autentikasi trusted proxy, atau
gateway.auth.mode="none"pada private ingress)- menghormati
x-openclaw-scopessaat header ada - fallback ke set cakupan default operator normal saat header tidak ada
- hanya kehilangan semantik pemilik saat pemanggil secara eksplisit mempersempit cakupan dan menghilangkan
operator.admin
- menghormati
gateway.http.endpoints.responses.enabled.
Permukaan kompatibilitas yang sama juga mencakup:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default, pass-through embeddings, dan override model backend saling terkait, lihat OpenAI Chat Completions dan Daftar model dan perutean agen.
Perilaku sesi
Secara default endpoint ini tanpa status per request (kunci sesi baru dibuat pada setiap panggilan). Jika request menyertakan stringuser OpenResponses, Gateway menurunkan kunci sesi stabil
darinya, sehingga panggilan berulang dapat berbagi sesi agen.
Bentuk request (didukung)
Request mengikuti API OpenResponses dengan input berbasis item. Dukungan saat ini:input: string atau array objek item.instructions: digabungkan ke prompt sistem.tools: definisi alat sisi klien (alat function).tool_choice: memfilter atau mewajibkan alat sisi klien.stream: mengaktifkan streaming SSE.max_output_tokens: batas output best-effort (bergantung provider).user: perutean sesi stabil.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: OpenClaw menggunakan ulang sesi respons sebelumnya saat request tetap berada dalam cakupan agen/pengguna/sesi yang diminta yang sama.
Item (input)
message
Role: system, developer, user, assistant.
systemdandeveloperditambahkan ke prompt sistem.- Item
userataufunction_call_outputterbaru menjadi “pesan saat ini”. - Pesan user/asisten sebelumnya disertakan sebagai riwayat untuk konteks.
function_call_output (alat berbasis giliran)
Kirim hasil alat kembali ke model:
reasoning dan item_reference
Diterima untuk kompatibilitas skema tetapi diabaikan saat membangun prompt.
Alat (alat function sisi klien)
Sediakan alat dengantools: [{ type: "function", function: { name, description?, parameters? } }].
Jika agen memutuskan untuk memanggil alat, respons mengembalikan item output function_call.
Kemudian Anda mengirim request lanjutan dengan function_call_output untuk melanjutkan giliran.
Gambar (input_image)
Mendukung sumber base64 atau URL:
image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif.
Ukuran maksimum (saat ini): 10MB.
File (input_file)
Mendukung sumber base64 atau URL:
text/plain, text/markdown, text/html, text/csv,
application/json, application/pdf.
Ukuran maksimum (saat ini): 5MB.
Perilaku saat ini:
- Konten file didekode dan ditambahkan ke prompt sistem, bukan pesan pengguna, sehingga tetap bersifat sementara (tidak disimpan dalam riwayat sesi).
- Teks file yang didekode dibungkus sebagai konten eksternal tidak tepercaya sebelum ditambahkan, sehingga byte file diperlakukan sebagai data, bukan instruksi tepercaya.
- Blok yang disisipkan menggunakan penanda batas eksplisit seperti
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>dan menyertakan baris metadataSource: External. - Jalur input file ini sengaja menghilangkan banner
SECURITY NOTICE:yang panjang untuk mempertahankan anggaran prompt; penanda batas dan metadata tetap dipertahankan. - PDF diurai untuk teks terlebih dahulu. Jika sedikit teks ditemukan, halaman awal akan
dirasterisasi menjadi gambar dan diteruskan ke model, dan blok file yang disisipkan menggunakan
placeholder
[PDF content rendered to images].
pdfjs-dist yang ramah Node (tanpa worker). Build
PDF.js modern mengharapkan worker browser/global DOM, sehingga tidak digunakan di Gateway.
Default pengambilan URL:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(jumlah total bagianinput_file+input_imageberbasis URL per request)- Request dilindungi (resolusi DNS, pemblokiran IP privat, batas redirect, timeout).
- Allowlist hostname opsional didukung per tipe input (
files.urlAllowlist,images.urlAllowlist).- Host persis:
"cdn.example.com" - Subdomain wildcard:
"*.assets.example.com"(tidak cocok dengan apex) - Allowlist kosong atau tidak diberikan berarti tidak ada pembatasan allowlist hostname.
- Host persis:
- Untuk menonaktifkan sepenuhnya pengambilan berbasis URL, setel
files.allowUrl: falsedan/atauimages.allowUrl: false.
Batas file + gambar (konfigurasi)
Default dapat disetel di bawahgateway.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- Sumber
input_imageHEIC/HEIF diterima dan dinormalisasi ke JPEG sebelum dikirim ke provider.
- Allowlist URL ditegakkan sebelum pengambilan dan pada lompatan redirect.
- Mengizinkan sebuah hostname tidak melewati pemblokiran IP privat/internal.
- Untuk gateway yang terekspos ke internet, terapkan kontrol egress jaringan selain perlindungan tingkat aplikasi. Lihat Security.
Streaming (SSE)
Setelstream: true untuk menerima Server-Sent Events (SSE):
Content-Type: text/event-stream- Setiap baris event adalah
event: <type>dandata: <json> - Stream diakhiri dengan
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(saat terjadi kesalahan)
Penggunaan
usage diisi saat provider yang mendasari melaporkan jumlah token.
OpenClaw menormalkan alias umum bergaya OpenAI sebelum penghitung tersebut mencapai
permukaan status/sesi hilir, termasuk input_tokens / output_tokens
dan prompt_tokens / completion_tokens.
Error
Error menggunakan objek JSON seperti:401autentikasi hilang/tidak valid400body request tidak valid405method salah