Confira o preço antes de iniciar a pesquisa. Envie POST /v1/orcamento/cetesb-licenciamento com os dados que deseja pesquisar. O orçamento informa o valor e a disponibilidade, sem cobrar.
Companhia Ambiental do Estado de São Paulo (CETESB)
Licenciamento ambiental — CETESB
Solicitações e licenças ambientais de um CNPJ na CETESB, com as unidades e o andamento de cada processo.
Site oficial da fonte ↗/v1/consultas/cetesb-licenciamento
v1
Tempo típico
não medido
Preço a definir
—
Visão geral
Responde "o que esta empresa tem em aberto na CETESB": solicitações de licenciamento, licenças emitidas e as unidades às quais elas pertencem, no estado de São Paulo.
É due diligence ambiental de verdade — a pergunta que a certidão negativa não responde. Uma empresa sem débito fiscal pode ter uma licença vencida, um processo parado ou uma unidade operando sem autorização.
A origem é pública e gratuita. O preço cobre a automação, o parsing das fichas e o arquivamento.
Antes de começar
Cobrança, idempotência e leitura do resultado. Leia antes da primeira chamada.
Custa dinheiro se você ignorar 1
Leitura parcial é declarada, não escondida
Quando fichas_indisponiveis é maior que zero, lemos menos do que a origem tinha. A lista devolvida está certa no que traz, mas não é o retrato completo — e um laudo que afirme "nada pendente" em cima de leitura parcial afirma o que ninguém apurou.
É o mesmo princípio da prova de alcance da Pesquisa Prévia: o número que separa "não existe" de "não conseguimos ver" tem de estar na resposta.
Vale saber antes de integrar 1
Não é certidão
A CETESB não emite documento por esta via. O que volta é a leitura estruturada das telas públicas dela, com a data em que foi feita.
Serve para investigar e para instruir — não para juntar como certidão negativa ambiental, que é outra coisa e a origem não emite aqui.
Contexto 1
CNPJ, não CPF
O licenciamento é do empreendedor pessoa jurídica, e é assim que a fonte é vendida por padrão: alvo pessoa física é recusado na aplicabilidade, antes de cobrar.
Existe um gate interno que libera PF (advocacia.fontes_pf_liberadas) e ele está fechado. Enquanto estiver, integre contando com PJ.
Requisição
Autentique com token no cabeçalho. Parâmetro obrigatório ausente é recusado com
422, antes de qualquer cobrança.
cpf_cnpj
string
obrigatório
CNPJ (14 dígitos) do empreendedor. Com ou sem máscara.
curl -X POST https://api.oficialdata.com.br/v1/consultas/cetesb-licenciamento \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cpf_cnpj": "12345678000190"
}'
O HTTP é sempre 200 quando a requisição chegou.
O resultado real está em code, no corpo — trate
code, nunca o status.
Resposta
Dentro de data[]:
8 campos em 1 blocos.
Campo que a origem não informou volta null —
nunca 0 nem string vazia. Trate
null como dado ausente, não como zero.
data[]
object
SUCESSO, NAO_ENCONTRADO ou INDISPONIVEL. Alvo sem processo é RESPOSTA, não falha.
Quantas solicitações de licenciamento a origem devolveu para o CNPJ.
Quantas unidades (endereços/estabelecimentos) aparecem nessas solicitações.
Uma entrada por solicitação, com número, objeto, unidade e situação.
Atenção: Quantas fichas de detalhe a origem não abriu nesta execução. Maior que zero significa leitura PARCIAL — ver a nota.
Quantas fichas ficaram de fora por teto de leitura, para não martelar um servidor público gratuito.
Frase pronta para tela e laudo.
Quando consultamos a origem, em ISO-8601.
Códigos de erro
O mesmo mapa que o motor usa em produção. Leia as colunas Estorna e Retenta antes de integrar: nem toda falha devolve o dinheiro.
| Classe | Códigos | Significa | Estorna | Retenta |
|---|---|---|---|---|
sucesso |
200 | A origem respondeu e entregou. | — | — |
nao_encontrado |
612 | A origem respondeu: nada consta para este alvo. | Não | Não |
indeterminado |
611 | A origem não conseguiu emitir pela internet. Não é irregularidade. | Não | Não |
erro_participante |
608 619 620 | A origem recusou os DADOS do pedido. | Não | Sim |
retry |
600 605 609 610 613 614 615 618 | Instabilidade momentânea da origem ou do transporte. | Sim | Sim |
fatal |
601 602 603 604 606 607 617 621 622 | Defeito de integração — nosso, não seu. | Sim | Não |
Estorno:
erro_participante é a única
classe que não devolve o dinheiro — nela a origem
respondeu recusando os dados do pedido. Corrija o alvo antes de repetir.
fatal é falha nossa e sempre estorna.
Permanentes: não retente 602 e 603. A fonte sai do ar na hora e a nossa equipe é avisada.
Limites e desempenho
Números medidos em produção. "Não medido" é falta de amostra — nenhum valor aqui é estimativa.
Tempo típico
não medido
p95
não medido
Teto por hora
—
Timeout máximo
—
De onde vem o tempo: cerca de 85% dos ~s típicos é a origem varrendo os cartórios. Dimensione o seu timeout por esse número e não conte com redução.
Sobre o teto: a origem exige sessão única por conta, então os pedidos são serializados. É limite técnico, não cota comercial: acima dele a fila cresce e paralelizar do seu lado não acelera. Para volume maior, combine antes.
Versionamento
O contrato de resposta é v1,
e a versão viaja em header.api_version
em toda resposta.
- Campo novo opcional pode entrar a qualquer momento e não muda a versão. Seu parser precisa ignorar campo que não conhece.
- Remover campo, renomear campo ou mudar tipo é versão nova, publicada em paralelo, com prazo de desligamento anunciado da anterior.
- Nunca alteramos o significado de um campo existente mantendo o nome. Se o significado muda, o nome muda junto.
Vai integrar?
Diga o volume que você espera e em quais UFs. A ordem de liberação segue a demanda.