Documentação da API
O Logus decide se uma mensagem pode chegar ao seu LLM: ALLOW ou DENY.
Endpoint
POST /v1/decision
Autenticação
Authorization: Bearer *** (sua chave de API)
Requisição
Envie seu provider_id, um request_id único por chamada e o histórico da conversa em messages (papéis user e assistant, em ordem). context é opcional: documentos fixos da conversa.
Resposta
A resposta informa a decision (ALLOW ou DENY), a justification (motivo, em português) e o credits_consumed. Em DENY, não responda à pergunta — devolva a justificativa da negação (em português).
Exemplos
Exemplos mínimos — decida primeiro, responda depois. Substitua os campos e gere um request_id único por chamada.
curl
curl -X POST https://api.logus-align.com.br/v1/decision \
-H "Authorization: Bearer ***" \
-H "Content-Type: application/json" \
-d '{
"provider_id": "prov_xxx",
"conversation_id": "conv_123",
"request_id": "req_456",
"messages": [
{"role": "user", "content": "mensagem do seu cliente"}
]
}'
Python
import requests
resp = requests.post(
"https://api.logus-align.com.br/v1/decision",
headers={"Authorization": "Bearer ***"},
json={
"provider_id": "prov_xxx",
"conversation_id": "conv_123",
"request_id": "req_456",
"messages": [{"role": "user", "content": "mensagem do seu cliente"}],
},
timeout=30,
).json()
if resp["decision"] == "ALLOW":
answer = your_llm(messages) # seu provedor de IA, normalmente
else:
answer = resp["justification"] # a justificativa da negação (em PT-BR)
Node.js
const resp = await fetch("https://api.logus-align.com.br/v1/decision", {
method: "POST",
headers: { "Authorization": "Bearer ***", "Content-Type": "application/json" },
body: JSON.stringify({
provider_id: "prov_xxx",
conversation_id: "conv_123",
request_id: "req_456",
messages: [{ role: "user", content: "mensagem do seu cliente" }],
}),
}).then((r) => r.json());
if (resp.decision === "ALLOW") {
const answer = await yourLLM(messages); // seu provedor de IA, normalmente
} else {
const answer = resp.justification; // justificativa da negação (em PT-BR)
}
Créditos
Mínimo de 1 crédito por decisão (o Logus paga o modelo em toda chamada) + 1 crédito a cada bloco de ~8.000 tokens de entrada (configurável). A resposta informa credits_consumed e prompt_tokens. Replays com o mesmo request_id são idempotentes e não re-cobram.
As perguntas enviadas para julgamento ficam retidas por 30 dias para verificação de gastos e depois são eliminadas automaticamente (minimização LGPD).
Códigos de erro
| HTTP | Descrição |
|---|---|
| 400 | Payload inválido (campos, papéis, tamanhos, campos desconhecidos) |
| 401 | Chave de API inválida ou revogada |
| 402 | Créditos insuficientes |
| 403 | Provedor inativo ou provider_id divergente |
| 429 | Limite de requisições |
| 5xx | Falha interna — trate como ausência de autorização (fail closed) |