TF Fiscal

APIs principais

Documentos recebidos e DistDFe

8 endpoints

A Manifestação do Destinatário permite que o destinatário de uma NF-e se posicione formalmente sobre uma nota fiscal emitida contra seu CNPJ. São 4 tipos de eventos previstos pelo Fisco, todos com base legal definida.

Tipos de Evento

CódigoNomeSignificadoJustificativa
210210 Ciência da Operação O destinatário tomou conhecimento da NF-e, mas ainda não confirmou nem rejeitou. Geralmente o primeiro evento dado, requisito para baixar o XML completo via DistDFe. Não obrigatória
210200 Confirmação da Operação O destinatário confirma que a operação aconteceu e a mercadoria/serviço foi recebida. Evento final, comprova recebimento. Não obrigatória
210220 Desconhecimento da Operação O destinatário declara que NÃO reconhece a operação (suspeita de fraude, uso indevido do CNPJ, etc). Obrigatória (15-255 chars)
210240 Operação Não Realizada O destinatário reconhece a operação mas declara que ela NÃO se concretizou (devolução, recusa de recebimento, etc). Obrigatória (15-255 chars)
Regra de sequência: Após dar Ciência (210210), pode-se enviar Confirmação (210200) OU Desconhecimento (210220) OU Não Realizada (210240). Confirmação/Desconhecimento/Não Realizada são estados finais — não podem ser sobrepostos.
Atenção: O CNPJ enviado no campo cnpj deve ser o do destinatário da NF-e (quem está manifestando) e deve estar cadastrado no sistema vinculado ao token usado. Caso contrário o Fisco retorna a rejeição "O autor do evento diverge do destinatário da NF-e".

Códigos cStat de Retorno

cStatSignificado
135✅ Evento registrado com sucesso
573✅ Duplicidade de evento — já registrado anteriormente (tratado como sucesso)
236❌ Chave de acesso inválida
491❌ Manifestação já registrada — não pode sobrescrever estado final
596❌ CNPJ destinatário diverge do informado
656❌ Consumo indevido (rate limit)

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
chavestringSimChave de acesso da NF-e — 44 dígitos
cnpjstringSimCNPJ do destinatário (quem manifesta) — 14 dígitos, sem formatação. Deve estar cadastrado no sistema
tipo_eventointSimCódigo do evento: 210200, 210210, 210220 ou 210240
justificativastringCondicionalObrigatória para 210220 e 210240. Deve ter entre 15 e 255 caracteres. Ignorada para 210200 e 210210
Sequência (nSeqEvento): calculada automaticamente. Para a mesma combinação (cnpj + chave + tipo_evento) é incrementada a cada chamada — assim duplicatas retornam cStat: 573 e são gravadas sem erro.

Campos da Resposta

CampoTipoDescrição
idstringObjectId interno do registro da manifestação (usado em /get_xml)
chavestringChave de acesso da NF-e manifestada
cnpjstringCNPJ do destinatário que manifestou
tipo_eventointCódigo do evento enviado (210200/210210/210220/210240)
desc_eventostringDescrição textual do evento
nProtstringNúmero do protocolo Fisco — comprovante do evento
cStatintCódigo de status Fisco. 135 = registrado, 573 = duplicidade (também aceito)
xMotivostringMensagem descritiva do retorno Fisco
nSeqEventointSequência do evento atribuída automaticamente
xml_urlstringURL pública do XML do procEvento (assinado e protocolado) armazenado no OSS
POST/api/invoice/manifest/list

Listar manifestações

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
cnpjstringNãoFiltra por CNPJ do destinatário. Se omitido, lista de todos os CNPJs do usuário
chavestringNãoFiltra por chave NF-e específica (44 dígitos)
start_create_timestring/longNãoData inicial da criação. Aceita formatos: "dd/MM/yyyy", "yyyy-MM-dd", "dd/MM/yyyy HH:mm:ss" ou Unix timestamp em segundos. Considera 00:00:00 UTC se só data
end_create_timestring/longNãoData final da criação. Mesmo formato. Se só data, considera 23:59:59.999 UTC
pageintNãoNúmero da página (default 1)
page_sizeintNãoItens por página (default 20, máximo 100)

Campos da Resposta

CampoTipoDescrição
totalintTotal de registros que atendem aos filtros (independente de paginação)
pageintPágina atual retornada
page_sizeintTamanho da página retornada
list[].idstringObjectId interno do registro
list[].chavestringChave de acesso da NF-e manifestada
list[].cnpjstringCNPJ destinatário que manifestou
list[].tipo_eventointCódigo do evento (210200/210210/210220/210240)
list[].desc_eventostringDescrição textual do evento
list[].justificativastringJustificativa enviada (preenchido apenas para 210220/210240)
list[].nProtstringProtocolo Fisco do evento
list[].nSeqEventointSequência do evento
list[].cStatintCódigo de status Fisco
list[].xMotivostringMensagem descritiva do retorno Fisco
list[].xml_urlstringURL pública do XML do procEvento no OSS
list[].createstringData/hora UTC do registro (formato yyyy-MM-dd HH:mm:ss)
Ordenação: registros são retornados do mais recente para o mais antigo (por create decrescente).
POST/api/invoice/manifest/get_xml

Obter XML da manifestação

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
idstringSimObjectId da manifestação — retornado em /manifest ou /manifest/list

Erros Comuns

MensagemCausa
id inválidoValor não é um ObjectId válido
manifestação não encontradaObjectId existe mas não pertence ao usuário do token, ou foi excluído

Permite consultar e baixar NFes e eventos destinados ao seu CNPJ via o serviço NFeDistribuicaoDFe do Fisco (Ambiente Nacional). A captura é incremental por NSU (Número Sequencial Único) — cada chamada baixa apenas o que ainda não foi capturado anteriormente.

Tipos de Documento Retornados

doc_typeO que éConteúdo
resNFe Resumo de NFe Metadados básicos (chave, valor, emitente, situação). Vem ANTES da Ciência ser dada — não contém produtos/impostos
procNFe NFe completa autorizada XML completo da NFe (com produtos, impostos, transporte, etc). Só vem APÓS o destinatário dar Ciência (210210) na chave
resEvento Resumo de evento Metadados de evento (chave, tipo, sequência, motivo)
procEvento Evento completo XML completo do evento (CCe, cancelamento, manifestações de outros destinatários sobre suas notas)
Fluxo recomendado:
  1. Chame /received/sync — baixa todos os documentos novos
  2. Liste com /received/list filtrando por doc_type: "resNFe" para ver notas sem Ciência
  3. Para cada chave de interesse, chame /invoice/manifest com tipo_evento: 210210
  4. Chame /received/sync novamente — agora o Fisco devolve os procNFe (XML completo) das chaves manifestadas
  5. Use /received/get_xml para obter a URL do XML e baixar/processar
Rate limit do Fisco: o Fisco permite no máximo 1 chamada DistDFe por hora por CNPJ. Se exceder, retorna cStat: 656 (Consumo Indevido). Em ambiente de homologação a regra é mais permissiva.

Códigos cStat de Retorno do DistDFe

cStatSignificado
137✅ Nenhum documento localizado (fim normal do loop)
138✅ Documentos localizados — loop continua
656❌ Consumo indevido — aguardar 1h e tentar novamente
252❌ Ambiente diferente do informado (produção vs homologação)
280❌ Certificado expirado ou inválido
POST/api/invoice/received/sync

Sincronizar documentos recebidos

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
cnpjstringSimCNPJ da empresa destinatária — 14 dígitos, sem formatação. Deve estar cadastrado no sistema vinculado ao token
max_iterationsintNãoNúmero máximo de chamadas ao Fisco por execução. Cada chamada baixa até 50 documentos. Default 50 (≈2500 docs), máximo 200
Como funciona:
  • Lê o último ultNSU persistido para esse (uid + cnpj)
  • Faz loop chamando o Fisco até cStat ≠ 138 ou atingir max_iterations
  • Descomprime os XMLs (gzip) retornados
  • Persiste cada documento em w_invoice_received com upload do XML no OSS
  • Atualiza ultNSU e maxNSU em w_invoice_received_sync
  • Deduplica por (uid + cnpj + nsu) — chamadas repetidas não duplicam

Campos da Resposta

CampoTipoDescrição
cnpjstringCNPJ destinatário consultado
ufstringUF do destinatário usada na consulta
initial_nsulongNSU de partida — o último processado antes dessa execução
ult_nsulongNovo último NSU após a sincronização
max_nsulongMaior NSU disponível no Ambiente Nacional no momento da consulta
pendinglongDocumentos ainda pendentes (max_nsu - ult_nsu). Se > 0, chame /sync novamente para baixar o restante
iterationsintQuantas chamadas ao Fisco foram feitas nessa execução
last_cstatintÚltimo cStat retornado pelo Fisco. 137 é fim normal, 656 é rate limit
last_motivostringMensagem descritiva do último retorno Fisco
stats.resNFeintQuantidade de resumos de NFe baixados nessa execução
stats.procNFeintQuantidade de NFes completas baixadas
stats.resEventointQuantidade de resumos de evento baixados
stats.procEventointQuantidade de eventos completos baixados
stats.skippedintDocumentos ignorados (duplicados ou erro de parsing isolado)
Volume inicial: empresas que nunca sincronizaram podem ter centenas a milhares de documentos históricos. A primeira execução pode demorar mais e ser interrompida pelo max_iterations. Verifique pending na resposta — se > 0, chame de novo (respeitando o rate limit).
POST/api/invoice/received/list

Listar documentos recebidos

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
cnpjstringNãoFiltra por CNPJ destinatário (o seu CNPJ). Se omitido, lista de todos do usuário
doc_typestringNãoFiltra por tipo de documento: resNFe, procNFe, resEvento ou procEvento
chavestringNãoFiltra por chave de acesso (44 dígitos)
emitente_cnpjstringNãoFiltra por CNPJ do emitente da NFe (fornecedor)
start_create_timestring/longNãoData inicial. Aceita "dd/MM/yyyy", ISO ou Unix timestamp
end_create_timestring/longNãoData final. Mesmo formato
pageintNãoNúmero da página (default 1)
page_sizeintNãoItens por página (default 20, máximo 100)

Campos da Resposta

CampoTipoDescrição
totalintTotal de registros que atendem aos filtros
pageintPágina atual
page_sizeintTamanho da página
list[].idstringObjectId interno (use em /received/get_xml)
list[].nsulongNSU atribuído pelo Fisco a este documento
list[].doc_typestringTipo do documento: resNFe, procNFe, resEvento, procEvento
list[].schemastringSchema do documento (ex: resNFe_v1.01.xsd)
list[].chavestringChave de acesso da NF-e (44 dígitos)
list[].cnpj_destinatariostringCNPJ destinatário (o seu CNPJ)
list[].emitente_cnpjstringCNPJ do emitente da NFe (fornecedor)
list[].emitente_nomestringRazão social do emitente
list[].valordecimalValor total da NFe (vNF)
list[].dh_emistringData/hora de emissão da NFe
list[].serieintSérie da NFe (preenchido apenas em procNFe)
list[].numberlongNúmero da NFe (preenchido apenas em procNFe)
list[].tp_nfintTipo da operação: 0=Entrada, 1=Saída (na ótica do emitente)
list[].c_sit_nfeintSituação da NFe (preenchido em resNFe): 1=Autorizada, 2=Denegada, 3=Cancelada
list[].tp_eventointCódigo do evento (preenchido em resEvento/procEvento). Ex: 110110=CCe, 110111=Cancelamento, 210210=Ciência
list[].desc_eventostringDescrição textual do evento
list[].n_seq_eventointSequência do evento
list[].dh_eventostringData/hora do evento (eventos)
list[].xml_urlstringURL pública do XML do documento no OSS
list[].createstringData/hora UTC da captura
Ordenação: registros são retornados por NSU decrescente (mais recente primeiro).
POST/api/invoice/received/get_xml

Obter XML do documento recebido

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
idstringSimObjectId do documento — retornado em /received/list
Sobre o XML retornado:
  • resNFe — XML é apenas o resumo, NÃO contém produtos/impostos. Use para auditoria/triagem antes de manifestar Ciência
  • procNFe — XML completo e assinado, equivalente ao gerado pela emissão. Pronto para importar no ERP do cliente
  • procEvento — XML do evento completo com assinatura e protocolo

Erros Comuns

MensagemCausa
id inválidoValor não é um ObjectId válido
documento recebido não encontradoObjectId existe mas não pertence ao usuário do token
POST/api/invoice/received/get_prod

Consultar produtos da NF-e recebida

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
chavestringSimChave de acesso de 44 dígitos da NF-e (modelo 55). O dígito verificador é conferido antes de consultar a SEFAZ
ciencia_notaboolNãoPadrão false. Com true, se a SEFAZ ainda não liberar o XML completo, o endpoint registra a Ciência da Operação (evento 210210) com o certificado da empresa e consulta de novo
ambienteintNão1 produção (padrão) ou 2 homologação

Campos da Resposta

CampoTipoDescrição
chavestringChave de acesso consultada
total_itensnumberQuantidade de itens da nota
itensarrayUm objeto por item (det) da NF-e
itens[].nItemnumberNúmero do item dentro da nota
itens[].prodobjectGrupo prod do leiaute da NF-e, com os nomes originais das tags. Quantidades e valores vêm como número; códigos como cProd, NCM e cEAN vêm como texto, preservando zeros à esquerda. Tags que se repetem no leiaute (NVE, DI, detExport, rastro) vêm sempre como lista
itens[].infAdProdstringInformação adicional do item, quando houver
Como a SEFAZ entrega o XML
  • A empresa destinatária vem do token; não envie CNPJ no corpo.
  • A consulta usa a distribuição de documentos (DistDFe) no Ambiente Nacional, com o certificado da própria empresa.
  • Sem manifestação, a SEFAZ devolve apenas o resumo, sem itens. Use ciencia_nota: true para liberar o XML completo.
  • A Ciência apenas declara conhecimento da nota: não confirma o recebimento da mercadoria nem impede o cancelamento pelo emitente.
  • Nota recém-autorizada pode levar horas até o Ambiente Nacional distribuí-la. Nesse intervalo a resposta é nota não localizada.
  • Nota emitida pela própria empresa não é distribuída a ela; consulte com o token da empresa destinatária.
  • A consulta não grava nada. Apenas a Ciência, quando acionada, registra um evento na SEFAZ.

Erros Comuns

MensagemCausa
Chave inserida inválida / 发票密钥无效Chave sem 44 dígitos, com caractere não numérico ou com dígito verificador incorreto
Apenas NF-e modelo 55 pode ser consultada pela chaveA chave é de NFC-e (modelo 65), que a SEFAZ não distribui
empresa não encontrada para este tokenO token não está vinculado a nenhuma empresa cadastrada
empresa não possui certificado configuradoA empresa não tem certificado A1 válido no cadastro
nenhum documento localizado para esta chave e este CNPJ...O Ambiente Nacional ainda não distribuiu a nota, o ambiente é outro, ou a empresa não é a destinatária
esta nota foi emitida por este CNPJ e a SEFAZ não a distribui ao próprio emitenteConsulta de nota de saída com o token de quem a emitiu (SEFAZ 641)
SEFAZ devolveu apenas o resumo da nota (sem itens)...Nota ainda sem Ciência da Operação; chame com ciencia_nota=true
consumo indevido: a SEFAZ bloqueou consultas repetidasLimite da SEFAZ por CNPJ; aguarde antes de tentar de novo
Quando a flag ciencia_nota provoca o envio ou encontra uma Ciência já registrada, a resposta de erro traz data.ciencia com o resultado do evento. Nos demais erros a resposta tem apenas success e message.
POST/api/invoice/received/get_sync_status

Consultar status da sincronização

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Campos

CampoTipoObrigatórioDescrição
cnpjstringSimCNPJ da empresa destinatária — 14 dígitos, sem formatação

Campos da Resposta

CampoTipoDescrição
cnpjstringCNPJ consultado
ufstringUF do destinatário usada na última sincronização (ausente se nunca sincronizou)
ult_nsulongÚltimo NSU processado. 0 = nunca sincronizou
max_nsulongMaior NSU disponível no Fisco na última sincronização
pendinglongDocumentos pendentes (max_nsu - ult_nsu). Se > 0, há novos documentos no Fisco
last_syncstringData/hora UTC da última sincronização bem-sucedida. null se nunca sincronizou
Uso típico: chame esse endpoint antes de /received/sync para decidir se precisa chamar o Fisco. Esse endpoint não consome o rate limit do Fisco — só lê o estado local do MongoDB.