API OpenResponses (HTTP)
La Gateway d’OpenClaw peut servir un point de terminaisonPOST /v1/responses compatible OpenResponses.
Ce point de terminaison est désactivé par défaut. Activez-le d’abord dans la configuration.
POST /v1/responses- Même port que Gateway (multiplexage WS + HTTP) :
http://<gateway-host>:<port>/v1/responses
openclaw agent), donc le routage/les autorisations/la configuration correspondent à votre Gateway.
Authentification, sécurité et routage
Le comportement opérationnel correspond à OpenAI Chat Completions :- utilisez le chemin d’authentification HTTP Gateway correspondant :
- authentification par secret partagé (
gateway.auth.mode="token"ou"password") :Authorization: Bearer <token-or-password> - authentification par proxy de confiance (
gateway.auth.mode="trusted-proxy") : en-têtes de proxy avec identité, provenant d’une source de proxy de confiance configurée hors loopback - authentification ouverte sur ingress privé (
gateway.auth.mode="none") : aucun en-tête d’authentification
- authentification par secret partagé (
- traitez ce point de terminaison comme un accès opérateur complet pour l’instance gateway
- pour les modes d’authentification par secret partagé (
tokenetpassword), ignorez les valeurs plus étroites déclarées dans le bearerx-openclaw-scopeset restaurez les valeurs par défaut normales de l’opérateur complet - pour les modes HTTP avec identité de confiance (par exemple l’authentification par proxy de confiance ou
gateway.auth.mode="none"), respectezx-openclaw-scopeslorsqu’il est présent et revenez sinon à l’ensemble normal de portées par défaut de l’opérateur - sélectionnez les agents avec
model: "openclaw",model: "openclaw/default",model: "openclaw/<agentId>", oux-openclaw-agent-id - utilisez
x-openclaw-modellorsque vous voulez remplacer le modèle backend de l’agent sélectionné - utilisez
x-openclaw-session-keypour un routage explicite de session - utilisez
x-openclaw-message-channellorsque vous voulez un contexte de canal d’entrée synthétique non par défaut
gateway.auth.mode="token"ou"password"+Authorization: Bearer ...- prouve la possession du secret opérateur partagé de gateway
- ignore les
x-openclaw-scopesplus étroits - restaure l’ensemble complet de portées par défaut de l’opérateur :
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - traite les tours de chat sur ce point de terminaison comme des tours d’expéditeur propriétaire
- modes HTTP avec identité de confiance (par exemple auth proxy de confiance, ou
gateway.auth.mode="none"sur ingress privé)- respectent
x-openclaw-scopeslorsque l’en-tête est présent - reviennent à l’ensemble normal de portées par défaut de l’opérateur lorsque l’en-tête est absent
- ne perdent la sémantique propriétaire que lorsque l’appelant restreint explicitement les portées et omet
operator.admin
- respectent
gateway.http.endpoints.responses.enabled.
Cette même surface de compatibilité inclut également :
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default, le pass-through des embeddings et les remplacements de modèle backend s’articulent, voir OpenAI Chat Completions et Liste de modèles et routage des agents.
Comportement de session
Par défaut, ce point de terminaison est sans état par requête (une nouvelle clé de session est générée à chaque appel). Si la requête inclut une chaîne OpenResponsesuser, Gateway en dérive une clé de session stable,
de sorte que des appels répétés puissent partager une session d’agent.
Forme de requête (prise en charge)
La requête suit l’API OpenResponses avec une entrée basée sur des items. Prise en charge actuelle :input: chaîne ou tableau d’objets item.instructions: fusionné dans le prompt système.tools: définitions d’outils côté client (outils de fonction).tool_choice: filtrer ou exiger des outils côté client.stream: active le streaming SSE.max_output_tokens: limite de sortie au mieux (selon le fournisseur).user: routage de session stable.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: OpenClaw réutilise la session de réponse précédente lorsque la requête reste dans la même portée agent/utilisateur/session demandée.
Items (entrée)
message
Rôles : system, developer, user, assistant.
systemetdevelopersont ajoutés au prompt système.- L’item
useroufunction_call_outputle plus récent devient le « message courant ». - Les messages user/assistant antérieurs sont inclus dans l’historique pour le contexte.
function_call_output (outils par tour)
Renvoyer les résultats d’outils au modèle :
reasoning et item_reference
Acceptés pour la compatibilité de schéma mais ignorés lors de la construction du prompt.
Outils (outils de fonction côté client)
Fournissez des outils avectools: [{ type: "function", function: { name, description?, parameters? } }].
Si l’agent décide d’appeler un outil, la réponse renvoie un item de sortie function_call.
Vous envoyez ensuite une requête de suivi avec function_call_output pour continuer le tour.
Images (input_image)
Prend en charge des sources base64 ou URL :
image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif.
Taille maximale (actuellement) : 10MB.
Fichiers (input_file)
Prend en charge des sources base64 ou URL :
text/plain, text/markdown, text/html, text/csv,
application/json, application/pdf.
Taille maximale (actuellement) : 5MB.
Comportement actuel :
- Le contenu du fichier est décodé et ajouté au prompt système, pas au message utilisateur, afin qu’il reste éphémère (non persistant dans l’historique de session).
- Le texte de fichier décodé est encapsulé comme contenu externe non fiable avant d’être ajouté, de sorte que les octets du fichier soient traités comme des données, pas comme des instructions fiables.
- Le bloc injecté utilise des marqueurs de frontière explicites comme
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>et inclut une ligne de métadonnéesSource: External. - Ce chemin d’entrée de fichier omet intentionnellement la longue bannière
SECURITY NOTICE:pour préserver le budget de prompt ; les marqueurs de frontière et les métadonnées restent néanmoins en place. - Les PDF sont d’abord analysés pour le texte. Si peu de texte est trouvé, les premières pages sont
rasterisées en images et transmises au modèle, et le bloc de fichier injecté utilise
l’espace réservé
[PDF content rendered to images].
pdfjs-dist compatible Node (sans worker). Le build moderne
de PDF.js attend des workers navigateur/des globals DOM, il n’est donc pas utilisé dans Gateway.
Valeurs par défaut pour la récupération d’URL :
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(nombre total de partiesinput_file+input_imagebasées sur URL par requête)- Les requêtes sont protégées (résolution DNS, blocage des IP privées, plafonds de redirection, timeouts).
- Des listes d’autorisation de noms d’hôte facultatives sont prises en charge par type d’entrée (
files.urlAllowlist,images.urlAllowlist).- Hôte exact :
"cdn.example.com" - Sous-domaines wildcard :
"*.assets.example.com"(ne correspond pas à l’apex) - Les listes d’autorisation vides ou omises signifient qu’il n’y a pas de restriction de liste d’autorisation de noms d’hôte.
- Hôte exact :
- Pour désactiver complètement les récupérations basées sur URL, définissez
files.allowUrl: falseet/ouimages.allowUrl: false.
Limites de fichiers + images (configuration)
Les valeurs par défaut peuvent être ajustées sousgateway.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- Les sources
input_imageHEIC/HEIF sont acceptées et normalisées en JPEG avant l’envoi au fournisseur.
- Les listes d’autorisation d’URL sont appliquées avant la récupération et lors des sauts de redirection.
- Autoriser un nom d’hôte ne contourne pas le blocage des IP privées/internes.
- Pour les gateways exposées à Internet, appliquez des contrôles d’egress réseau en plus des garde-fous au niveau de l’application. Voir Sécurité.
Streaming (SSE)
Définissezstream: true pour recevoir des événements Server-Sent Events (SSE) :
Content-Type: text/event-stream- Chaque ligne d’événement est
event: <type>etdata: <json> - Le flux se termine par
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(en cas d’erreur)
Usage
usage est renseigné lorsque le fournisseur sous-jacent rapporte des comptes de jetons.
OpenClaw normalise les alias courants de style OpenAI avant que ces compteurs n’atteignent
les surfaces de statut/session en aval, notamment input_tokens / output_tokens
et prompt_tokens / completion_tokens.
Erreurs
Les erreurs utilisent un objet JSON comme :401authentification manquante/invalide400corps de requête invalide405mauvaise méthode