FiscalAPI
Certidões Federais

Consultar CND Federal (RFB+PGFN)

Devolve a Certidão de Regularidade Fiscal relativa aos Tributos Federais e a Dívida Ativa da União — a que ainda vale ou uma emitida na hora.

GET /api/consultar-cnd-federal

Devolve a Certidão Negativa de Débitos relativos aos Tributos Federais e a Dívida Ativa da União, emitida conjuntamente pela Receita Federal (RFB) e pela Procuradoria-Geral da Fazenda Nacional (PGFN). A certidão vale 180 dias a partir da emissão e é aceita para o estabelecimento matriz e suas filiais.

Como funciona:

  • Já existe certidão válida por mais de 3 dias: a API devolve essa certidão, com o PDF oficial (modo: "consulta"). Nada é emitido.
  • Não existe, ou a existente vence em até 3 dias: a API emite uma certidão nova na Receita e devolve o PDF (modo: "emissao").
  • emitir_nova=true: a API sempre emite uma certidão nova, mesmo que já exista uma válida.

Por enquanto, somente CNPJ. A Receita exige a data de nascimento para emitir a certidão de pessoa física, e este endpoint ainda não recebe esse dado: consultas por cpf voltam status: "erro", sem consumir crédito.

Autenticação

Envie sua chave no header X-API-Key. Veja Autenticação para detalhes.

Parâmetros de consulta

Informe o parâmetro cnpj. Se cpf e cnpj forem enviados juntos, cnpj tem precedência.

NameTypeRequiredDescription
cnpjstringSimCNPJ do contribuinte (somente números, 14 dígitos).
emitir_novabooleanNãotrue emite sempre uma certidão nova, sem usar a que já existe. Padrão: false.

Exemplos de código

curl -X GET "https://api.fiscalapi.com.br/api/consultar-cnd-federal?cnpj=12345678000199" \
  -H "X-API-Key: fapi_sua_chave_aqui"
const response = await fetch(
  "https://api.fiscalapi.com.br/api/consultar-cnd-federal?cnpj=12345678000199",
  { headers: { "X-API-Key": "fapi_sua_chave_aqui" } }
);
const data = await response.json();
console.log(data.result.status, data.result.modo);
import requests

response = requests.get(
    "https://api.fiscalapi.com.br/api/consultar-cnd-federal",
    headers={"X-API-Key": "fapi_sua_chave_aqui"},
    params={"cnpj": "12345678000199"},
)
data = response.json()
print(data["result"]["status"], data["result"]["modo"])
$response = Http::withHeaders([
    'X-API-Key' => 'fapi_sua_chave_aqui',
])->get('https://api.fiscalapi.com.br/api/consultar-cnd-federal', [
    'cnpj' => '12345678000199',
]);
$data = $response->json();
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "fapi_sua_chave_aqui");
var response = await client.GetAsync(
    "https://api.fiscalapi.com.br/api/consultar-cnd-federal?cnpj=12345678000199"
);
var data = await response.Content.ReadAsStringAsync();

Emitir sempre uma certidão nova

curl -X GET "https://api.fiscalapi.com.br/api/consultar-cnd-federal?cnpj=12345678000199&emitir_nova=true" \
  -H "X-API-Key: fapi_sua_chave_aqui"

Chamadas repetidas com emitir_nova=true para o mesmo CNPJ em até 15 minutos devolvem a mesma emissão, sem emitir outra. Se a Receita já emitiu uma certidão para o CNPJ no mesmo dia, ela pode devolver o mesmo código de controle.

Resposta

Campos de nível superior

CampoTipoDescrição
request_idstringIdentificador único da requisição (UUID).
documentstringDocumento consultado.
document_typestringTipo do documento: cnpj ou cpf.
cachedbooleantrue quando a certidão já estava guardada. A mesma certidão é devolvida enquanto valer por mais de 3 dias.
source_statusobjectStatus da fonte (status, error_code, error_message).
resultobjectDados da certidão. Vem null quando source_status.status não é success.

Campos de result

CampoTipoDescrição
tipostringSempre cnd_federal neste endpoint.
statusstringStatus normalizado da certidão. Veja tabela abaixo.
status_rawstringTítulo da certidão ou mensagem da Receita.
modostringconsulta: certidão que já existia. emissao: certidão emitida nesta consulta.
validadestringData de validade (DD/MM/AAAA).
validade_isostringData de validade em ISO 8601 (YYYY-MM-DD).
emissaostringData de emissão (DD/MM/AAAA).
emissao_isostringData de emissão em ISO 8601 (YYYY-MM-DD).
protocolostringCódigo de controle da certidão, no formato XXXX.XXXX.XXXX.XXXX.
pdf_base64stringPDF oficial da certidão em base64. Vazio quando a Receita não emite (pendências).
url_verificacaostringReservado; hoje vem vazio. A autenticidade é conferida com o código de controle nos sites da Receita Federal ou da PGFN.
orgaostringSempre RFB+PGFN neste endpoint.

Valores de status

StatusSignificado
negativaNão constam pendências relativas a tributos federais e a dívida ativa da União. Situação regular.
positivaHá pendências. Inclui o caso em que a Receita não emite a certidão pela internet por pendência ou situação cadastral: vem sem PDF, com a mensagem da Receita em status_raw.
positiva_com_efeitos_de_negativaHá débitos, mas suspensos ou garantidos (parcelamento, decisão judicial etc.). Tem os mesmos efeitos da certidão negativa.
nao_contribuinteO CNPJ não está cadastrado na Receita Federal.
erroA Receita recusou o pedido (ex.: CNPJ de filial — a certidão sai para a matriz) ou o PDF não pode ser validado. A mensagem vem em status_raw. Não consome crédito.

Exemplo de resposta (certidão que já existia)

{
  "request_id": "uuid",
  "document": "12345678000199",
  "document_type": "cnpj",
  "cached": false,
  "source_status": {
    "status": "success",
    "error_code": "",
    "error_message": ""
  },
  "result": {
    "tipo": "cnd_federal",
    "status": "negativa",
    "status_raw": "Certidao Negativa de Debitos relativos aos Tributos Federais e a Divida Ativa da Uniao",
    "modo": "consulta",
    "validade": "13/03/2027",
    "validade_iso": "2027-03-13",
    "emissao": "14/09/2026",
    "emissao_iso": "2026-09-14",
    "protocolo": "1A2B.3C4D.5E6F.7A8B",
    "pdf_base64": "JVBERi0xLjQK...",
    "url_verificacao": "",
    "orgao": "RFB+PGFN"
  }
}

O status, as datas e o código de controle são lidos do próprio PDF da Receita, e a certidão só é entregue se o PDF declarar o CNPJ consultado. Quando isso não dá para confirmar, a API responde status: "erro" em vez de presumir regularidade.

Quando a emissão ainda está em andamento

A consulta pode levar até cerca de 60 segundos. Se a certidão não ficar pronta nesse tempo, a API responde HTTP 200 com error_code: "EM_PROCESSAMENTO" e o header Retry-After (em segundos). A emissão continua em segundo plano: consulte de novo depois do tempo indicado para receber a certidão. Consultar de novo não dispara outra emissão e essa resposta não consome crédito.

HTTP/1.1 200 OK
Retry-After: 45
{
  "request_id": "uuid",
  "document": "12345678000199",
  "document_type": "cnpj",
  "cached": false,
  "source_status": {
    "status": "error",
    "error_code": "EM_PROCESSAMENTO",
    "error_message": "A emissao desta certidao esta em andamento. Consulte novamente em cerca de 45 s."
  },
  "result": null
}
import time
import requests

def consultar_cnd_federal(cnpj: str) -> dict:
    while True:
        response = requests.get(
            "https://api.fiscalapi.com.br/api/consultar-cnd-federal",
            headers={"X-API-Key": "fapi_sua_chave_aqui"},
            params={"cnpj": cnpj},
        )
        data = response.json()
        if data["source_status"].get("error_code") != "EM_PROCESSAMENTO":
            return data
        time.sleep(int(response.headers.get("Retry-After", 30)))

Consumo de créditos

Cada consulta que devolve a certidão consome 1 crédito, seja ela uma certidão que já existia ou uma emitida na hora — inclusive com emitir_nova=true.

Não consomem crédito: status: "erro", EM_PROCESSAMENTO, os demais códigos de source_status e os erros HTTP abaixo.

Códigos de erro

Em source_status (HTTP 200)

CódigoDescrição
EM_PROCESSAMENTOA certidão ainda está sendo emitida. Consulte de novo depois do Retry-After.
PROVIDER_ERRORA Receita Federal não concluiu a emissão agora. Consulte novamente em alguns minutos.
CNPJ_INVALIDO / CPF_INVALIDODocumento com formato inválido ou dígito verificador que não confere.

HTTP

CódigoHTTP StatusDescrição
PARAMETRO_AUSENTE400Nenhum documento (cnpj ou cpf) foi informado.
LIMITE_ATINGIDO402Cota mensal do plano esgotada (e sem créditos extras).
RATE_LIMIT_EXCEEDED429Rate limit do plano excedido.
ERRO_INTERNO500Erro interno no servidor.

Esta pagina foi util?

On this page