RobLabs R.U.B.I. — API v1

Documentação de integração — Rubi Gordon

Conecte a Rubi Gordon ao seu site, aplicativo ou sistema empresarial para auditoria, verificação de dados, detecção de erros, previsão de falhas e ações operacionais governadas.

Base URL: https://rubi.robsystems.ai

Endpoint único: POST /api/public/rubi/v1/chat

Autenticação: Authorization: Bearer rubi_live_... (cabeçalho)

Formato: JSON requisição e resposta, UTF-8

1. Autenticação

Cada projeto recebe uma chave individual no formato rubi_live_.... Envie a chave no cabeçalho Authorization de cada requisição:

Cabeçalho obrigatório
Authorization: Bearer rubi_live_SUA_CHAVE

Regras de segurança

  • Use a chave somente no servidor do seu sistema — nunca em código de navegador ou app público.
  • Não compartilhe a chave entre projetos; cada sistema tem a sua.
  • Se uma chave vazar, solicite a revogação imediata — ela pode ser desativada individualmente.
  • Guarde a chave em variável de ambiente ou cofre de segredos do seu backend (ex.: RUBI_DEPLOY_KEY), nunca no código versionado.

2. Endpoint e campos

Todas as interações usam um único endpoint, sempre com método POST:

POST
https://rubi.robsystems.ai/api/public/rubi/v1/chat

Corpo da requisição (JSON):

Request
{
  "message": "Verifique os registros de hoje e aponte inconsistências.",
  "history": [
    { "role": "user", "text": "Bom dia, pode auditar os pedidos?" },
    { "role": "assistant", "text": "Claro. Envie o período desejado." }
  ],
  "conversation_id": "pedido-2026-10-04-001"
}
CampoTipoObrigatórioDescrição
messagestringSimSua solicitação em linguagem natural. Máximo de 4.000 caracteres; mínimo 1.
historyarrayNãoAté 16 turnos anteriores para dar contexto à conversa. Cada item tem role ("user" ou "assistant") e text (máx. 4.000 caracteres).
conversation_idstringNãoIdentificador da conversa no seu sistema (máx. 120 caracteres). Se omitido, um novo é gerado e devolvido na resposta — guarde-o para manter o fio da conversa.

Resposta de sucesso (HTTP 200):

Response 200
{
  "request_id": "9f2c1a7e-3b14-4a8d-9e77-1c0f2d5a6b8c",
  "conversation_id": "pedido-2026-10-04-001",
  "reply": "Análise concluída. Encontrei 2 inconsistências nos registros de hoje...",
  "citations": [ ... fontes usadas pela Rubi, quando houver ... ],
  "latency_ms": 3142
}
CampoDescrição
replyResposta da Rubi Gordon em linguagem natural (pt-BR por padrão).
citationsFontes/conhecimentos usados na resposta, quando aplicável.
request_idIdentificador único desta chamada — use em pedidos de suporte.
conversation_idIdentificador da conversa (o seu ou o gerado).
latency_msTempo de processamento em milissegundos.

3. Exemplos de código

Chame sempre do servidor do seu sistema. Os exemplos abaixo cobrem as linguagens mais comuns.

cURL
curl -X POST https://rubi.robsystems.ai/api/public/rubi/v1/chat \
  -H "Authorization: Bearer rubi_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"message": "Verifique os registros de hoje e aponte inconsistências."}'
JavaScript / Node.js
const response = await fetch("https://rubi.robsystems.ai/api/public/rubi/v1/chat", {
  method: "POST",
  headers: {
    "Authorization": "Bearer rubi_live_SUA_CHAVE",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ message: "Audite os pedidos pendentes." }),
});
const data = await response.json();
if (!response.ok) throw new Error(data?.error?.message ?? "Erro na chamada");
console.log(data.reply); // resposta da Rubi Gordon
Python
import requests

resp = requests.post(
    "https://rubi.robsystems.ai/api/public/rubi/v1/chat",
    headers={"Authorization": "Bearer rubi_live_SUA_CHAVE"},
    json={"message": "Confira os dados e sugira correções."},
    timeout=60,
)
resp.raise_for_status()
print(resp.json()["reply"])
PHP
<?php
$ch = curl_init("https://rubi.robsystems.ai/api/public/rubi/v1/chat");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer rubi_live_SUA_CHAVE",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "message" => "Revise os cadastros importados hoje.",
  ]),
  CURLOPT_TIMEOUT => 60,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($status === 200) { echo $data["reply"]; }

4. Limites, timeout e repetição

  • Taxa de uso: até 30 requisições por minuto por chave. Acima disso, a API responde 429 — aguarde alguns segundos e tente novamente.
  • Tempo de resposta: normalmente entre 2 e 15 segundos. Configure timeout de 60 segundos no seu cliente.
  • Repetição (retry): em erros 429 ou 502, repita a chamada com espera crescente (ex.: 2s, 5s, 10s), no máximo 3 vezes. Não repita em erros 400, 401 ou 403 — corrija a requisição ou a chave.
  • CORS: o endpoint aceita chamadas de navegador (métodos POST/OPTIONS), mas por segurança a chave deve ficar no seu servidor — nunca exposta no front-end.

5. Governança

  • Ações automáticas limitadas: a Rubi executa sozinha apenas ações reversíveis (leitura, auditoria, rascunhos, sugestões).
  • Ações sensíveis exigem aprovação: envios, alterações irreversíveis e comunicações externas ficam como rascunho até aprovação humana.
  • Exclusões automáticas bloqueadas: a Rubi nunca apaga dados por conta própria.
  • Auditoria por chave: cada requisição é registrada com a chave de origem, permitindo rastrear o uso por projeto.
  • Chaves sem expiração: válidas até revogação manual.

6. Erros

Erros seguem sempre este formato JSON, com request_id para rastreamento:

Formato de erro
{
  "error": {
    "code": "invalid_key",
    "message": "A chave informada é inválida ou foi revogada."
  },
  "request_id": "9f2c1a7e-3b14-4a8d-9e77-1c0f2d5a6b8c"
}
CódigoSignificadoO que fazer
400Corpo inválidoEnvie JSON válido com o campo "message" (1–4.000 caracteres); history com no máximo 16 turnos.
401Chave ausente ou inválidaConfira o cabeçalho Authorization e o prefixo rubi_live_
403Chave revogada ou canal pausadoSolicite reativação ou nova chave
404Agente indisponívelA Rubi vinculada à chave foi pausada ou arquivada; contate a RobLabs
429Limite de taxa atingidoAguarde alguns segundos e repita (máx. 30 req/min por chave)
502Falha temporáriaRepita com espera crescente; se persistir, informe o request_id ao suporte

7. Checklist de integração

  • Chave rubi_live_... armazenada em variável de ambiente ou cofre, apenas no servidor.
  • Chamada POST com cabeçalhos Authorization e Content-Type: application/json.
  • Timeout de 60 segundos e retry com espera crescente em 429/502.
  • Tratamento do corpo de erro { error: { code, message } } e exibição amigável ao usuário.
  • conversation_id e history enviados quando a conversa precisa de contexto.
  • Registro do request_id nos logs do seu sistema para auditoria e suporte.
  • Primeiro teste real: enviar "Olá, você está operando?" e conferir a resposta com HTTP 200.