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.

Documentação

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 ↗
Em construção
POST /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.

8

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
8 campos
status_consulta string

SUCESSO, NAO_ENCONTRADO ou INDISPONIVEL. Alvo sem processo é RESPOSTA, não falha.

total_solicitacoes integer

Quantas solicitações de licenciamento a origem devolveu para o CNPJ.

total_unidades integer

Quantas unidades (endereços/estabelecimentos) aparecem nessas solicitações.

registros[] array

Uma entrada por solicitação, com número, objeto, unidade e situação.

fichas_indisponiveis integer

Atenção: Quantas fichas de detalhe a origem não abriu nesta execução. Maior que zero significa leitura PARCIAL — ver a nota.

fichas_omitidas integer

Quantas fichas ficaram de fora por teto de leitura, para não martelar um servidor público gratuito.

mensagem string

Frase pronta para tela e laudo.

consultado_em datetime

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.

Falar com a gente →