Changelog
O que passou a funcionar na API e no painel.
Mais recente primeiro. Só entra o que muda o que você emite, consulta ou vê no painel.
Impostos aproximados (IBPT) saem sozinhos na DANFE
Venda a consumidor final (indFinal=1): o NFER calcula o valor aproximado de tributos e coloca o texto no rodapé. Não mande IBPT no JSON. Para atualizar a tabela: POST /v1/ibpt/sync.
Corrigir nota rejeitada sem gerar outro número
Nota em erro (ex.: NCM inválido, cStat 778): PUT /v1/nfe/:id com o body corrigido e de novo POST /send. Mesmo id, mesmo número. Não faça outro POST /v1/nfe.
Presença do comprador: se omitir, vale 9
indPres padrão passou a 9 (não presencial). Loja física: envie 1. Site próprio: 2. WhatsApp/e-mail: pode omitir.
Volumes de transporte são opcionais
Peso e quantidade de volumes vão em transporte.volumes[]. A SEFAZ não exige isso para autorizar a maioria das notas.
Botão Retransmitir no painel
Nota com status erro: o painel reenvia o mesmo número para a SEFAZ. Na API é o mesmo POST /v1/nfe/:id/send.
Destinatário sem IE vira consumidor final sozinho
A SEFAZ rejeita (696) se o cliente não tem inscrição estadual e indFinal=0. O NFER grava 1 nesse caso. Ainda assim, mande indFinal=1 quando a venda for a consumidor.
Gráfico e cards na visão geral
O dashboard mostra autorizadas no tempo (7 dias a 1 ano). Clicar num card abre a lista já filtrada.
Lista e totais só do ambiente ativo
GET /v1/nfe e as métricas não misturam mais homologação com produção. Vale o environment da empresa.
Aviso de certificado A1 vencendo
Sino no painel, banner e e-mail (se houver SMTP) aos 30, 15, 7, 3 e 1 dia, no vencimento e enquanto estiver expirado.
Consultar se a SEFAZ da UF está no ar
GET /v1/sefaz/status (cStat 107 = em operação). No dashboard, o badge no topo faz a mesma consulta.
Relatório separa SVC e EPEC por UF
GET /accounts/:id/nfe-report traz o bloco contingency: quantas notas saíram por cada tipo de contingência.
Emitir até 50 notas de uma vez
POST /v1/nfe/batch com a lista de payloads (mesmo JSON de POST /nfe). Resposta 202 + batchId. Acompanhe em GET /v1/nfe/batch/:id ou no webhook nfe.batch.completed.
NF-e: se a SEFAZ cair, tenta SVC sozinho
Timeout ou cStat 108/109/584: o mesmo job reautoriza na SVC (chave nova). Quando a SEFAZ volta, o NFER tira a nota da contingência.
Se a SVC também falhar, registra EPEC
A NF-e fica em contingencia, DANFE imprimível, webhook nfe.contingencia. Depois o NFER tenta autorizar de novo.
NFC-e: cupom offline se a SEFAZ cair
A nota fica em contingencia, o cupom pode imprimir, webhook nfe.contingencia. Depois o NFER retransmite o XML. NFC-e não usa SVC.
Teto de requisições por minuto
Start 120, Growth 240, Business 480, Enterprise 900. Estourou: HTTP 429 com Retry-After — espere e tente de novo.
Criar NF-e no painel: presença, consumidor final e desconto
Os campos indPres, indFinal e desconto por item (já existiam na API) passam a aparecer no formulário.
API em HTTPS no domínio próprio
Base pública: https://nfe-api.cryptoraffle.bet. Atualize a URL nos clientes (NEXT_PUBLIC_API_URL / BASE).
Não precisa mandar o código IBGE da cidade
Informe UF + nome da cidade, ou só o CEP. Sem resolução possível, a API responde 400 — não inventa município.
Destinatário no mesmo POST da nota
Em vez de cadastrar o cliente antes, mande o objeto customer (CPF/CNPJ, nome, endereço). Se já existir na empresa, atualiza; se não, cria. customerId continua valendo.
Frete da nota no JSON
valorFrete na raiz (R$) entra no total e é rateado nos itens. A soma dos pagamentos tem que bater com produtos − descontos + frete.
Webhooks no painel
Cadastrar URL, secret HMAC opcional, disparar teste e ver o histórico de entregas. Depois do /send, prefira webhook a ficar consultando a nota.
Rate limit passou a valer de verdade
O teto de req/min do plano é aplicado por empresa. Antes o número existia; agora a API corta com 429.