LOGUS

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

HTTPDescrição
400Payload inválido (campos, papéis, tamanhos, campos desconhecidos)
401Chave de API inválida ou revogada
402Créditos insuficientes
403Provedor inativo ou provider_id divergente
429Limite de requisições
5xxFalha interna — trate como ausência de autorização (fail closed)