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.