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:
Authorization: Bearer rubi_live_SUA_CHAVERegras 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:
https://rubi.robsystems.ai/api/public/rubi/v1/chatCorpo da requisição (JSON):
{
"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"
}| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| message | string | Sim | Sua solicitação em linguagem natural. Máximo de 4.000 caracteres; mínimo 1. |
| history | array | Não | Até 16 turnos anteriores para dar contexto à conversa. Cada item tem role ("user" ou "assistant") e text (máx. 4.000 caracteres). |
| conversation_id | string | Não | Identificador 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):
{
"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
}| Campo | Descrição |
|---|---|
| reply | Resposta da Rubi Gordon em linguagem natural (pt-BR por padrão). |
| citations | Fontes/conhecimentos usados na resposta, quando aplicável. |
| request_id | Identificador único desta chamada — use em pedidos de suporte. |
| conversation_id | Identificador da conversa (o seu ou o gerado). |
| latency_ms | Tempo 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 -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."}'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 Gordonimport 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
$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
429ou502, repita a chamada com espera crescente (ex.: 2s, 5s, 10s), no máximo 3 vezes. Não repita em erros400,401ou403— 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:
{
"error": {
"code": "invalid_key",
"message": "A chave informada é inválida ou foi revogada."
},
"request_id": "9f2c1a7e-3b14-4a8d-9e77-1c0f2d5a6b8c"
}| Código | Significado | O que fazer |
|---|---|---|
| 400 | Corpo inválido | Envie JSON válido com o campo "message" (1–4.000 caracteres); history com no máximo 16 turnos. |
| 401 | Chave ausente ou inválida | Confira o cabeçalho Authorization e o prefixo rubi_live_ |
| 403 | Chave revogada ou canal pausado | Solicite reativação ou nova chave |
| 404 | Agente indisponível | A Rubi vinculada à chave foi pausada ou arquivada; contate a RobLabs |
| 429 | Limite de taxa atingido | Aguarde alguns segundos e repita (máx. 30 req/min por chave) |
| 502 | Falha temporária | Repita 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
AuthorizationeContent-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_idehistoryenviados quando a conversa precisa de contexto.- Registro do
request_idnos logs do seu sistema para auditoria e suporte. - Primeiro teste real: enviar "Olá, você está operando?" e conferir a resposta com HTTP 200.
