POST /v1/responses.
Ten endpoint jest domyślnie wyłączony. Najpierw włącz go w konfiguracji.
POST /v1/responses- Ten sam port co Gateway (multipleks WS + HTTP):
http://<gateway-host>:<port>/v1/responses
openclaw agent), więc routing/uprawnienia/konfiguracja odpowiadają Twojemu Gateway.
Uwierzytelnianie, bezpieczeństwo i routing
Zachowanie operacyjne odpowiada OpenAI Chat Completions:- użyj zgodnej ścieżki uwierzytelniania HTTP Gateway:
- uwierzytelnianie współdzielonym sekretem (
gateway.auth.mode="token"lub"password"):Authorization: Bearer <token-or-password> - uwierzytelnianie zaufanym proxy (
gateway.auth.mode="trusted-proxy"): nagłówki proxy świadome tożsamości ze skonfigurowanego zaufanego źródła proxy; proxy same-host loopback wymagają jawnegogateway.auth.trustedProxy.allowLoopback = true - lokalny bezpośredni fallback zaufanego proxy: wywołujący z tego samego hosta bez nagłówków
Forwarded,X-Forwarded-*aniX-Real-IPmogą użyćgateway.auth.password/OPENCLAW_GATEWAY_PASSWORD - otwarte uwierzytelnianie private-ingress (
gateway.auth.mode="none"): brak nagłówka uwierzytelniania
- uwierzytelnianie współdzielonym sekretem (
- traktuj endpoint jako pełny dostęp operatora do instancji Gateway
- w trybach uwierzytelniania współdzielonym sekretem (
tokenipassword) ignoruj węższe wartościx-openclaw-scopesdeklarowane przez bearer i przywróć normalne domyślne wartości pełnego operatora - w zaufanych trybach HTTP przenoszących tożsamość (na przykład uwierzytelnianie zaufanym proxy lub
gateway.auth.mode="none") honorujx-openclaw-scopes, gdy jest obecne, a w przeciwnym razie wróć do normalnego domyślnego zestawu zakresów operatora - wybieraj agentów za pomocą
model: "openclaw",model: "openclaw/default",model: "openclaw/<agentId>"lubx-openclaw-agent-id - użyj
x-openclaw-model, gdy chcesz nadpisać model backendu wybranego agenta - użyj
x-openclaw-session-keydo jawnego routingu sesji - użyj
x-openclaw-message-channel, gdy chcesz użyć niedomyślnego syntetycznego kontekstu kanału wejściowego
gateway.auth.mode="token"lub"password"+Authorization: Bearer ...- dowodzi posiadania współdzielonego sekretu operatora Gateway
- ignoruje węższe
x-openclaw-scopes - przywraca pełny domyślny zestaw zakresów operatora:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - traktuje tury czatu na tym endpoincie jako tury nadawcy-właściciela
- zaufane tryby HTTP przenoszące tożsamość (na przykład uwierzytelnianie zaufanym proxy albo
gateway.auth.mode="none"na private ingress)- honorują
x-openclaw-scopes, gdy nagłówek jest obecny - wracają do normalnego domyślnego zestawu zakresów operatora, gdy nagłówka nie ma
- tracą semantykę właściciela tylko wtedy, gdy wywołujący jawnie zawęża zakresy i pomija
operator.admin
- honorują
gateway.http.endpoints.responses.enabled.
Ta sama powierzchnia zgodności obejmuje także:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default, przekazywanie embeddings i nadpisania modelu backendu pasują do siebie, znajdziesz w OpenAI Chat Completions oraz Lista modeli i routing agentów.
Zachowanie sesji
Domyślnie endpoint jest bezstanowy dla każdego żądania (przy każdym wywołaniu generowany jest nowy klucz sesji). Jeśli żądanie zawiera ciąg OpenResponsesuser, Gateway wyprowadza z niego stabilny klucz sesji,
dzięki czemu powtarzane wywołania mogą współdzielić sesję agenta.
Kształt żądania (obsługiwany)
Żądanie jest zgodne z API OpenResponses z wejściem opartym na elementach. Obecna obsługa:input: ciąg znaków albo tablica obiektów elementów.instructions: scalane z promptem systemowym.tools: definicje narzędzi klienta (narzędzia funkcyjne).tool_choice:"auto","none","required"lub{ "type": "function", "name": "..." }do filtrowania albo wymagania narzędzi klienta.stream: włącza strumieniowanie SSE.max_output_tokens: limit wyjścia best-effort (zależny od dostawcy).temperature: temperatura próbkowania best-effort przekazywana do dostawcy. Ignorowana przez backend Codex Responses oparty na ChatGPT, który używa stałego próbkowania po stronie serwera.top_p: próbkowanie jądrowe best-effort przekazywane do dostawcy. To samo zastrzeżenie dotyczące Codex Responses co przytemperature.user: stabilny routing sesji.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: OpenClaw ponownie używa wcześniejszej sesji odpowiedzi, gdy żądanie pozostaje w tym samym zakresie agenta/użytkownika/żądanej sesji.
Elementy (wejście)
message
Role: system, developer, user, assistant.
systemidevelopersą dołączane do promptu systemowego.- Najnowszy element
userlubfunction_call_outputstaje się „bieżącą wiadomością”. - Wcześniejsze wiadomości użytkownika/asystenta są dołączane jako historia dla kontekstu.
function_call_output (narzędzia oparte na turach)
Wyślij wyniki narzędzia z powrotem do modelu:
reasoning i item_reference
Akceptowane dla zgodności schematu, ale ignorowane podczas budowania promptu.
Narzędzia (narzędzia funkcyjne po stronie klienta)
Dostarcz narzędzia za pomocątools: [{ type: "function", name, description?, parameters? }].
Jeśli agent zdecyduje się wywołać narzędzie, odpowiedź zwróci element wyjściowy function_call.
Następnie wyślij żądanie kontynuacyjne z function_call_output, aby kontynuować turę.
Dla tool_choice: "required" i tool_choice przypiętego do funkcji endpoint zawęża ujawniony zestaw narzędzi funkcyjnych klienta, instruuje runtime, aby wywołał narzędzie klienta przed odpowiedzią, i odrzuca turę, jeśli nie zawiera pasującego ustrukturyzowanego wywołania narzędzia klienta. Ten kontrakt dotyczy dostarczonej przez wywołującego listy HTTP tools, a nie każdego wewnętrznego narzędzia agenta OpenClaw. Żądania niestrumieniowe zwracają 502 z api_error; żądania strumieniowe emitują zdarzenie response.failed. Odpowiada to kontraktowi /v1/chat/completions.
Obrazy (input_image)
Obsługuje źródła base64 lub URL:
image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif.
Maksymalny rozmiar (obecnie): 10MB.
Pliki (input_file)
Obsługuje źródła base64 lub URL:
text/plain, text/markdown, text/html, text/csv,
application/json, application/pdf.
Maksymalny rozmiar (obecnie): 5MB.
Obecne zachowanie:
- Zawartość pliku jest dekodowana i dodawana do promptu systemowego, a nie wiadomości użytkownika, więc pozostaje efemeryczna (nie jest utrwalana w historii sesji).
- Zdekodowany tekst pliku jest opakowywany jako niezaufana treść zewnętrzna, zanim zostanie dodany, więc bajty pliku są traktowane jako dane, a nie zaufane instrukcje.
- Wstrzyknięty blok używa jawnych znaczników granicznych, takich jak
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>, i zawiera wiersz metadanychSource: External. - Ta ścieżka wejścia plikowego celowo pomija długi baner
SECURITY NOTICE:, aby zachować budżet promptu; znaczniki graniczne i metadane nadal pozostają na miejscu. - PDF-y są najpierw parsowane pod kątem tekstu. Jeśli znaleziono mało tekstu, pierwsze strony są
rasteryzowane do obrazów i przekazywane do modelu, a wstrzyknięty blok pliku używa
placeholdera
[PDF content rendered to images].
document-extract, który używa
clawpdf i spakowanego z nim runtime PDFium WebAssembly do ekstrakcji tekstu i
renderowania stron.
Domyślne ustawienia pobierania URL:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(łączna liczba częściinput_file+input_imageopartych na URL na żądanie)- Żądania są chronione (rozwiązywanie DNS, blokowanie prywatnych adresów IP, limity przekierowań, timeouty).
- Opcjonalne listy dozwolonych nazw hostów są obsługiwane osobno dla każdego typu wejścia (
files.urlAllowlist,images.urlAllowlist).- Dokładny host:
"cdn.example.com" - Subdomeny z wieloznacznikiem:
"*.assets.example.com"(nie pasuje do apex) - Puste lub pominięte listy dozwolonych oznaczają brak ograniczenia listą dozwolonych nazw hostów.
- Dokładny host:
- Aby całkowicie wyłączyć pobieranie oparte na URL, ustaw
files.allowUrl: falsei/lubimages.allowUrl: false.
Limity plików i obrazów (konfiguracja)
Wartości domyślne można dostroić wgateway.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- Źródła HEIC/HEIF
input_imagesą akceptowane, gdy dostępny jest konwerter systemowy, i normalizowane do JPEG przed dostarczeniem do dostawcy. Obsługiwane konwertery to macOSsips, ImageMagick, GraphicsMagick lub ffmpeg.
- Listy dozwolonych URL są egzekwowane przed pobraniem i przy skokach przekierowań.
- Dodanie nazwy hosta do listy dozwolonych nie omija blokowania prywatnych/wewnętrznych adresów IP.
- W przypadku Gateway wystawionych do internetu stosuj kontrolę ruchu wychodzącego sieci oprócz zabezpieczeń na poziomie aplikacji. Zobacz Bezpieczeństwo.
Strumieniowanie (SSE)
Ustawstream: true, aby otrzymywać Server-Sent Events (SSE):
Content-Type: text/event-stream- Każdy wiersz zdarzenia ma postać
event: <type>idata: <json> - Strumień kończy się przez
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(przy błędzie)
Użycie
usage jest wypełniane, gdy bazowy dostawca zgłasza liczby tokenów.
OpenClaw normalizuje popularne aliasy w stylu OpenAI, zanim te liczniki trafią
do dalszych powierzchni statusu/sesji, w tym input_tokens / output_tokens
oraz prompt_tokens / completion_tokens.
Błędy
Błędy używają obiektu JSON takiego jak:401brakujące/nieprawidłowe uwierzytelnianie400nieprawidłowa treść żądania405niewłaściwa metoda