TF Fiscal
Documentação

Verificação de NF-e

Verificar XML

Envia o XML da NF-e; devolve o veredito de nível 1 e os dados da nota e inicia a verificação na SEFAZ.

POST/openapi/v3/consultas/nf-e/xml
Requer os cabeçalhos de assinatura token, timestamp e sign, veja Autenticação.

Envia o XML bruto da NF-e. Devolve de forma síncrona o veredito de nível 1 e os dados da nota já interpretados; se o nível 1 for aprovado, a verificação de nível 2 na SEFAZ começa automaticamente e o veredito final chega pelo webhook invoice.verify.completed (veja Verificação de NF-e).

HTTP 200 significa que a requisição foi aceita, não que a nota foi aprovada. Um XML bem formado que reprova na validação também devolve 200; o veredito está no bloco validation. Nunca decida a validade pelo status HTTP.

Cabeçalhos

Content-Type*
stringTipo do corpo
forceRevalidate
boolNova verificação forçada

* Campo obrigatório

200
Requisição aceita. Dados da nota interpretados mais o bloco validation com o veredito de nível 1. Inclui os casos em que a validação reprovou: verifique validation.validationStatus e validation.errors.
tipo
stringTipo de documento
modelo
stringModelo do documento
status
stringSituação fiscal
statusDescription
stringDescrição do status
ambienteEmissao
stringAmbiente de emissão
numero
stringNúmero da nota
serie
stringSérie
dataEmissao
stringData de emissão
tipoOperacao
stringTipo de operação (tpNF), o sentido da mercadoria visto pelo emitente
chaveAcesso
stringChave de acesso
objectEmitente
objectDestinatário
arrayItens
dataAutorizacao
stringData de autorização
objectProtocolo de autorização
valorTotal
numberValor líquido da nota
objectVeredito de nível 1

  • Preferível: o documento completo autorizado pela SEFAZ, com o protocolo de autorização. Uma nota sem o protocolo também é aceita: gera um aviso PROTOCOL_MISSING, mas é processada normalmente.
  • Limites rígidos: máximo de 1 MB, somente UTF-8, DTD proibido (qualquer <!DOCTYPE é rejeitado de imediato).
  • Assinatura: o corpo entra na assinatura depois de remover todos os CR e LF, enquanto o corpo enviado permanece inalterado:
text
sign = md5Hex(app_secret + "/openapi/v3/consultas/nf-e/xml" + xmlSemCrLf + timestamp)

O cabeçalho forceRevalidate não participa da assinatura. Veja as regras completas em Autenticação.