Entidades
curl --request GET \
--url https://api.example.com/api/v1/entidades/{id}import requests
url = "https://api.example.com/api/v1/entidades/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/entidades/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/entidades/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/entidades/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/entidades/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/entidades/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyEntidades
Ficha Aurora-first da empresa, com enriquecimentos sob demanda.
GET
/
api
/
v1
/
entidades
/
{id}
Entidades
curl --request GET \
--url https://api.example.com/api/v1/entidades/{id}import requests
url = "https://api.example.com/api/v1/entidades/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/entidades/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/entidades/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/entidades/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/entidades/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/entidades/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodystring
required
CNPJ em qualquer formato —
00.000.000/0001-91, 00000000000191 ou
00000000 — ou um id de pessoa devolvido por outra chamada.A raiz identifica a empresa. Quando você manda o CNPJ completo, as expansões
de estabelecimento usam a filial indicada.string
Lista separada por vírgula:
socios, endereco, doacoes, sancoes.
socios exige socios:read; sancoes usa a ontologia e tem limite próprio.curl "https://brain.pandoragraph.com/api/v1/entidades/00000000?incluir=socios,endereco" \
-H "Authorization: Bearer $BRAIN_API_KEY"
{
"dado": {
"id": "00000000",
"tipo": "empresa",
"nome": "BANCO DO BRASIL SA",
"cadastroAurora": {
"id": "00000000",
"versaoId": "emp_v1_...",
"cnpjBasico": "00000000",
"razaoSocial": "BANCO DO BRASIL SA",
"naturezaJuridica": "2038",
"qualificacaoResponsavel": "10",
"capitalSocial": 120000000000,
"capitalSocialTexto": "120000000000",
"porte": "05",
"enteFederativo": null,
"primeiraAparicao": "2025-11-16",
"ultimaAparicao": "2026-07-12"
},
"estabelecimentos": {
"valor": 7902,
"conferido": false,
"procedencia": "grafo"
},
"socios": [
{
"pessoaId": "***000000**::PESSOA EXEMPLO",
"vinculoId": "vin_v1_...",
"versaoId": "ver_v1_...",
"nome": "PESSOA EXEMPLO",
"documentoMascarado": "***000000**",
"qualificacaoCodigo": "49",
"qualificacao": "Sócio-Administrador",
"dataEntradaSociedade": "2020-01-01",
"vigente": true,
"estadoVigencia": "vigente"
}
],
"sociosResumo": {
"total": 41,
"vigentes": 41,
"truncado": false,
"proximo": null
}
},
"avisos": [
"constar no quadro societário não é ser dono, e nome igual pode ser outra pessoa"
],
"fonte": { "atualizadoEm": "2026-07-12", "cacheSegundos": 0 },
"fontes": {
"aurora": { "estado": "ok", "snapshotId": "...", "completo": true },
"grafo": { "estado": "ok", "completo": true },
"athena": { "estado": "ok", "completo": true }
}
}
Como ler as fontes
cadastroAurora decide o cadastro e preserva todos os campos relacionais. O
grafo e o Athena enriquecem a ficha. O objeto fontes declara separadamente se
cada uma respondeu, estava ausente ou ficou indisponível.
404 só sai quando Aurora e grafo confirmam ausência. Se uma fonte necessária
não puder responder, a API usa 503 fonte_indisponivel; não grave isso como
“empresa inexistente”.
Quadro societário
Na expansãosocios, a Aurora fornece qualificação, data de entrada e vigência
observada. A ficha inclui até 100 linhas; se houver mais, sociosResumo.proximo
aponta para o endpoint paginado de empresas.
Constar no quadro societário é o que o registro afirma — não é prova de
controle ou titularidade.
vigente significa presença na carga observada, não
uma data formal de saída. Nome igual pode ser outra pessoa.503. A resposta usa
Cache-Control: private, no-store.
Endereço
vizinhos sozinho não indica fachada. O sinal está em comSocioComum e
comContratoPublico: prédio comercial pode ter muitas empresas e zerar ambos.Sanções e processos
Cada linha trazevidencia:
decisao: ato publicado por uma autoridade;acusacao: processo em aberto, não condenação.
evidencia junto da linha.
Ficha de pessoa
GET /api/v1/entidades/***000000**::NOME devolve sociedades, candidaturas e
mandatos. Todo acesso é registrado. Uma pessoa sem vínculos devolve 200 com
listas vazias; isso não significa que a API confirmou a existência civil dela.