API OpenResponses (HTTP)
Gateway OpenClaw może udostępniać punkt końcowyPOST /v1/responses zgodny z OpenResponses.
Ten punkt końcowy jest domyślnie wyłączony. Najpierw włącz go w konfiguracji.
POST /v1/responses- Ten sam port co Gateway (multipleksowanie WS + HTTP):
http://<gateway-host>:<port>/v1/responses
openclaw agent), więc routing/uprawnienia/konfiguracja są zgodne z twoją Gateway.
Uwierzytelnianie, bezpieczeństwo i routing
Zachowanie operacyjne odpowiada OpenAI Chat Completions:- używaj pasującej ścieżki uwierzytelniania HTTP Gateway:
- uwierzytelnianie współdzielonym sekretem (
gateway.auth.mode="token"lub"password"):Authorization: Bearer <token-or-password> - uwierzytelnianie trusted-proxy (
gateway.auth.mode="trusted-proxy"): nagłówki proxy świadome tożsamości z skonfigurowanego nie-loopback źródła trusted proxy - otwarte uwierzytelnianie dla prywatnego ingressu (
gateway.auth.mode="none"): brak nagłówka auth
- uwierzytelnianie współdzielonym sekretem (
- traktuj ten punkt końcowy jako pełny dostęp operatora do instancji gateway
- dla trybów uwierzytelniania współdzielonym sekretem (
tokenipassword) ignoruj węższe wartościx-openclaw-scopeszadeklarowane w bearer i przywracaj zwykłe pełne domyślne ustawienia operatora - dla zaufanych trybów HTTP przenoszących tożsamość (na przykład uwierzytelnianie trusted proxy lub
gateway.auth.mode="none") honorujx-openclaw-scopes, jeśli nagłówek jest obecny, a w przeciwnym razie wracaj do zwykłego 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, jeśli chcesz nadpisać backendowy model wybranego agenta - użyj
x-openclaw-session-keydo jawnego routingu sesji - użyj
x-openclaw-message-channel, jeśli chcesz nie-domyślnego kontekstu syntetycznego kanału ingress
gateway.auth.mode="token"lub"password"+Authorization: Bearer ...- potwierdza posiadanie 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 w tym punkcie końcowym jako tury nadawcy-właściciela
- zaufane tryby HTTP przenoszące tożsamość (na przykład uwierzytelnianie trusted proxy lub
gateway.auth.mode="none"na prywatnym ingressie)- honorują
x-openclaw-scopes, gdy nagłówek jest obecny - wracają do zwykłego domyślnego zestawu zakresów operatora, gdy nagłówka nie ma
- tracą semantykę właściciela tylko wtedy, gdy wywołujący jawnie zawęzi zakresy i pominie
operator.admin
- honorują
gateway.http.endpoints.responses.enabled.
Ta sama powierzchnia zgodności obejmuje również:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default, pass-through embeddings i nadpisania modeli backendowych, zobacz OpenAI Chat Completions oraz Lista modeli i routing agentów.
Zachowanie sesji
Domyślnie punkt końcowy jest bezstanowy dla każdego żądania (dla każdego wywołania 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 lub tablica obiektów elementów.instructions: scalane z promptem systemowym.tools: definicje narzędzi po stronie klienta (narzędzia funkcji).tool_choice: filtrowanie lub wymaganie narzędzi klienta.stream: włącza streaming SSE.max_output_tokens: limit wyjścia według najlepszych starań (zależny od providera).user: stabilny routing sesji.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: OpenClaw ponownie używa sesji wcześniejszej odpowiedzi, gdy żądanie pozostaje w tym samym zakresie agent/użytkownik/żądana sesja.
Elementy (input)
message
Role: system, developer, user, assistant.
systemidevelopersą dopisywane 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)
Odeślij wyniki narzędzi do modelu:
reasoning i item_reference
Akceptowane dla zgodności schematu, ale ignorowane podczas budowania promptu.
Narzędzia (funkcyjne narzędzia po stronie klienta)
Podawaj narzędzia przeztools: [{ type: "function", function: { name, description?, parameters? } }].
Jeśli agent zdecyduje się wywołać narzędzie, odpowiedź zwraca element wyjściowy function_call.
Następnie wysyłasz kolejne żądanie z function_call_output, aby kontynuować turę.
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): 10 MB.
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): 5 MB.
Obecne zachowanie:
- Zawartość pliku jest dekodowana i dodawana do promptu systemowego, a nie do wiadomości użytkownika, dzięki czemu pozostaje efemeryczna (nie jest utrwalana w historii sesji).
- Zdekodowany tekst pliku jest opakowywany jako niezaufana zawartość zewnętrzna przed dodaniem, 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 linię metadanychSource: External. - Ta ścieżka wejścia plików celowo pomija długi banner
SECURITY NOTICE:, aby zachować budżet promptu; znaczniki graniczne i metadane nadal pozostają na miejscu. - Dla plików PDF najpierw parsowany jest tekst. Jeśli znajdzie się go niewiele, pierwsze strony są
rasteryzowane do obrazów i przekazywane do modelu, a wstrzyknięty blok pliku używa
placeholdera
[PDF content rendered to images].
pdfjs-dist (bez workera). Nowoczesna
kompilacja PDF.js oczekuje workerów przeglądarki/globali DOM, dlatego nie jest używana w Gateway.
Domyślne ustawienia pobierania z URL:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(łączna liczba elementówinput_file+input_imageopartych na URL w jednym żądaniu)- Żądania są chronione (rozwiązywanie DNS, blokowanie prywatnych adresów IP, limity przekierowań, limity czasu).
- Opcjonalne listy dozwolonych nazw hostów są obsługiwane dla każdego typu wejścia (
files.urlAllowlist,images.urlAllowlist).- Dokładny host:
"cdn.example.com" - Subdomeny wildcard:
"*.assets.example.com"(nie pasuje do domeny apex) - Puste lub pominięte allowlisty 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: 20 MBmaxUrlParts: 8files.maxBytes: 5 MBfiles.maxChars: 200kfiles.maxRedirects: 3files.timeoutMs: 10 sfiles.pdf.maxPages: 4files.pdf.maxPixels: 4 000 000files.pdf.minTextChars: 200images.maxBytes: 10 MBimages.maxRedirects: 3images.timeoutMs: 10 s- Źródła
input_imageHEIC/HEIF są akceptowane i normalizowane do JPEG przed dostarczeniem do providera.
- Listy dozwolonych URL są egzekwowane przed pobraniem i przy przekierowaniach.
- Dodanie nazwy hosta do allowlisty nie omija blokowania prywatnych/wewnętrznych adresów IP.
- Dla gateway wystawionych do internetu stosuj kontrolę ruchu wychodzącego sieci oprócz zabezpieczeń na poziomie aplikacji. Zobacz Security.
Streaming (SSE)
Ustawstream: true, aby odbierać Server-Sent Events (SSE):
Content-Type: text/event-stream- Każda linia zdarzenia ma postać
event: <type>idata: <json> - Strumień kończy się
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 provider raportuje liczbę tokenów.
OpenClaw normalizuje typowe aliasy w stylu OpenAI, zanim te liczniki dotrą do
powierzchni statusu/sesji downstream, w tym input_tokens / output_tokens
oraz prompt_tokens / completion_tokens.
Błędy
Błędy używają obiektu JSON w postaci:401brakujące/nieprawidłowe uwierzytelnianie400nieprawidłowe ciało żądania405nieprawidłowa metoda