TF Fiscal
Documentation

NF-e verification

XML verification

Submits the raw NF-e XML; returns the Tier-1 verdict and the parsed invoice and starts the SEFAZ verification.

POST/openapi/v3/consultas/nf-e/xml
Requires the token, timestamp and sign signature headers, see Authentication.

Submits the raw NF-e XML. Returns the Tier-1 verdict and the parsed invoice data synchronously; on Tier-1 pass, Tier-2 SEFAZ verification starts automatically and the final verdict arrives through the invoice.verify.completed webhook (see NF-e verification).

HTTP 200 means the request was accepted, not that the invoice passed. A well-formed XML that fails validation still returns 200; the verdict is in the validation block. Never branch on the HTTP status to decide validity.

Headers

Content-Type*
stringBody type
forceRevalidate
boolForced re-verification

* Required field

200
Request accepted. Parsed invoice data plus the validation block with the Tier-1 verdict. Includes failed validation: check validation.validationStatus and validation.errors.
tipo
stringDocument type
modelo
stringDocument model
status
stringFiscal status
statusDescription
stringStatus description
ambienteEmissao
stringIssue environment
numero
stringInvoice number
serie
stringSeries
dataEmissao
stringIssue time
tipoOperacao
stringOperation type (tpNF), the direction of goods as seen by the issuer
chaveAcesso
stringAccess key
objectIssuer
objectRecipient
arrayItems
dataAutorizacao
stringAuthorization time
objectAuthorization protocol
valorTotal
numberInvoice net total
objectTier-1 verdict

  • Preferred: the full document authorized by SEFAZ, with the authorization protocol. An invoice without the protocol is also accepted: it produces a PROTOCOL_MISSING warning but is processed normally.
  • Hard limits: max 1 MB, UTF-8 only, DTD forbidden (any <!DOCTYPE is rejected outright).
  • Signing: the body participates in the signature after stripping every CR and LF, while the request body itself is sent unchanged:
text
sign = md5Hex(app_secret + "/openapi/v3/consultas/nf-e/xml" + xmlWithoutCrLf + timestamp)

The forceRevalidate header is not part of the signature. Full rules in Authentication.