Homologação de fornecedores: certidões automáticas por API
Homologar fornecedor é conferir a regularidade antes de contratar e antes de pagar. As certidões vencem em datas diferentes, e controlar isso em planilha falha. Com a API, o sistema consulta, guarda o PDF e a validade e reconsulta antes de vencer.
Quais certidões#
| Certidão | Órgão | Documento | Validade | Rota |
|---|---|---|---|---|
| CND Federal (tributos federais e Dívida Ativa da União) | Receita Federal e PGFN | CNPJ da matriz; vale para as filiais | 180 dias | /api/consultar-cnd-federal |
| CNDT (débitos trabalhistas) | TST | CPF ou CNPJ; certifica todos os estabelecimentos | 180 dias | /api/consultar-cndt |
| CRF (regularidade no FGTS) | Caixa | CNPJ completo, com os 14 dígitos, ou CPF | Vem no campo validade | /api/consultar-crf-fgts |
| CND estadual (ICMS) | SEFAZ de cada estado | CPF ou CNPJ, por UF | Varia por estado | /api/consultar-cnd?uf=XX |
Todas pedem só o documento e a chave da API, sem certificado digital. Cada uma conta 1 consulta. Consulta com erro não é cobrada.
Para ver tudo de uma vez, GET /api/certidoes-todas traz a CND estadual nos 27 estados, a CNDT, a CND Federal e o CRF numa chamada, por 1 consulta. Ela não traz os PDFs: para guardar o documento, use a rota de cada certidão.
O que cada status quer dizer#
| status | Leitura | Ação sugerida |
|---|---|---|
| negativa | Sem pendências | Homologar |
| positiva_com_efeitos_de_negativa | Há débitos suspensos ou garantidos. Tem os efeitos da negativa | Homologar e registrar |
| positiva | Há pendência | Pedir regularização ao fornecedor |
| nao_contribuinte | CND estadual: sem inscrição estadual naquela UF | Não se aplica naquele estado |
| sem_certidao | CND estadual: o órgão respondeu, mas não emitiu certidão | Pedir a certidão ao fornecedor |
| erro | A certidão não saiu: o órgão não respondeu ou recusou o pedido | Ler status_raw e consultar de novo. Não é cobrada |
Duas situações da CND Federal:
- CNPJ de filial: a Receita emite para a matriz e a resposta vem com
erro. Consulte o CNPJ da matriz. -
EM_PROCESSAMENTO: a emissão está em andamento. A resposta é HTTP 200 com o headerRetry-After. Consulte de novo depois desse tempo. Não é cobrada nem dispara outra emissão.
O código (Python)#
Consulta as quatro certidões de um fornecedor, salva os PDFs e calcula quando renovar:
import base64
import os
import time
from datetime import date, timedelta
from pathlib import Path
import requests
BASE = "https://api.fiscalapi.com.br/api"
CHAVE = os.environ["FISCALAPI_KEY"] # nunca no código-fonte
REGULAR = {"negativa", "positiva_com_efeitos_de_negativa"}
ANTECEDENCIA = timedelta(days=15) # defina com compras
def consultar(rota: str, params: dict, tentativas: int = 4) -> dict:
for _ in range(tentativas):
resp = requests.get(f"{BASE}/{rota}", headers={"X-API-Key": CHAVE}, params=params, timeout=120)
espera = int(resp.headers.get("Retry-After", "60"))
if resp.status_code == 429: # limite por minuto do plano
time.sleep(espera)
continue
if resp.status_code >= 500: # o órgão ou a API não responderam
return {"source_status": {"status": "error", "error_code": f"HTTP {resp.status_code}"}}
resp.raise_for_status() # 400, 402, 403: repetir não resolve
dados = resp.json()
if dados["source_status"]["error_code"] == "EM_PROCESSAMENTO": # CND Federal em emissão
time.sleep(espera)
continue
return dados
return {"source_status": {"status": "error", "error_code": "SEM_RESPOSTA_FINAL"}}
def homologar(cnpj_matriz: str, uf: str, pasta: Path) -> dict:
rotas = {
"cnd_federal": ("consultar-cnd-federal", {"cnpj": cnpj_matriz}),
"cndt": ("consultar-cndt", {"cnpj": cnpj_matriz}),
"crf_fgts": ("consultar-crf-fgts", {"cnpj": cnpj_matriz}),
"cnd_estadual": ("consultar-cnd", {"uf": uf, "cnpj": cnpj_matriz}),
}
resultado = {}
for nome, (rota, params) in rotas.items():
dados = consultar(rota, params)
certidao = dados.get("result")
if dados["source_status"]["status"] != "success" or not certidao:
resultado[nome] = {"situacao": "consultar_de_novo", "motivo": dados["source_status"]["error_code"]}
continue
arquivo = None
if certidao.get("pdf_base64"):
arquivo = pasta / f"{cnpj_matriz}-{nome}-{certidao['emissao_iso'] or date.today()}.pdf"
arquivo.write_bytes(base64.b64decode(certidao["pdf_base64"]))
resultado[nome] = {
"situacao": "regular" if certidao["status"] in REGULAR else certidao["status"],
"validade": certidao["validade_iso"],
"protocolo": certidao["protocolo"],
"pdf": str(arquivo) if arquivo else None,
"request_id": dados["request_id"],
}
validades = [r["validade"] for r in resultado.values() if r.get("validade")]
if validades:
resultado["renovar_em"] = (date.fromisoformat(min(validades)) - ANTECEDENCIA).isoformat()
return resultado Para filial em outro estado, rode a CND estadual com o CNPJ e a UF da filial.
Renovação#
- Agende a próxima rodada em
renovar_em: a data da validade mais curta, menos a antecedência. - CND Federal: a API devolve a certidão vigente enquanto ela valer mais de 3 dias. Para trocar antes, envie
emitir_nova=true. - CNDT: o resultado fica 24 horas em cache. Depois disso, a consulta emite uma certidão nova no TST.
- Bloqueio no pagamento: antes de liberar um pagamento, confira se as certidões guardadas ainda valem. Defina com o financeiro o que fazer com a vencida.
Guarde o PDF#
- Nome do arquivo: CNPJ, certidão e data de emissão, como no código.
- Junto do PDF:
status,validade_iso,protocoloerequest_id. - Autenticidade: confira pelo número no site do órgão.
protocoloé o código de controle da CND Federal, o número da CNDT e o número do CRF. Na CND de MT, o código vem emcodigo_autenticacao.
Perguntas frequentes#
A CND Federal sai para pessoa física? Ainda não pela API: a Receita pede a data de nascimento, e a rota não recebe esse dado. Por CPF, a resposta vem com erro, sem cobrança.
Preciso consultar a CNDT de cada filial? Não. A CNDT certifica a empresa em relação a todos os estabelecimentos, agências e filiais (CLT, art. 642-A, § 3º).
Dá para homologar sem programar? Dá. As mesmas consultas estão no painel. Veja a página de certidões.
Quanto custa? Cada certidão conta 1 consulta. Os quatro documentos de um fornecedor somam 4. Veja os planos.
Fontes#
- Decreto 6.106/2007, art. 2º (validade das certidões federais), Planalto
- CLT, art. 642-A, incluído pela Lei 12.440/2011 (CNDT), Planalto
- Documentação da FiscalAPI: CND Federal, CNDT, CRF/FGTS, CND estadual e todas as certidões
Artigos relacionados#
Consulte dados fiscais via API
Consulte Inscrições Estaduais, CNPJs e Certidões Negativas via API REST. Dados direto da SEFAZ e Receita Federal. Planos a partir de R$ 19,99/mês.
Criar conta →