OpenAI Chat Completions (HTTP)
O Gateway do OpenClaw pode servir um pequeno endpoint Chat Completions compatível com OpenAI. Esse endpoint fica desabilitado por padrão. Habilite-o primeiro na configuração.POST /v1/chat/completions- Mesma porta do Gateway (multiplexação WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent), então roteamento/permissões/configuração correspondem ao seu Gateway.
Autenticação
Usa a configuração de autenticação do Gateway. Caminhos comuns de autenticação HTTP:- autenticação por segredo compartilhado (
gateway.auth.mode="token"ou"password"):Authorization: Bearer <token-or-password> - autenticação HTTP confiável com identidade (
gateway.auth.mode="trusted-proxy"): roteie pela proxy com reconhecimento de identidade configurada e deixe que ela injete os cabeçalhos de identidade necessários - autenticação aberta com entrada privada (
gateway.auth.mode="none"): nenhum cabeçalho de autenticação é necessário
- Quando
gateway.auth.mode="token", usegateway.auth.token(ouOPENCLAW_GATEWAY_TOKEN). - Quando
gateway.auth.mode="password", usegateway.auth.password(ouOPENCLAW_GATEWAY_PASSWORD). - Quando
gateway.auth.mode="trusted-proxy", a solicitação HTTP deve vir de uma origem confiável configurada que não seja loopback; proxies loopback no mesmo host não satisfazem esse modo. - Se
gateway.auth.rateLimitestiver configurado e ocorrerem muitas falhas de autenticação, o endpoint retornará429comRetry-After.
Limite de segurança (importante)
Trate este endpoint como uma superfície de acesso total de operador para a instância do gateway.- A autenticação HTTP bearer aqui não é um modelo restrito de escopo por usuário.
- Um token/senha do Gateway válido para esse endpoint deve ser tratado como uma credencial de proprietário/operador.
- As solicitações passam pelo mesmo caminho de agente do plano de controle que ações confiáveis do operador.
- Não há neste endpoint um limite separado de ferramentas não proprietárias/por usuário; quando um chamador passa pela autenticação do Gateway aqui, o OpenClaw trata esse chamador como um operador confiável desse gateway.
- Para modos de autenticação por segredo compartilhado (
tokenepassword), o endpoint restaura os padrões normais completos de operador mesmo se o chamador enviar um cabeçalhox-openclaw-scopesmais restrito. - Modos HTTP confiáveis com identidade (por exemplo autenticação por trusted proxy ou
gateway.auth.mode="none") respeitamx-openclaw-scopesquando presente e, caso contrário, recorrem ao conjunto normal de escopos padrão de operador. - Se a política do agente de destino permitir ferramentas sensíveis, este endpoint poderá usá-las.
- Mantenha esse endpoint apenas em loopback/tailnet/entrada privada; não o exponha diretamente à internet pública.
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 neste 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 entrada privada)- autenticam alguma identidade externa confiável ou limite de implantação
- 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 a semântica de proprietário quando o chamador restringe explicitamente os escopos e omite
operator.admin
Contrato de modelo com agente em primeiro lugar
O OpenClaw trata o campo OpenAImodel como um destino de agente, não como um id bruto de modelo do provedor.
model: "openclaw"roteia para o agente padrão configurado.model: "openclaw/default"também roteia para o agente padrão configurado.model: "openclaw/<agentId>"roteia para um agente específico.
x-openclaw-model: <provider/model-or-bare-id>substitui o modelo de backend para o agente selecionado.x-openclaw-agent-id: <agentId>continua compatível como substituição por compatibilidade.x-openclaw-session-key: <sessionKey>controla totalmente o roteamento da sessão.x-openclaw-message-channel: <channel>define o contexto sintético de canal de entrada para prompts e políticas sensíveis a canal.
model: "openclaw:<agentId>"model: "agent:<agentId>"
Habilitando o endpoint
Definagateway.http.endpoints.chatCompletions.enabled como true:
Desabilitando o endpoint
Definagateway.http.endpoints.chatCompletions.enabled como false:
Comportamento da sessão
Por padrão, o endpoint é sem estado por solicitação (uma nova chave de sessão é gerada a cada chamada). Se a solicitação incluir uma string OpenAIuser, o Gateway derivará dela uma chave de sessão estável, para que chamadas repetidas possam compartilhar uma sessão do agente.
Por que essa superfície importa
Este é o conjunto de compatibilidade de maior impacto para frontends e ferramentas self-hosted:- A maioria das configurações de Open WebUI, LobeChat e LibreChat espera
/v1/models. - Muitos sistemas RAG esperam
/v1/embeddings. - Clientes de chat OpenAI existentes normalmente podem começar com
/v1/chat/completions. - Clientes mais nativos de agente preferem cada vez mais
/v1/responses.
Lista de modelos e roteamento de agente
O que `/v1/models` retorna?
O que `/v1/models` retorna?
Uma lista de destinos de agente do OpenClaw.Os ids retornados são entradas
openclaw, openclaw/default e openclaw/<agentId>.
Use-os diretamente como valores OpenAI model.`/v1/models` lista agentes ou subagentes?
`/v1/models` lista agentes ou subagentes?
Ele lista destinos de agente de nível superior, não modelos de backend do provedor nem subagentes.Subagentes permanecem como topologia interna de execução. Eles não aparecem como pseudomodelos.
Por que `openclaw/default` está incluído?
Por que `openclaw/default` está incluído?
openclaw/default é o alias estável para o agente padrão configurado.Isso significa que clientes podem continuar usando um id previsível mesmo se o id real do agente padrão mudar entre ambientes.Como substituo o modelo de backend?
Como substituo o modelo de backend?
Use
x-openclaw-model.Exemplos:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.4Se você o omitir, o agente selecionado será executado com sua escolha normal de modelo configurada.Como embeddings se encaixam nesse contrato?
Como embeddings se encaixam nesse contrato?
/v1/embeddings usa os mesmos ids model de destino de agente.Use model: "openclaw/default" ou model: "openclaw/<agentId>".
Quando precisar de um modelo específico de embedding, envie-o em x-openclaw-model.
Sem esse cabeçalho, a solicitação passa pela configuração normal de embedding do agente selecionado.Streaming (SSE)
Definastream: true para receber Server-Sent Events (SSE):
Content-Type: text/event-stream- Cada linha de evento é
data: <json> - O stream termina com
data: [DONE]
Configuração rápida do Open WebUI
Para uma conexão básica do Open WebUI:- URL base:
http://127.0.0.1:18789/v1 - URL base do Docker no macOS:
http://host.docker.internal:18789/v1 - Chave de API: seu token bearer do Gateway
- Modelo:
openclaw/default
GET /v1/modelsdeve listaropenclaw/default- O Open WebUI deve usar
openclaw/defaultcomo id do modelo de chat - Se você quiser um provedor/modelo de backend específico para esse agente, defina o modelo padrão normal do agente ou envie
x-openclaw-model
openclaw/default, a maioria das configurações do Open WebUI poderá se conectar com a mesma URL base e token.
Exemplos
Sem streaming:/v1/modelsretorna destinos de agente do OpenClaw, não catálogos brutos de provedor.openclaw/defaultestá sempre presente, para que um id estável funcione em todos os ambientes.- Substituições de provedor/modelo de backend pertencem a
x-openclaw-model, não ao campo OpenAImodel. /v1/embeddingsoferece suporte ainputcomo string ou array de strings.