API CapiBLU — v1

Os mesmos dados que a plataforma usa, em JSON, para o seu CRM, seu discador ou sua automação. Autenticação por token, um endpoint por pergunta.

Versão1.0
ArquiteturaREST / HTTP
FormatoJSON
AutenticaçãoAPI Token (Bearer)
Endpoints34
URL base https://app.capiblu.net/api/v1
Nada encontrado com esse filtro.

1. Introdução

A API do CapiBLU expõe o que a plataforma alcança: cadastro de empresas da Receita Federal, quadro de sócios com CPF resolvido, possíveis decisores com cargo, vínculos empregatícios da RAIS, telefones priorizados por atualidade e parentes.

O que dá para fazer

  • Buscar empresas por UF, município, CNAE, porte e capital social
  • Trazer sócios com CPF resolvido e decisores com cargo e nível de decisão
  • Consultar quem trabalha (ou trabalhou) numa empresa, pela RAIS
  • Descobrir onde uma pessoa trabalha, a partir do CPF
  • Montar contatos prontos para abordagem, com telefone do mais atual para o mais antigo
  • Puxar o JSON bruto de cada fonte quando precisar de um campo que a tela não mostra
  • Acompanhar o próprio consumo e o limite diário

Pré-requisito: um token de API, gerado por um administrador no painel administrativo.

2. Autenticação

Toda requisição leva o token no header:

Authorization: Bearer capi_a1b2c3d4_xxxxxxxxxxxxxxxxxxxxxxxx

Como obter

Um administrador cria o token no painel (aba Painel administrativo → Tokens de API). O valor em claro aparece uma única vez, na criação — o CapiBLU guarda apenas o hash. Se perder, revogue e gere outro.

Escopos

EscopoO que libera
leituraSó o que sai de base local: empresas, sócios, busca por nome, cadastro de CPF. Não gera custo.
consultaTambém o que gasta consulta paga: telefones, decisores, RAIS, parentes, conexões.

Token leitura que chamar rota paga recebe 403 com explicação. Serve para entregar acesso a um sistema de leitura sem risco de ele gerar custo.

Segurança Nunca coloque o token em repositório nem em código de frontend. Use variável de ambiente. Revogar é imediato: a chamada seguinte já recebe 401.

3. Conceitos gerais

3.1 Datas

ISO 8601 em UTC: 2026-08-19T17:00:00Z. Datas que vêm de base pública (RAIS, Receita) podem chegar no formato original dd/mm/aaaa — nesse caso o campo tem sufixo _br.

3.2 Filtros

GET /api/v1/empresas?uf=MG&municipio=GOVERNADOR%20VALADARES&porte=05

3.3 Paginação

ParâmetroTipoDescrição
pageintegerPágina, começando em 1
limitintegerRegistros por página (o máximo varia por rota)

3.4 Estrutura das respostas

Todo retorno bem-sucedido usa o mesmo envelope:

{
  "data": [ ... ],
  "meta": { "total": 100, "page": 1, "limit": 20, "fonte": "Receita Federal" }
}

E todo erro tem corpo previsível:

{ "error": { "code": "cnpj_invalido", "message": "CNPJ deve ter 14 dígitos." } }
StatusQuando acontece
200Sucesso
400Requisição inválida (documento malformado, filtro impossível, campo inexistente)
401Token ausente, inválido ou revogado
403Escopo insuficiente, usuário inativo, ou rota só de admin
404Documento não encontrado na fonte
429Limite diário de consultas atingido
502 / 503Serviço de dados indisponível

3.5 Custo por chamada

Rotas marcadas gasta consulta consomem o limite diário do usuário dono do token — o mesmo contador da plataforma. Rotas base local não consomem nada. Veja o saldo em GET /conta.

Ausência não é erro Micro empresa sem decisor devolve 200 com data: [] e um meta.aviso explicando. É resposta legítima, não falha.

4.1 Conta

GET/conta não gasta

Quem é o dono do token, qual token está em uso e quanto ainda cabe de consulta hoje.

{
  "data": {
    "usuario": { "id": 1, "nome": "Rebeca", "email": "rebeca@…", "role": "admin" },
    "token": { "id": 3, "nome": "Integração CRM", "escopo": "consulta" },
    "limites": { "consultas_por_dia": 100, "usadas_hoje": 12, "restantes_hoje": 88, "ilimitado": false }
  },
  "meta": { "gerado_em": "2026-08-19T20:14:03Z" }
}

4.2 Empresas

GET/empresas base local

Busca na base local da Receita Federal.

ParâmetroTipoDescrição
ufstringSigla do estado
municipiostringNome do município
cnaestringCódigo CNAE (vários separados por vírgula)
portestring01 micro · 03 pequeno · 05 demais
situacaostringEx.: ATIVA
capital_min / capital_maxintegerFaixa de capital social
com_telefonebooleanSó empresas com telefone na Receita
somente_matrizbooleanExclui filiais
textostringBusca livre por razão social / nome fantasia
page / limitintegerPaginação (limit máximo 200)
A Receita não classifica "grande" 05 é o balde de médias e grandes. Para chegar nas grandes, combine porte=05 com capital_min.
GET/empresas/{cnpj} base local

Cadastro completo: razão social, situação, CNAE, endereço, capital social e QSA.

GET/empresas/{cnpj}/socios base local

Quadro de sócios com CPF resolvido quando a base local consegue cruzar.

{ "data": [ { "nome": "CELIO COUTINHO DA CUNHA",
              "qualificacao": "Sócio-Administrador",
              "cpf": "03702149600", "data_entrada": "2021-06-10" } ],
  "meta": { "total": 1, "fonte": "Receita Federal (QSA)" } }
GET/empresas/{cnpj}/decisores gasta consulta

Possíveis decisores com cargo, classificados em três níveis de decisão.

ParâmetroTipoDescrição
nivelstring1 decide sozinho · 2 decide na área · 3 influencia
cargostringFiltro por cargo, ex.: diretor
page / limitintegerPaginação
Cobertura desigual Empresa grande costuma ter muitos (medimos 602 no CNPJ da Google Brasil); micro empresa quase nunca tem. Nesses casos meta.aviso explica e data vem vazio.
GET/empresas/{cnpj}/funcionarios gasta consulta

Vínculos declarados na RAIS: nome, CPF, admissão, desligamento e tempo de casa.

ParâmetroTipoDescrição
situacaostringativos ou desligados
page / limitintegerPaginação (limit máximo 500)
A RAIS é um retrato, não tempo real Vale o último ano entregue (meta.referencia): quem entrou depois não aparece, e "ativo" significa "estava lá naquela data". De quem saiu, a base informa dia e mês, sem o ano.
GET/empresas/{cnpj}/contatos gasta consulta

O endpoint de prospecção: sócios e decisores já com telefone priorizado.

ParâmetroTipoPadrãoDescrição
incluir_decisoresbooleantrueAnexa decisores que não são sócios
cargosstringFiltro de cargo dos decisores
max_decisoresinteger3Teto por empresa
max_telefonesinteger3Telefones por contato
tipo_telefonestringcelularcelular, celular_fixo ou todos
fonte_telefonestringassertivaassertiva ou mk

Os telefones vêm do mais atual para o mais antigo, usando o último contato registrado, linha quente e se o número é do próprio titular.

GET/empresas/{cnpj}/conexoes gasta consulta

Sócios, possíveis decisores e empresas ligadas — com telefone e indicação de WhatsApp.

4.3 Pessoas

GET/pessoas base local

Busca por nome na base local de CPF.

ParâmetroTipoDescrição
nomestringObrigatório, mínimo 3 caracteres
amplabooleantrue procura nomes compostos parecidos
page / limitintegerPaginação
GET/pessoas/{cpf} base local

Cadastrais: nome, nascimento, sexo e nome da mãe quando disponível.

GET/pessoas/{cpf}/telefones gasta consulta

Telefones da pessoa, ordenados do mais atual para o mais antigo.

GET/pessoas/{cpf}/vinculos gasta consulta

Onde a pessoa trabalha ou trabalhou, pela RAIS — o inverso do CNPJ.

GET/pessoas/{cpf}/parentes gasta 2 consultas

Mãe, pai, filhos, irmãos, cônjuge e sócios, com telefone quando existe. Funde duas fontes e marca a origem de cada linha em fonte.

4.4 Telefones

GET/telefones/{numero} gasta consulta

Telefone reverso: CPFs e CNPJs atrelados ao número. Aceita 10 ou 11 dígitos com DDD, com ou sem máscara.

GET/telefones/{numero}/pertence/{documento} gasta consulta

Confirma se o número é daquele CPF/CNPJ e avisa quando é linha compartilhada.

4.5 JSON bruto das fontes

Cada fonte devolve muito mais campo do que a tela mostra. Nestas rotas o meta.bruto vem true: o data é o JSON da fonte, sem tradução nossa. Use quando precisar de um campo que a API tratada não expõe.

RotaO que devolve
GET /empresas/{cnpj}/assertivaResposta completa da Assertiva para o CNPJ, sem recorte
GET /pessoas/{cpf}/assertivaResposta completa da Assertiva para o CPF
GET /pessoas/{cpf}/mkPerfil Mk: renda, score, endereços, parentes, vizinhos, benefícios
GET /pessoas/{cpf}/contatosTelefones e e-mails pela Serasa
GET /empresas/{cnpj}/contatos-serasaTelefones e e-mails da empresa pela Serasa
GET /empresas/{cnpj}/linkedinFuncionários com cargo pelo LinkedIn
GET /assertiva/telefone/{numero}Dono do telefone, resposta completa
GET /assertiva/email/{email}Quem está por trás do e-mail
POST /pessoas/busca-avancadaBusca por nome e/ou endereço na Assertiva

Todas gastam consulta e são JSON bruto.

4.6 Visões compostas — tudo numa chamada

GET/empresas/{cnpj}/completo gasta por bloco
GET /empresas/{cnpj}/completo?incluir=cadastro,socios,decisores,funcionarios,conexoes,assertiva,linkedin

Cada bloco é opcional e cada bloco pago gasta consulta — peça só o que vai usar. Um bloco que falha não derruba os outros:

{
  "data": { "cadastro": {...}, "socios": [...], "decisores": {...} },
  "meta": {
    "blocos": ["cadastro", "socios", "decisores"],
    "falhas": { "funcionarios": "A base RAIS respondeu 504." }
  }
}

Medido no CNPJ da Google Brasil com cinco blocos: cadastro, 3 sócios, 602 decisores, 1.023 funcionários e 14 conexões, tudo em uma resposta.

GET/pessoas/{cpf}/completo gasta por bloco
GET /pessoas/{cpf}/completo?incluir=cadastro,mk,assertiva,vinculos,parentes,serasa

Mesma mecânica: meta.blocos diz o que veio, meta.falhas diz o que não veio e por quê. Bloco inexistente devolve 400 bloco_invalido listando os aceitos.

4.7 Lote

POST/enriquecimento gasta se pedir campo pago

O "Minha planilha" em API: manda CNPJs e a lista de campos, recebe uma linha por CNPJ. Máximo de 200 por chamada.

curl -X POST "$BASE/enriquecimento" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"cnpjs":["06990590000123"],
       "campos":["rfb_razao","rfb_municipio","as_empresa_tel"]}'

Campos da Receita não gastam consulta; campos de fonte paga gastam (meta.gasta_consulta avisa qual foi o caso).

Campo errado não passa em silêncio Nome desconhecido volta em meta.campos_ignorados; se nenhum campo for válido, a resposta é 400 campos_desconhecidos. O catálogo está em GET /enriquecimento/campos.
GET/enriquecimento/campos não gasta

Catálogo dos campos aceitos, agrupados por fonte, com indicação de quais cobram.

POST/prospeccao/cobertura 2 consultas por CNPJ

Mede em quantas empresas da lista existe decisor na base, sem puxar telefone. Serve para decidir se vale rodar a prospecção antes de gastar. Máximo de 60 CNPJs.

{ "meta": { "testadas": 3, "com_decisor": 1, "taxa": 33.3, "consultas_gastas": 6 } }
POST/prospeccao/pessoas base local

Sócios e pessoas por filtros de empresa (UF, município, CNAE, porte), direto da base local.

4.8 Apoio, consumo e dossiê

GET/fontes não gasta

Quais fontes estão ativas, o que cada uma entrega e se cobra. Bom para o seu sistema degradar sozinho quando uma fonte cai.

GET/lookups/{tipo} não gasta

Listas de domínio para montar filtro: cnae, natureza, municipio, pais, qualificacao, motivo.

GET/consumo não gasta

Consumo de hoje, limite e tokens do usuário. Para token de admin, inclui o relatório do período (?dias=30) com o total oficial da Assertiva.

GET/dossie/{tipo}/{documento} só admingasta consulta

Devolve application/pdf, não JSON. tipo é cpf ou cnpj; aceita insight=true (resumo por IA) e familia=true (consulta os parentes).

curl -H "Authorization: Bearer $TOKEN" \
  "$BASE/dossie/cnpj/06990590000123?insight=true" -o dossie.pdf

5. Administração de tokens

Estas rotas usam sessão de administrador, não token de API — é o que a tela do painel consome.

MétodoRotaDescrição
GET/api/admin/tokensLista tokens (só o prefixo, nunca o segredo)
POST/api/admin/tokensCria token. Body: {user_id, nome, escopo}
DELETE/api/admin/tokens/{id}Revoga um token

O token herda o limite diário do usuário a que pertence. Para dar mais folga a uma integração, ajuste o limite desse usuário no painel.

6. Objetos e relacionamentos

ObjetoDescriçãoRelacionamentos
EmpresaCNPJ na base da Receitatem Sócios, Decisores, Funcionários, Conexões
SócioPessoa no quadro societáriopertence a Empresa; é uma Pessoa quando o CPF resolve
DecisorGestor ligado ao CNPJ, com cargo e nívelpertence a Empresa; é uma Pessoa
FuncionárioVínculo declarado na RAISliga Pessoa e Empresa, com admissão e desligamento
PessoaCPF na base localtem Telefones, Vínculos, Parentes
ContatoSócio ou Decisor já com telefoneo que a prospecção consome

7. Casos de uso comuns

Enriquecer um CRM com quem decide

# 1. acha as empresas do perfil
curl -H "Authorization: Bearer $CAPIBLU_TOKEN" \
  "$BASE/empresas?uf=MG&porte=05&capital_min=1000000&limit=50"

# 2. para cada CNPJ, pega contatos com telefone
curl -H "Authorization: Bearer $CAPIBLU_TOKEN" \
  "$BASE/empresas/06990590000123/contatos?max_decisores=2&tipo_telefone=celular"

Descobrir onde um lead trabalha, a partir do CPF

curl -H "Authorization: Bearer $CAPIBLU_TOKEN" \
  "$BASE/pessoas/03702149600/vinculos"

Validar de quem é um número que ligou

curl -H "Authorization: Bearer $CAPIBLU_TOKEN" \
  "$BASE/telefones/33997332652"

Controlar custo antes de rodar em lote

curl -H "Authorization: Bearer $CAPIBLU_TOKEN" "$BASE/conta"
# → data.limites.restantes_hoje diz quantas consultas ainda cabem

curl -X POST "$BASE/prospeccao/cobertura" -H "Authorization: Bearer $CAPIBLU_TOKEN" \
  -H 'Content-Type: application/json' -d '{"cnpjs":["…","…"]}'
# → meta.taxa diz se vale rodar a lista inteira

8. Boas práticas

  1. Um token por integração, com nome que diga quem usa. Revogar fica cirúrgico.
  2. Escopo leitura por padrão. Só suba para consulta o que precisa gastar.
  3. Trate o 429. O limite é diário e por usuário: espere o dia virar ou peça mais folga a um admin.
  4. Cacheie do seu lado. CNPJ e RAIS mudam devagar; consultar o mesmo documento duas vezes no mesmo dia é dinheiro fora.
  5. Não trate ausência como erro. 200 com data: [] e um meta.aviso é resposta legítima.
  6. Peça só os blocos que usa em /completo — cada bloco pago cobra separado.