Erros
HTTP, status da nota, cStat frequentes e tratamento.
Duas camadas. HTTP (antes da SEFAZ): campo error no JSON — o NFER barra payload inválido. SEFAZ (depois do /send): erro_cstat / erro_motivo na nota. Corrija o campo do body com PUT /v1/nfe/:id e chame /send de novo — mesmo número.
{
"error": "VALIDATION_ERROR",
"message": "Invalid request body",
"details": {}
}Códigos da API (`error`)
| HTTP | error | Quando |
|---|---|---|
| 400 | VALIDATION_ERROR | Payload ou regra de negócio inválida |
| 401 | UNAUTHORIZED | API Key ausente ou inválida |
| 403 | FORBIDDEN | Sem permissão |
| 404 | NOT_FOUND | Recurso inexistente (ex.: certificado não cadastrado) |
| 409 | CONFLICT | CNPJ/número duplicado ou estado inconsistente |
| 429 | TOO_MANY_REQUESTS | Rate limit — corpo traz retryAfter (segundos) |
| 500 | CERTIFICATE_ERROR | PFX inválido, senha errada ou certificado expirado |
| 502 | SEFAZ_ERROR | Falha SEFAZ em fluxo síncrono |
Status da NF-e
| status | Significado |
|---|---|
| rascunho | Criada, ainda não enviada |
| processando | Na fila / worker em execução |
| autorizada | Autorizada (cStat 100) |
| denegada | Denegada pela SEFAZ |
| erro | Falha / rejeição — pode reenviar |
| cancelada | Cancelada |
| inutilizada | Faixa de numeração inutilizada |
Quando status = erro
erro_cstat e erro_motivo no GET /v1/nfe/:id (ou erroCstat / erroMotivo no webhook nfe.erro). Exiba no ERP sem depender de chave de acesso. Os códigos são os oficiais da SEFAZ (cStat), não prefixos NFER.Retransmitir nota com erro
Não existe /retransmitir. Corrija com PUT /v1/nfe/:id (mesmo body de POST /v1/nfe) e envie de novo com POST /v1/nfe/:id/send — mesmo id, mesmo número. Vale para erro e rascunho.
| Pergunta | Resposta |
|---|---|
| Gera outro número? | Não. Reusa numero + serie já gravados na nota. |
| Cria outra nota? | Não. Mesmo id. Duplicate é outro endpoint e pega o próximo número. |
| O que corrigir antes? | PUT /v1/nfe/:id com o body corrigido (NCM, CFOP, destinatário…). Não é PATCH. |
| cStat 656 (Consumo indevido) | Não martelar /send. Espere ~1h, Consultar SEFAZ, só então um send. |
| denegada | Não retransmitir igual — é bloqueio fiscal (IE/CNPJ). |
Ver o motivo da rejeição
GET notabashcurl -s "$BASE/v1/nfe/$NFE_ID" -H "X-API-Key: $NFER_KEY" \ | jq '{status, numero, serie, erro_cstat, erro_motivo}'Corrigir os dados
No ERP, no painel, ou via
PUT /v1/nfe/:id— NCM, CFOP, destinatário, etc., conformeerro_motivo. Mesmo body dePOST /v1/nfe(substituição completa). Sórascunho/erro, modelo 55. Não crie outra nota.PUT nota (ex.: NCM)bashcurl -s -X PUT "$BASE/v1/nfe/$NFE_ID" \ -H "X-API-Key: $NFER_KEY" \ -H "Content-Type: application/json" \ -d '{ /* mesmo payload do POST, com ncm/cfop corrigidos */ }'Enviar de novo (mesmo número)
Resposta
202. Mesmoid, mesmonumero/serie.POST sendbashcurl -s -X POST "$BASE/v1/nfe/$NFE_ID/send" -H "X-API-Key: $NFER_KEY"
No painel: lista → botão Retransmitir (quando status = erro) ou menu ⋯ → Retransmitir para SEFAZ. Prefira Consultar SEFAZ antes se a última mensagem foi consumo indevido.
Rejeições SEFAZ (`cStat`)
Recorte para o ERP — não é o catálogo completo. A coluna Campo é o JSON do POST /v1/nfe (ou equivalente no cadastro). Em 108 / 109 / 584 o NFER tenta SVC sozinho (NF-e 55) — ver Conceitos.
Como usar esta tabela
nfe.erro ou GET /v1/nfe/:id → leia erro_cstat → ache a linha → corrija o campo → PUT + /send no mesmo id. Não crie outra nota.| cStat | Significado | Campo | O que fazer |
|---|---|---|---|
| 100 | Autorizada | — | Sucesso. Use chaveAcesso do webhook/GET. |
| 108 / 109 / 584 | SEFAZ paralisada / instável | — | NFER tenta SVC (NF-e 55). Se ainda falhar, aguarde e /send de novo. |
| 203 | Emissor não habilitado na UF | empresa / A1 | Credenciar o software na SEFAZ da UF (ex.: Receita/PR). Comum em produção nova. |
| 204 / 301 / 302 / 110 | Uso denegado | CNPJ / IE | status=denegada. Regularizar na Receita. Não reenviar o mesmo payload. |
| 206 / 539 | Duplicidade (chave ou número) | numero / serie | Consultar a nota existente ou alinhar a sequência (migração de emissor). |
| 209 | IE do emitente inválida | empresa.ie | Corrigir IE em Configurações → Dados Jurídicos. |
| 213 | Certificado ≠ CNPJ emitente | A1 | Upload do .pfx do mesmo CNPJ-base da empresa que emite. |
| 210 / 232 | IE do destinatário inválida ou ausente | customer.ie | Contribuinte: IE válida. Sem IE: omitir (não contribuinte) ou "ISENTO". PUT e /send. |
| 225 | Falha no schema XML | itens[].descricao, endereco, cMun | Descrição preenchida, cMun 7 dígitos, endereço ≥ 2 chars. Muitos casos o NFER já barra com HTTP 400. |
| 228 | dhEmi muito atrasada | — (data da emissão) | Não atrasar o /send depois de criar o rascunho. A janela varia por UF (poucos dias). |
| 252 | Ambiente diverge | empresa.environment | Homologação vs produção. PUT /v1/companies/:id com o environment certo. |
| 274 / 275 | cMun dest. inexistente ou de outra UF | customer.endereco.cMun | IBGE 7 dígitos da mesma UF. Prefira UF+xMun ou CEP — o NFER resolve. PUT e /send. |
| 778 | NCM inexistente | itens[].ncm | 8 dígitos vigentes na TIPI. PUT com o NCM certo e /send. Atualize o cadastro do produto. |
| 590 / 591 | CST vs CSOSN vs CRT | itens[].impostos / fiscalProfileId | Simples (CRT=1) = CSOSN. Regime normal (CRT=3) = CST. Ajuste o perfil ou impostos[] no PUT. |
| 610 | Total da NF ≠ soma dos itens | itens[] + valorFrete + pagamentos[] | vNF = produtos − descontos + frete. Conferir no PUT. |
| 611 | GTIN / cEAN inválido | itens[].ean | Omita ean (SEM GTIN) ou envie um GTIN válido. |
| 732 / 733 | CFOP vs UF destino | itens[].cfop / fiscalProfileId | Mesma UF: 5xxx. Outra UF: 6xxx. Com perfil o NFER escolhe o CFOP. |
| 806 | ICMS-ST sem CEST | produto / item CEST | Item com ST precisa de CEST CONFAZ daquele NCM. PUT e /send. |
| 865 | Pagamentos < total | pagamentos[].valor | Soma = produtos − descontos + frete. O NFER costuma barrar no HTTP 400. |
| 696 | Não contribuinte sem consumidor final | indFinal + customer.ie | Dest. sem IE exige indFinal=1. O NFER normaliza; envie 1 quando for consumidor final. |
| 321 / 1048 / 1102 | Devolução sem ref. por item | itens[].nfeReferenciada | chaveAcesso (44) + nItem = det/@nItem do XML original. |
| 1010 | Ref. na raiz e no item juntos | nfeReferenciada | Em devolução use só referência por item — sem NFref na raiz. |
| 1072 | chave+nItem duplicados | itens[].nfeReferenciada | Não repetir o mesmo par chaveAcesso/nItem em dois itens. |
| 1020–1024 / 1104–1119 | IBS/CBS (RTC) | itens[].impostos (RTC) | CST/cClassTrib conforme NT vigente. Ver Conceitos. |
| 391 | Dados de cartão/pagamento | pagamentos[].forma | Forma coerente (ex. 03/04 cartão). Conferir indPres. |
| 434 / 435 | Indicador de intermediador | indPres | Não presencial (2/3/9): o NFER envia indIntermed=0 no XML (evita 434). Presencial: não manda intermediador. |
| 656 | Consumo indevido | — | Bloqueio ~1h por envios/consultas repetidos. Não martelar /send. Consultar SEFAZ, esperar, um send. |
| 694 | cBenef obrigatório (PR/RS) | item / perfil (cBenef) | Código de benefício quando o CST/UF exigir. |
| 703 | dhEmi no futuro | — | Relógio do servidor. O NFER usa horário de Brasília no XML. |
| 713 | tpEmis incompatível com SVC | — | O fallback SVC do NFER já ajusta tpEmis 6 ou 7. |
| 724 | Sem nome do destinatário | customer.nome | Informar nome (exceto NFC-e sem destinatário, quando permitido). |
| 978 | hashCSRT diverge | RESP_TEC (NFER) | CSRT do software house no backend. Comum no PR — não vai no payload do ERP. |
Catálogo oficial: Portal Nacional da NF-e — erros de validação. Um guia por código no blog NFER virá depois; esta tabela é o atalho do integrador.
Tratamento recomendado
| Caso | Ação |
|---|---|
| 429 | Aguarde retryAfter e reenvie |
| 400 / validação | Corrija o payload — não reenvie igual |
| status=erro (SEFAZ) | Leia erro_cstat; a tabela aponta o campo do JSON; PUT + /send no mesmo id |
| status=denegada | Bloqueio fiscal — não reenviar igual; regularizar IE/CNPJ |
| CERTIFICATE_ERROR / cert 404 | Envie certificado A1 válido no painel |
| 500 / timeout SEFAZ | Backoff (3s, 9s, 27s); o job já tem retry interno |
| processando longo | Webhook ou poll 3–5s; não crie outra nota |