Documentação da API

API REST pública para consumo de normas regulatórias. Todos os endpoints retornam JSON.

Base URL: https://fabricabot.one/api/v1

GET/api/v1/entidades
Listar Entidades
Retorna todas as entidades reguladoras disponíveis no sistema (CVM, ANBIMA, COAF, etc.).
POST/api/v1/normas
Listar Normas
Busca normas regulatórias com filtros por entidade, período e paginação. Retorna metadados e preview do texto.
GET/api/v1/normas/:id
Buscar Norma por ID
Retorna os metadados completos de uma norma específica, incluindo resumo gerado por IA quando disponível.
GET/api/v1/normas/:id/texto
Buscar Texto Completo
Retorna o texto completo de uma norma. Para textos muito grandes, suporta paginação via chunks.

API WhatsApp

Endpoints dedicados para integração com bots WhatsApp. Utilizam autenticação por número de celular (JWT) e mantêm contexto de conversa automaticamente.

Base URL: https://fabricabot.one/api/whatsapp · Auth: Bearer JWT (obtido via /token) · Validade do token: 24 horas

POST/api/whatsapp/token
Obter Token de Sessão
Autentica um número de celular e retorna um JWT válido por 24 horas. Deve ser chamado uma vez ao iniciar cada conversa. Números não cadastrados ou inativos recebem mensagem de plano não disponível.
POST/api/whatsapp/chat
Enviar Pergunta (RAG)
Envia uma pergunta sobre normas regulatórias. O sistema busca automaticamente os documentos mais relevantes na base, consulta o LLM com esse contexto e retorna uma resposta formatada para WhatsApp. O histórico das últimas 6 mensagens é mantido automaticamente por sessão.
DELETE/api/whatsapp/session
Encerrar Sessão
Invalida o token JWT atual e encerra a sessão. Deve ser chamado quando o usuário encerra a conversa no WhatsApp (ex: digitar 'sair', 'tchau'). Opcional — sessões expiram automaticamente após 24 horas.
Fluxo Completo de Integração
Exemplo de integração em Node.js para um bot WhatsApp
const BASE = "https://fabricabot.one/api/whatsapp";

// 1. Ao iniciar conversa — obter token (uma vez por sessão)
async function startSession(phone) {
  const res = await fetch(`${BASE}/token`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ phone })
  });
  const data = await res.json();
  if (!res.ok) return { error: data.message }; // plano não disponível
  return { token: data.token, greeting: data.message };
}

// 2. Para cada mensagem — enviar pergunta
async function askQuestion(token, question, entityId = null) {
  const res = await fetch(`${BASE}/chat`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({ question, ...(entityId && { entityId }) })
  });
  const data = await res.json();
  if (res.status === 429) return data.message; // limite atingido
  if (!res.ok) return 'Erro ao processar sua pergunta. Tente novamente.';
  return data.answer; // texto formatado para WhatsApp
}

// 3. Ao encerrar conversa
async function endSession(token) {
  await fetch(`${BASE}/session`, {
    method: 'DELETE',
    headers: { 'Authorization': `Bearer ${token}` }
  });
}

// Uso:
const { token, greeting } = await startSession('+5511999999999');
console.log(greeting); // "Olá, João! Sessão iniciada..."

const answer = await askQuestion(token, 'O que é a Resolução CVM 175?');
console.log(answer); // resposta formatada para WhatsApp
Códigos de Resposta
Possíveis códigos HTTP retornados pela API
CódigoDescrição
200Sucesso - Requisição processada corretamente
400Bad Request - Parâmetros inválidos ou entidade não encontrada
404Not Found - Norma não encontrada
500Internal Server Error - Erro interno do servidor
Estrutura de Erro
Formato padrão das respostas de erro
{
  "success": false,
  "error": "Entidade não encontrada: XYZ",
  "entidadesDisponiveis": ["CVM", "RECEITA_FEDERAL", "ANBIMA", "COAF", "SUSEP", "B3"]
}