Integração com o seu CRM

API REST em JSON para ler empresas, mover etapas, registrar interações e baixar o PDF de diagnóstico. Base: /api/v1

Autenticação

Gere o token em Configurações → Integração com o CRM (apenas o administrador). Envie em todas as chamadas:

Authorization: Bearer nf_<48 caracteres>

Sem token, ou com token revogado: 401. Token somente leitura em rota de escrita: 403. Limite: 180 requisições por minuto por token (429). Use o token só em servidor, nunca no navegador.

export NF=
export TOKEN=nf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Empresas

GET/api/v1/empresas

Filtros: etapa, cnpj, q (nome), atualizado_desde (ISO), limite (até 200), deslocamento.

curl -s "$NF/api/v1/empresas?etapa=conversa&limite=20" \
  -H "Authorization: Bearer $TOKEN"
{
  "total": 1, "limite": 20, "deslocamento": 0,
  "itens": [{
    "id": 1, "cnpj": "99100000000100", "demo": true,
    "razao_social": "Vitalis Serviços Médicos Ltda", "nome_fantasia": "Clínica Vitalis Demo",
    "situacao_cadastral": "Ativa", "cnae": "8630504", "segmento": "saude", "porte": "EMPRESA DE PEQUENO PORTE",
    "capital_social": 250000, "uf": "PR", "municipio": "Curitiba", "telefone": "5541999990000",
    "site": "https://www.clinicavitalis.example", "funcionarios": 14,
    "faturamento_estimado_mensal": 112345, "faturamento_acima_30k": "sim",
    "ia_score": 23, "ia_classe": "Sem IA", "potencial": 84, "etapa": "conversa", "valor_previsto": 4800
  }]
}
GET/api/v1/empresas/{id}

Detalhe com raio-x (evidências e lacunas) e as últimas 50 interações.

curl -s "$NF/api/v1/empresas/1" -H "Authorization: Bearer $TOKEN"
POST/api/v1/empresas escrita

Cria a empresa e coloca a consulta de CNPJ e o raio-x na fila. Campos: cnpj (obrigatório), site, funcionarios, telefone, notas. 409 se já existir; 400 se o CNPJ for inválido.

curl -s -X POST "$NF/api/v1/empresas" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"cnpj":"00.000.000/0001-91","site":"www.bb.com.br","funcionarios":120}'
PATCH/api/v1/empresas/{id} escrita

Altera etapa (e motivo obrigatório se for perdida), notas e valor_previsto. Mudar a etapa dispara o webhook.

curl -s -X PATCH "$NF/api/v1/empresas/1" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"etapa":"proposta","valor_previsto":4800}'

Etapas válidas: encontrada qualificada abordada conversa demo proposta fechada perdida.

POST/api/v1/empresas/{id}/interacoes escrita

tipo: nota, whatsapp, email, ligacao, reuniao, linkedin ou demo. Útil para o seu CRM espelhar o que acontece na conversa.

curl -s -X POST "$NF/api/v1/empresas/1/interacoes" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"tipo":"reuniao","texto":"Demo feita; pediu proposta com 2 frentes."}'
GET/api/v1/empresas/{id}/pdf
curl -s "$NF/api/v1/empresas/1/pdf" -H "Authorization: Bearer $TOKEN" -o diagnostico.pdf

Consulta de CNPJ e raio-x avulsos

GET/api/v1/cnpj/{cnpj}

Consulta real (BrasilAPI → CNPJ.ws → ReceitaWS), com cache de 30 dias. Erros: 400 CNPJ inválido, 404 não consta, 429 limite das bases públicas, 503/504 indisponível.

curl -s "$NF/api/v1/cnpj/00000000000191" -H "Authorization: Bearer $TOKEN"
POST/api/v1/raiox

Baixa a página inicial (somente sites públicos; endereços internos são bloqueados) e devolve score de maturidade de IA, classe, evidências e lacunas.

curl -s -X POST "$NF/api/v1/raiox" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"url":"www.empresa.com.br"}'

Exportação e indicadores

curl -s "$NF/api/v1/exportar.csv" -H "Authorization: Bearer $TOKEN" -o empresas.csv   # CSV com ; e UTF-8 BOM
curl -s "$NF/api/v1/indicadores" -H "Authorization: Bearer $TOKEN"                    # funil, conversão, tempo por etapa

Webhook de saída

Cadastre a URL do seu CRM em Configurações. Sempre que uma empresa muda de etapa (pela tela ou pela API) o Radar envia um POST com até 3 tentativas (0 s, 1,5 s e 6 s). Responda 2xx para confirmar.

POST https://seu-crm.exemplo/webhooks/neuroflux
Content-Type: application/json
X-NeuroFlux-Event: empresa.etapa_alterada
X-NeuroFlux-Signature: sha256=3b1f…

{
  "evento": "empresa.etapa_alterada",
  "em": "2026-11-04T14:03:22.114Z",
  "de": "conversa", "para": "demo", "motivo": null, "por": "Camila Duarte",
  "empresa": { "id": 1, "cnpj": "…", "nome_fantasia": "…", "etapa": "demo", "ia_classe": "Sem IA", "valor_previsto": 4800 }
}

Validar a assinatura

A assinatura é HMAC-SHA256 do corpo bruto com o segredo mostrado ao gerar o webhook. Compare em tempo constante.

// Node.js
const crypto = require('crypto');
const esperado = 'sha256=' + crypto.createHmac('sha256', process.env.NF_SEGREDO).update(corpoBruto).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(req.headers['x-neuroflux-signature']));
# Python
import hmac, hashlib
esperado = 'sha256=' + hmac.new(SEGREDO.encode(), corpo_bruto, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(esperado, request.headers['X-NeuroFlux-Signature'])

Erros e boas práticas

CódigoSignificado
400Dado inválido (CNPJ, etapa, campo ausente). O corpo traz {"erro":"…"} em português.
401Token ausente, inválido ou revogado.
403Token sem permissão de escrita.
404Empresa não encontrada.
409Empresa já existe (CNPJ duplicado).
429Limite de requisições ou das bases públicas de CNPJ.