API OpenResponses (HTTP)
O Gateway do OpenClaw pode servir um endpointPOST /v1/responses compatível com OpenResponses.
Esse endpoint fica desativado por padrão. Ative-o primeiro na configuração.
POST /v1/responses- Mesma porta do Gateway (multiplexação WS + HTTP):
http://<gateway-host>:<port>/v1/responses
openclaw agent), então roteamento/permissões/configuração correspondem ao seu Gateway.
Autenticação, segurança e roteamento
O comportamento operacional corresponde a OpenAI Chat Completions:- use o caminho correspondente de autenticação HTTP do Gateway:
- autenticação por segredo compartilhado (
gateway.auth.mode="token"ou"password"):Authorization: Bearer <token-or-password> - autenticação por trusted-proxy (
gateway.auth.mode="trusted-proxy"): cabeçalhos de proxy com reconhecimento de identidade de uma origem trusted-proxy configurada fora de loopback - autenticação aberta para ingresso privado (
gateway.auth.mode="none"): sem cabeçalho de autenticação
- autenticação por segredo compartilhado (
- trate o endpoint como acesso completo de operador para a instância do gateway
- para modos de autenticação por segredo compartilhado (
tokenepassword), ignore valores mais restritos dex-openclaw-scopesdeclarados no bearer e restaure os padrões normais completos de operador - para modos HTTP confiáveis com identidade (por exemplo autenticação por trusted proxy ou
gateway.auth.mode="none"), respeitex-openclaw-scopesquando presente e, caso contrário, recorra ao conjunto padrão normal de escopos de operador - selecione agentes com
model: "openclaw",model: "openclaw/default",model: "openclaw/<agentId>"oux-openclaw-agent-id - use
x-openclaw-modelquando quiser substituir o modelo de backend do agente selecionado - use
x-openclaw-session-keypara roteamento explícito de sessão - use
x-openclaw-message-channelquando quiser um contexto de canal de entrada sintético não padrão
gateway.auth.mode="token"ou"password"+Authorization: Bearer ...- comprova posse do segredo compartilhado de operador do gateway
- ignora
x-openclaw-scopesmais restritos - restaura o conjunto completo padrão de escopos de operador:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - trata turnos de chat nesse endpoint como turnos de remetente proprietário
- modos HTTP confiáveis com identidade (por exemplo autenticação por trusted proxy ou
gateway.auth.mode="none"em ingresso privado)- respeitam
x-openclaw-scopesquando o cabeçalho está presente - recorrem ao conjunto padrão normal de escopos de operador quando o cabeçalho está ausente
- só perdem semântica de proprietário quando o chamador restringe explicitamente os escopos e omite
operator.admin
- respeitam
gateway.http.endpoints.responses.enabled.
A mesma superfície de compatibilidade também inclui:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/chat/completions
openclaw/default, passthrough de embeddings e substituições de modelo de backend se encaixam, consulte OpenAI Chat Completions e Model list and agent routing.
Comportamento de sessão
Por padrão, o endpoint é sem estado por requisição (uma nova chave de sessão é gerada a cada chamada). Se a requisição incluir uma stringuser do OpenResponses, o Gateway derivará uma chave de sessão estável
a partir dela, para que chamadas repetidas possam compartilhar uma sessão do agente.
Formato da requisição (compatível)
A requisição segue a API OpenResponses com entrada baseada em itens. Suporte atual:input: string ou array de objetos item.instructions: mesclado ao prompt de sistema.tools: definições de ferramentas do cliente (ferramentas de função).tool_choice: filtrar ou exigir ferramentas do cliente.stream: ativa streaming SSE.max_output_tokens: limite best-effort de saída (dependente do provider).user: roteamento estável de sessão.
max_tool_callsreasoningmetadatastoretruncation
previous_response_id: o OpenClaw reutiliza a sessão da resposta anterior quando a requisição permanece dentro do mesmo escopo de agente/usuário/sessão solicitada.
Itens (input)
message
Papéis: system, developer, user, assistant.
systemedevelopersão acrescentados ao prompt de sistema.- O item
useroufunction_call_outputmais recente se torna a “mensagem atual”. - Mensagens anteriores de usuário/assistente são incluídas como histórico para contexto.
function_call_output (ferramentas baseadas em turno)
Envie resultados de ferramenta de volta ao modelo:
reasoning e item_reference
Aceitos para compatibilidade de schema, mas ignorados ao construir o prompt.
Ferramentas (ferramentas de função do lado do cliente)
Forneça ferramentas comtools: [{ type: "function", function: { name, description?, parameters? } }].
Se o agente decidir chamar uma ferramenta, a resposta retornará um item de saída function_call.
Depois, você envia uma requisição de acompanhamento com function_call_output para continuar o turno.
Imagens (input_image)
Oferece suporte a fontes em base64 ou URL:
image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif.
Tamanho máximo (atual): 10MB.
Arquivos (input_file)
Oferece suporte a fontes em base64 ou URL:
text/plain, text/markdown, text/html, text/csv,
application/json, application/pdf.
Tamanho máximo (atual): 5MB.
Comportamento atual:
- O conteúdo do arquivo é decodificado e adicionado ao prompt de sistema, não à mensagem do usuário, para que permaneça efêmero (não persistido no histórico da sessão).
- O texto do arquivo decodificado é envolvido como conteúdo externo não confiável antes de ser adicionado, para que os bytes do arquivo sejam tratados como dados, não como instruções confiáveis.
- O bloco injetado usa marcadores explícitos de limite como
<<<EXTERNAL_UNTRUSTED_CONTENT id="...">>>/<<<END_EXTERNAL_UNTRUSTED_CONTENT id="...">>>e inclui uma linha de metadadosSource: External. - Esse caminho de entrada de arquivo intencionalmente omite o banner longo
SECURITY NOTICE:para preservar o orçamento de prompt; os marcadores de limite e os metadados ainda permanecem no lugar. - PDFs são primeiro analisados para texto. Se pouco texto for encontrado, as primeiras páginas são
rasterizadas em imagens e passadas ao modelo, e o bloco de arquivo injetado usa
o placeholder
[PDF content rendered to images].
pdfjs-dist compatível com Node (sem worker). A compilação moderna
do PDF.js espera workers do navegador/globais de DOM, então não é usada no Gateway.
Padrões de busca por URL:
files.allowUrl:trueimages.allowUrl:truemaxUrlParts:8(total de partesinput_file+input_imagebaseadas em URL por requisição)- As requisições são protegidas (resolução DNS, bloqueio de IP privado, limites de redirecionamento, timeouts).
- Há suporte a allowlists opcionais de hostname por tipo de entrada (
files.urlAllowlist,images.urlAllowlist).- Host exato:
"cdn.example.com" - Subdomínios coringa:
"*.assets.example.com"(não corresponde ao apex) - Allowlists vazias ou omitidas significam nenhuma restrição de allowlist de hostname.
- Host exato:
- Para desativar completamente buscas baseadas em URL, defina
files.allowUrl: falsee/ouimages.allowUrl: false.
Limites de arquivo + imagem (configuração)
Os padrões podem ser ajustados emgateway.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- Fontes
input_imageem HEIC/HEIF são aceitas e normalizadas para JPEG antes da entrega ao provider.
- Allowlists de URL são aplicadas antes da busca e nos saltos de redirecionamento.
- Permitir um hostname não ignora o bloqueio de IPs privados/internos.
- Para gateways expostos à internet, aplique controles de saída de rede além das proteções no nível da aplicação. Consulte Security.
Streaming (SSE)
Definastream: true para receber eventos Server-Sent Events (SSE):
Content-Type: text/event-stream- Cada linha de evento é
event: <type>edata: <json> - O stream termina com
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(em caso de erro)
Uso
usage é preenchido quando o provider subjacente reporta contagens de tokens.
O OpenClaw normaliza aliases comuns no estilo OpenAI antes que esses contadores cheguem
às superfícies downstream de status/sessão, incluindo input_tokens / output_tokens
e prompt_tokens / completion_tokens.
Erros
Os erros usam um objeto JSON como:401autenticação ausente/inválida400corpo de requisição inválido405método incorreto