Dados B3 Auditoria API
The Auditoria API from Dados B3 — 10 operation(s) for auditoria.
The Auditoria API from Dados B3 — 10 operation(s) for auditoria.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/dadosb3-com:dadosb3-com-auditoria-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Dados B3 Auditoria API
description: 'Dados fundamentalistas de companhias abertas brasileiras com metodologia 100% pública e invariantes de dado publicados. Fontes: CVM (dados abertos, ODbL) e B3 (COTAHIST fim-de-dia). Todo número carrega a conta CVM de origem; valor duvidoso carrega flag, nunca estimativa escondida.'
version: 0.1.0
tags:
- name: Auditoria
paths:
/auditoria/dep_amort/{cd_cvm}/{ano}:
get:
summary: Auditoria Dep Amort
description: 'TODA linha candidata a D&A, com o rótulo e a DECISÃO — inclusive as
excluídas.
★ SEM ISTO A REGRA NOVA NÃO ERA FALSIFICÁVEL DE FORA (30/08/2026).
Publicávamos as contas que ENTRARAM no D&A (`onde_procurar`) e nada sobre
as que ficaram de FORA. Um auditor querendo atacar a exclusão de custo de
dívida — que mudou 232 EBITDAs — não tinha como ver o que foi excluído
nem por quê.
A regra casa NATUREZA do rótulo, não código: o mesmo `6.01.01.11` é
"Amortização do custo de transação" na Suzano (sai) e "amortização de
stand" na Cyrela (fica). Uma regra assim só se defende mostrando o rótulo
que a acionou — e só se ATACA da mesma forma.
O sexto auditor apontou AMOB3, BPAC11 e MDNE3 como alvos. Conferido: nas
duas primeiras a regra NEM DISPARA (linha única, "Depreciação e
amortização"), então atacar ali não falsifica nada. Esta rota existe para
ele achar sozinho os casos onde ela dispara, em vez de depender de nós
para indicar onde procurar.'
operationId: auditoria_dep_amort_auditoria_dep_amort__cd_cvm___ano__get
parameters:
- name: cd_cvm
in: path
required: true
schema:
type: integer
title: Cd Cvm
- name: ano
in: path
required: true
schema:
type: integer
title: Ano
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/universo:
get:
summary: Auditoria Universo
description: 'As CHAVES do universo sorteável, para o auditor ordenar por conta.
★ OBJEÇÃO DO SEXTO AUDITOR EXTERNO, e ela procede (30/08/2026). Palavras
dele, depois de conferir os 10 sample_score e ver que todos batiam:
"isso prova que a chave 847231 reproduz os scores apresentados. NÃO
prova sozinho que esses são os 10 menores de todo o universo de
63.281, porque eu não recebi o universo completo para fazer a
ordenação independente."
Exato, e a distinção é fina: conferir o score de cada caso publicado
detecta CHAVE INVENTADA, mas não detecta OMISSÃO. Um caso com score menor
que os publicados poderia ter sido deixado de fora, e nada no que ele
recebeu apontaria — a prova de que a amostra são "os N menores" dependia
da nossa palavra.
Com esta rota a auditoria fecha sem nós: baixe as chaves, calcule o score
de TODAS, ordene, e compare as N primeiras com o que publicamos.
Sai só `cd_cvm|exercicio|indicador`, que é exatamente o que o hash come —
nenhum valor. O dado continua atrás do gate comercial; o que abre aqui é a
POPULAÇÃO, sem a qual "amostra aleatória" é adjetivo nosso.'
operationId: auditoria_universo_auditoria_universo_get
responses:
'200':
description: Successful Response
content:
text/plain:
schema:
type: string
tags:
- Auditoria
/auditoria/sementes:
get:
summary: Auditoria Sementes
description: Sementes pré-formadas — para o auditor cuja ferramenta não monta URL.
operationId: auditoria_sementes_auditoria_sementes_get
parameters:
- name: lang
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Lang
- name: accept-language
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Accept-Language
responses:
'200':
description: Successful Response
content:
text/html:
schema:
type: string
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/historico:
get:
summary: Auditoria Historico
description: 'Histórico de auditorias — os erros ficam, e é esse o ponto.
★ A INTUIÇÃO COMERCIAL PEDE O CONTRÁRIO DISTO. O reflexo é publicar
"nenhum erro encontrado" e deixar os achados morrerem no chat de quem
auditou. Só que a frase "confia, a base é boa" não vale nada vinda de quem
vende a base; "olha o histórico, inclusive o que achamos de errado e
consertamos" vale, porque quem esconde erro não publica tabela de erros.
★ A COLUNA `executor` É A MAIS IMPORTANTE DA PÁGINA. Auditoria que nós
mesmos rodamos vale menos que a de terceiro, e somar as duas numa contagem
só inflaria o resultado exatamente onde a credibilidade se decide. Um
revisor externo já recusou usar o /desafio como amostra independente,
chamando de auditoria circular — estava certo, e a separação aqui é
consequência daquela crítica.
★ `conferidos` NÃO é o tamanho da amostra. Um revisor recebeu 75 casos e
conseguiu refazer 5; registrar 75 seria a mentira confortável, e foi ele
mesmo quem se recusou a cometê-la. As duas colunas existem separadas por
isso.
Nenhuma contagem é escrita à mão: tudo sai do arquivo (TR06 proíbe, e já
me pegou duas vezes escrevendo número dentro do próprio texto que explica
a regra).'
operationId: auditoria_historico_auditoria_historico_get
parameters:
- name: lang
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Lang
- name: accept-language
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Accept-Language
responses:
'200':
description: Successful Response
content:
text/html:
schema:
type: string
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria:
get:
summary: Auditoria Indice
description: 'Porta de entrada da auditoria aleatória, em HTML e com links prontos.
★ QUARTO REVISOR EXTERNO SEGUIDO QUE NÃO CONSEGUIU TESTAR AO VIVO
(24/08/2026) — e pela quarta vez a causa era nossa, não a ferramenta dele.
Antes foi o /mcp/ devolvendo 406 no navegador. Agora: o mecanismo de
navegação dele recusa URL com query string não indexada, então
`/auditoria/random?seed=X&n=25` era inalcançável, mesmo com o site inteiro
de pé. Ele foi rigoroso e relatou "0 de 75 conferidos — inconclusivo por
limitação de acesso", em vez de dizer que a base passou.
O padrão já é claro o bastante para virar regra: quando três, quatro
revisores tropeçam no mesmo degrau, o degrau é nosso. Endpoint que só
funciona para quem chama do jeito que nós imaginamos não é público — é
público para nós.
Conserto dele, adotado inteiro: caminho em vez de query
(`/auditoria/random/184731/25`) e uma página com links clicáveis.'
operationId: auditoria_indice_auditoria_get
parameters:
- name: lang
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Lang
- name: accept-language
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Accept-Language
responses:
'200':
description: Successful Response
content:
text/html:
schema:
type: string
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/random/{seed}/{n}:
get:
summary: Auditoria Random Caminho
description: 'A MESMA amostra da rota com query string, com a semente no caminho.
★ `/auditoria/amostra` é o nome honesto, e `/random` fica como apelido.
O revisor externo apontou que "random" descreve mal o que acontece: não há
aleatoriedade nenhuma aqui, e sim AMOSTRAGEM PSEUDOALEATÓRIA
DETERMINÍSTICA — mesma semente + mesma população + mesmo esquema = mesma
amostra, sempre. Chamar de "random" convida o auditor a esperar variação
onde a garantia é o oposto. As duas rotas seguem servindo o mesmo,
porque quebrar a URL já divulgada seria trocar um defeito de nome por um
link morto.
Existe porque query string não indexada é barreira real para as
ferramentas de navegação de quem audita. Delega para a mesma função:
duas portas, um sorteio — e o TR24 exige que devolvam exatamente a mesma
amostra, senão passariam a existir "duas versões" da mesma semente, que é
pior que não ter a segunda porta.'
operationId: auditoria_random_caminho_auditoria_random__seed___n__get
parameters:
- name: seed
in: path
required: true
schema:
type: integer
title: Seed
- name: n
in: path
required: true
schema:
type: integer
title: N
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/random/{seed}:
get:
summary: Auditoria Random Caminho
description: 'A MESMA amostra da rota com query string, com a semente no caminho.
★ `/auditoria/amostra` é o nome honesto, e `/random` fica como apelido.
O revisor externo apontou que "random" descreve mal o que acontece: não há
aleatoriedade nenhuma aqui, e sim AMOSTRAGEM PSEUDOALEATÓRIA
DETERMINÍSTICA — mesma semente + mesma população + mesmo esquema = mesma
amostra, sempre. Chamar de "random" convida o auditor a esperar variação
onde a garantia é o oposto. As duas rotas seguem servindo o mesmo,
porque quebrar a URL já divulgada seria trocar um defeito de nome por um
link morto.
Existe porque query string não indexada é barreira real para as
ferramentas de navegação de quem audita. Delega para a mesma função:
duas portas, um sorteio — e o TR24 exige que devolvam exatamente a mesma
amostra, senão passariam a existir "duas versões" da mesma semente, que é
pior que não ter a segunda porta.'
operationId: auditoria_random_caminho_auditoria_random__seed__get
parameters:
- name: seed
in: path
required: true
schema:
type: integer
title: Seed
- name: n
in: query
required: false
schema:
type: integer
default: 10
title: N
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/amostra/{seed}/{n}:
get:
summary: Auditoria Random Caminho
description: 'A MESMA amostra da rota com query string, com a semente no caminho.
★ `/auditoria/amostra` é o nome honesto, e `/random` fica como apelido.
O revisor externo apontou que "random" descreve mal o que acontece: não há
aleatoriedade nenhuma aqui, e sim AMOSTRAGEM PSEUDOALEATÓRIA
DETERMINÍSTICA — mesma semente + mesma população + mesmo esquema = mesma
amostra, sempre. Chamar de "random" convida o auditor a esperar variação
onde a garantia é o oposto. As duas rotas seguem servindo o mesmo,
porque quebrar a URL já divulgada seria trocar um defeito de nome por um
link morto.
Existe porque query string não indexada é barreira real para as
ferramentas de navegação de quem audita. Delega para a mesma função:
duas portas, um sorteio — e o TR24 exige que devolvam exatamente a mesma
amostra, senão passariam a existir "duas versões" da mesma semente, que é
pior que não ter a segunda porta.'
operationId: auditoria_random_caminho_auditoria_amostra__seed___n__get
parameters:
- name: seed
in: path
required: true
schema:
type: integer
title: Seed
- name: n
in: path
required: true
schema:
type: integer
title: N
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/amostra/{seed}:
get:
summary: Auditoria Random Caminho
description: 'A MESMA amostra da rota com query string, com a semente no caminho.
★ `/auditoria/amostra` é o nome honesto, e `/random` fica como apelido.
O revisor externo apontou que "random" descreve mal o que acontece: não há
aleatoriedade nenhuma aqui, e sim AMOSTRAGEM PSEUDOALEATÓRIA
DETERMINÍSTICA — mesma semente + mesma população + mesmo esquema = mesma
amostra, sempre. Chamar de "random" convida o auditor a esperar variação
onde a garantia é o oposto. As duas rotas seguem servindo o mesmo,
porque quebrar a URL já divulgada seria trocar um defeito de nome por um
link morto.
Existe porque query string não indexada é barreira real para as
ferramentas de navegação de quem audita. Delega para a mesma função:
duas portas, um sorteio — e o TR24 exige que devolvam exatamente a mesma
amostra, senão passariam a existir "duas versões" da mesma semente, que é
pior que não ter a segunda porta.'
operationId: auditoria_random_caminho_auditoria_amostra__seed__get
parameters:
- name: seed
in: path
required: true
schema:
type: integer
title: Seed
- name: n
in: query
required: false
schema:
type: integer
default: 10
title: N
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
/auditoria/random:
get:
summary: Auditoria Random
description: 'Amostra aleatória de auditoria — a SEMENTE é de quem audita, não nossa.
★ A OBJEÇÃO QUE TRÊS REVISORES EXTERNOS REPETIRAM (24/08/2026): o
/desafio prova que sabemos defender 23 casos ESCOLHIDOS POR NÓS. Não diz
nada sobre a taxa de erro da base. Um deles foi direto: "não pediria que
vocês escolhessem os casos — eu escolheria 100 empresas aleatórias".
Outro recusou usar o /desafio como amostra, chamando de auditoria
circular. Estavam certos.
Aqui a escolha sai das nossas mãos. Você manda a semente, o sorteio é
determinístico, e a mesma semente devolve sempre os mesmos casos — então
o resultado é reproduzível por terceiros e não dá para nós "tentarmos de
novo" até sair uma amostra boa. Cada caso vem com o número publicado, a
conta CVM de onde ele saiu e o arquivo da CVM para refazer.
Sem semente NÃO sorteamos: devolvemos o cardápio. Semente escolhida pelo
servidor destruiria a única propriedade que faz isto valer alguma coisa.
Aberto, sem chave — auditoria que exige cadastro não é auditoria.'
operationId: auditoria_random_auditoria_random_get
parameters:
- name: seed
in: query
required: false
schema:
anyOf:
- type: integer
- type: 'null'
title: Seed
- name: n
in: query
required: false
schema:
type: integer
default: 10
title: N
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Auditoria
components:
schemas:
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
securitySchemes:
ChaveApiNaUrl:
type: apiKey
in: query
name: chave
description: Alternativa ao cabeçalho para clientes que só abrem URL (navegação de IA). Fica no histórico e nos logs de quem a usa.
ChaveApi:
type: apiKey
in: header
name: X-API-Key
description: 'Chave grátis (200 consultas/dia) ou Pro em /assinar. Abertos sem chave (limite por IP): fatos, indicadores, múltiplos e dividendos de qualquer ticker, ficha e ranking de FII. WEGE3, MXRF11, /hoje, /saude e a metodologia são abertos. Exigem chave: as_of, versões, preços, screener, /dump.'