Gateway
Conclusões de chat da OpenAI
OpenClaw's Gateway pode servir um pequeno endpoint de Chat Completions compatível com OpenAI.
Este endpoint fica desativado por padrão. Ative-o primeiro na configuração.
POST /v1/chat/completions- Mesma porta que o Gateway (multiplexação WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
Quando a superfície HTTP compatível com OpenAI do Gateway está ativada, ela também serve:
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
Por baixo dos panos, as solicitações são executadas como uma execução normal de agente do Gateway (o mesmo caminho de código que 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 pelo proxy configurado com reconhecimento de identidade e deixe-o injetar os cabeçalhos de identidade exigidos - autenticação aberta em ingresso privado (
gateway.auth.mode="none"): nenhum cabeçalho de autenticação é exigido
Observações:
- 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 de proxy confiável configurada; proxies local loopback no mesmo host exigemgateway.auth.trustedProxy.allowLoopback = trueexplícito. - 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 completo de operador para a instância do Gateway.
- A autenticação bearer HTTP aqui não é um modelo de escopo restrito por usuário.
- Um token/senha válido do Gateway para este endpoint deve ser tratado como credencial de proprietário/operador.
- As solicitações passam pelo mesmo caminho de agente do plano de controle que ações confiáveis de operador.
- Não há um limite separado de ferramentas para não proprietários/por usuário neste endpoint; depois que um chamador passa pela autenticação do Gateway aqui, o OpenClaw trata esse chamador como um operador confiável para este gateway.
- Para modos de autenticação por segredo compartilhado (
tokenepassword), o endpoint restaura os padrões normais de operador completo mesmo que o chamador envie um cabeçalhox-openclaw-scopesmais restrito. - Modos HTTP confiáveis com identidade (por exemplo, autenticação por proxy confiável ou
gateway.auth.mode="none") respeitamx-openclaw-scopesquando presente e, caso contrário, voltam ao conjunto normal de escopos padrão do operador. - Se a política do agente de destino permitir ferramentas sensíveis, este endpoint poderá usá-las.
- Mantenha este endpoint apenas em loopback/tailnet/ingresso privado; não o exponha diretamente à internet pública.
Matriz de autenticação:
gateway.auth.mode="token"ou"password"+Authorization: Bearer ...- comprova a posse do segredo compartilhado de operador do gateway
- ignora
x-openclaw-scopesmais restritos - restaura o conjunto completo de escopos padrão do operador:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - trata turnos de chat neste endpoint como turnos enviados pelo proprietário
- modos HTTP confiáveis com identidade (por exemplo, autenticação por proxy confiável ou
gateway.auth.mode="none"em ingresso privado)- autenticam alguma identidade confiável externa ou limite de implantação
- respeitam
x-openclaw-scopesquando o cabeçalho está presente - voltam ao conjunto normal de escopos padrão do 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
Consulte Segurança e Acesso remoto.
Contrato de modelo com agente primeiro
O OpenClaw trata o campo OpenAI model como um destino de agente, não como um ID bruto de modelo de 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.
Cabeçalhos opcionais de solicitação:
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 de compatibilidade.x-openclaw-session-key: <sessionKey>controla totalmente o roteamento de sessão.x-openclaw-message-channel: <channel>define o contexto sintético do canal de ingresso para prompts e políticas cientes de canal.
Aliases de compatibilidade ainda aceitos:
model: "openclaw:<agentId>"model: "agent:<agentId>"
Ativando o endpoint
Defina gateway.http.endpoints.chatCompletions.enabled como true:
{
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: true },
},
},
},
}
Desativando o endpoint
Defina gateway.http.endpoints.chatCompletions.enabled como false:
{
gateway: {
http: {
endpoints: {
chatCompletions: { enabled: false },
},
},
},
}
Comportamento de 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 OpenAI user, o Gateway derivará uma chave de sessão estável a partir dela, então chamadas repetidas podem compartilhar uma sessão de agente.
Por que esta superfície importa
Este é o conjunto de compatibilidade de maior impacto para frontends e ferramentas auto-hospedados:
- A maioria das configurações do Open WebUI, LobeChat e LibreChat espera
/v1/models. - Muitos sistemas RAG esperam
/v1/embeddings. - Clientes de chat OpenAI existentes geralmente podem começar com
/v1/chat/completions. - Clientes mais nativos de agentes preferem cada vez mais
/v1/responses.
Lista de modelos e roteamento de agentes
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?
Ele lista destinos de agente de nível superior, não modelos de provedor de backend nem subagentes.
Subagentes continuam sendo topologia interna de execução. Eles não aparecem como pseudomodelos.
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 que o ID real do agente padrão mude entre ambientes.
Como substituo o modelo de backend?
Use x-openclaw-model.
Exemplos:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.5
Se você o omitir, o agente selecionado será executado com sua escolha normal de modelo configurada.
Como embeddings se encaixam neste 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 de embedding específico, envie-o em x-openclaw-model.
Sem esse cabeçalho, a solicitação passa para a configuração normal de embeddings do agente selecionado.
Streaming (SSE)
Defina stream: true para receber eventos enviados pelo servidor (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 com o 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
Comportamento esperado:
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
Smoke rápido:
curl -sS http://127.0.0.1:18789/v1/models \
-H 'Authorization: Bearer YOUR_TOKEN'
Se isso retornar openclaw/default, a maioria das configurações do Open WebUI consegue se conectar com a mesma URL base e token.
Exemplos
Sem streaming:
curl -sS http://127.0.0.1:18789/v1/chat/completions \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"model": "openclaw/default",
"messages": [{"role":"user","content":"hi"}]
}'
Com streaming:
curl -N http://127.0.0.1:18789/v1/chat/completions \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-H 'x-openclaw-model: openai/gpt-5.4' \
-d '{
"model": "openclaw/research",
"stream": true,
"messages": [{"role":"user","content":"hi"}]
}'
Listar modelos:
curl -sS http://127.0.0.1:18789/v1/models \
-H 'Authorization: Bearer YOUR_TOKEN'
Buscar um modelo:
curl -sS http://127.0.0.1:18789/v1/models/openclaw%2Fdefault \
-H 'Authorization: Bearer YOUR_TOKEN'
Criar embeddings:
curl -sS http://127.0.0.1:18789/v1/embeddings \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-H 'x-openclaw-model: openai/text-embedding-3-small' \
-d '{
"model": "openclaw/default",
"input": ["alpha", "beta"]
}'
Observações:
/v1/modelsretorna destinos de agente do OpenClaw, não catálogos brutos de provedores.openclaw/defaultestá sempre presente para que um ID estável funcione em diferentes ambientes.- Substituições de provedor/modelo de backend pertencem a
x-openclaw-model, não ao campo OpenAImodel. /v1/embeddingsaceitainputcomo uma string ou um array de strings.