NF-e verification
Chave lookup
Returns invoice data for a 44-digit access key; pure query, carries no verification verdict.
/openapi/v3/consultas/nf-e/{chave}Requires the token, timestamp and sign signature headers, see Authentication.
Returns invoice data for a 44-digit access key. Pure query endpoint: the response carries no validation block; verification verdicts are delivered exclusively through the invoice.verify.completed webhook (see NF-e verification).
GET request: the signed body is the empty string and the chave is part of the signed path.
Parameters
Path parameters
chavestringrequired44-digit access key, digits only; the last digit is a mod-11 check digit. Malformed keys are rejected locally with
10015104and no lookup is attempted.Example:35260764962869000108550990001366171195929648
Responses
Invoice data. Same structure as XML verification, without the validation block.
tipostringDocument type.
Values:NF-eNFC-emodelostringDocument model.
Values:5565statusstringSEFAZ fiscal status.
Values:AutorizadaCanceladaDenegadaInutilizadaNaoEncontradaDesconhecidastatusDescriptionstringLocalized description of
status, per request language (see Response localization in NF-e verification).ambienteEmissaostringEnvironment the document was issued in.
Values:ProducaoHomologacaonumerostringInvoice number nNF, no leading zeros.
seriestringSeries number.
dataEmissaostringIssue time dhEmi, ISO-8601 with UTC offset, verbatim from the document (e.g.
2026-07-23T11:20:05-03:00).chaveAcessostring44-digit access key (echo of the path variable).
emitenteobjectIssuer.
destinatarioobjectRecipient.
itensarrayInvoice line items.
dataAutorizacaostring | nullSEFAZ authorization time dhRecbto (ISO-8601); null when the submitted XML carries no protocol node.
protocoloobject | nullAuthorization protocol; null when there is no protocol node.
valorTotalnumberInvoice net total vNF (after discounts), 2 decimal places.
Errors
| Code | HTTP | |
|---|---|---|
| 10015104 | 400 | Malformed chave (length / characters / check digit). Rejected locally, no lookup attempted. Validate first: 44 digits, the last one is a mod-11 check digit. |
| 10015004 | 400 | Invoice not found in any source. The chave is unknown to the platform and the official data source; verify the chave with its issuer. |
Signing example
Given app_secret = sk_live_9f8e7d6c5b4a, the chave 35260764962869000108550990001366171195929648 and timestamp = 1784906308, the signing string is (GET, empty body; the chave is part of the path):
sign_input = "sk_live_9f8e7d6c5b4a"+ "/openapi/v3/consultas/nf-e/35260764962869000108550990001366171195929648"+ ""+ "1784906308"sign = md5Hex(sign_input)
Data sources and outcomes
The platform resolves the chave through the following tiers; the first hit is returned:
| Case | Result |
|---|---|
| Previously submitted for verification (platform retains the record) | Full invoice data |
| Invoice issued through this platform | Full invoice data parsed from the authorized XML |
| Unknown chave | Full authorized data fetched from the official data source, per platform policy |
| No source hit | HTTP 400, { "code": 10015004, "message": "Invoice not found" } |
| Malformed chave / bad check digit | HTTP 400, { "code": 10015104, ... }; no lookup is attempted |
Re-verification
This endpoint has a fixed GET shape and no re-verification channel. To force a re-check, resubmit the XML through XML verification with the forceRevalidate: true header. The chave lookup can serve as a polling fallback to the webhook, but the verdict itself is pushed only through the webhook.
