Como saber se sua NF-e foi emitida pela API
O payload de uma NF-e — recebido por consulta ou por webhook — traz o campo status e um histórico de tentativas em lastEvents.events[]. Os dois juntos dizem se a nota foi efetivamente autorizada.
O campo status
status é um enum (InvoiceStatus) com 9 valores possíveis:
| Retorno | Número | Descrição |
|---|---|---|
IssueDenied | -2 | A SEFAZ negou a emissão de forma definitiva |
Error | -1 | A nota não concluiu o processamento com sucesso |
None | 0 | A nota ainda não iniciou o processo de emissão |
Created | 1 | Nota criada, aguardando processamento |
Processing | 2 | Nota em processamento |
Issued | 3 | Nota autorizada com sucesso |
IssuedContingency | 4 | Nota autorizada em contingência |
Cancelled | 5 | Nota cancelada |
Disabled | 6 | Numeração inutilizada |
Só Issued e IssuedContingency significam nota emitida e válida. Error/IssueDenied significam que a emissão falhou; Created/Processing significam que ainda está em andamento — não é falha, mas também não é confirmação.
O histórico lastEvents.events[]
Diferente da NFS-e (que usa flowStatus/flowMessage), a NF-e expõe um array de eventos — o caminho que a nota percorreu até o status atual. Cada item tem type, sequence e data. Os tipos mais comuns:
type | Significado |
|---|---|
DefinedNumberAndSerieSuccessfully | Número e série atribuídos |
InvoiceSetAccessKey | Chave de acesso calculada |
InvoiceXmlSigned | XML assinado |
Authorized | Autorizada pela SEFAZ — traz protocolNumber e statusCode |
AuthorizationWithFailed | Rejeição pontual da SEFAZ — traz statusCode e message |
MaxAuthorizationFailed | Esgotou as tentativas de autorização |
SendSignedBatchFailed | Falha no envio do lote à SEFAZ |
MergedCancellation | Cancelamento consolidado |
Como saber se a nota foi efetivamente emitida
status sozinho já responde na maioria dos casos: Issued/IssuedContingency = emitida; Error/IssueDenied = não emitida. O ponto de atenção real está no histórico, não no status final.
SendSignedBatchFailed é comum aparecer em notas que terminam autorizadas com sucesso — a SEFAZ teve uma indisponibilidade transitória, o reenvio funcionou, e a nota chegou em status=Issued normalmente. Considere sempre o status da raiz, não a simples presença de um evento de falha no histórico.
O caso da duplicidade (aparenta falha, mas a nota provavelmente foi emitida)
Se sua chamada de emissão retornar 504 (tempo de comunicação excedido), a causa mais comum é um timeout na conexão — não necessariamente uma falha na SEFAZ. Um cenário real: o envio original chegou à SEFAZ, mas a resposta não voltou a tempo para a NFE.io. Ao tentar reenviar, a SEFAZ responde com cStat 204 (duplicidade) — sinal de que a nota já está na base dela, geralmente autorizada.
Se você recebeu 504 e não tem certeza do resultado, não reemita a NF-e diretamente. Consulte pela chave de acesso primeiro — é o único jeito de confirmar se a nota já existe e evitar duplicidade fiscal.