Endpoints NF-e / NFC-e

Emitir, enviar, consultar, XML, DANFE, cancelar, CC-e e inutilizar.

Referência completa e detalhada de todos os endpoints REST da NFER. A API permite emitir notas fiscais (NF-e modelo 55, NFC-e modelo 65 e DC-e), gerar arquivos XML e DANFE PDF, gerenciar devoluções de e-commerce, cancelamentos e cartas de correção com sincronização direta na SEFAZ.

BASE URLv1 REST API

https://api.nfer.me/v1

Autenticação:X-API-Key: sec_live_...
Content-Type:application/json

Ciclo de Vida da NF-e (Como Emitir)

A emissão na NFER é projetada para ser rápida, resiliente e imune a lentidões da SEFAZ. O fluxo é dividido em 3 etapas simples:

1POST /v1/nfe

Criar Rascunho

Gera o rascunho da nota, calcula impostos e reserva o próximo número sequencial. Responde 201 Created em ~50ms.

2POST /v1/nfe/:id/send

Enfileirar Envio

Assina com o certificado A1 e envia à SEFAZ via fila assíncrona. Responde 202 Accepted imediatamente.

3Webhook / Poll

Obter Resultado

Seu backend recebe o webhook nfe.autorizada com a chave de 44 dígitos e o protocolo, ou faz polling em GET /v1/nfe/:id.

Por que a transmissão (/send) é assíncrona?

Servidores da SEFAZ frequentemente demoram entre 2 a 15 segundos para autorizar lotes ou sofrem instabilidades. Com o modelo assíncrono (HTTP 202), seu ERP ou checkout nunca trava esperando a SEFAZ. O NFER cuida de fila, retentativas e contingência automática (SVC).

Tabela Geral de Endpoints

MétodoEndpointDescriçãoStatus HTTP
POST/v1/nfeCria rascunho de NF-e (modelo 55) com número reservado201 Created
POST/v1/nfe/:id/sendAssina e envia a nota para autorização na SEFAZ202 Accepted
GET/v1/nfe/:idConsulta dados completos da nota, status e itens200 OK
PUT/v1/nfe/:idCorrige dados de nota rejeitada mantendo o mesmo número200 OK
GET/v1/nfe/:id/xmlBaixa o arquivo XML assinado e autorizado200 XML
GET/v1/nfe/:id/danfeBaixa o documento PDF do DANFE formatado200 PDF
POST/v1/nfe/:id/devolucaoGera rascunho automático de devolução/troca201 Created
POST/v1/nfe/:id/cancelCancela nota fiscal autorizada (prazo SEFAZ de 24h)202 Accepted
POST/v1/nfe/:id/correction-letterEmite Carta de Correção Eletrônica (CC-e)202 Accepted
POST/v1/nfe/inutilizarInutiliza faixa numérica não utilizada na SEFAZ200 OK
POST/v1/nfe/batchEmissão assíncrona em lote (até 50 notas)202 Accepted
POST/v1/nfceCria rascunho de NFC-e (modelo 65 - Cupom)201 Created
POST/v1/dceCria Declaração de Conteúdo Eletrônica (e-commerce)201 Created
GET/v1/nfeLista notas emitidas com paginação e filtros de data200 OK

1. Criar Rascunho de NF-e (POST /v1/nfe)

Você pode passar o destinatário de duas formas: diretamente no corpo da requisição (customer) ou usando o ID de um cliente previamente cadastrado (customerId).

POST/v1/nfe

Cria o rascunho da NF-e, calcula os impostos pelos perfis fiscais e reserva o número.

Exemplo 1: Destinatário Inline (Recomendado para E-commerce)

Venda pela internet para consumidor final (não contribuinte), com frete e pagamento via PIX.

indFinal: 1 = Consumidor final.

indPres: 2 = Operação não presencial (internet).

fiscalProfileId = Aplica tributação e CFOP configurados no painel.

POST /v1/nfe — Destinatário no JSONjson
{
  "customer": {
    "cpfCnpj": "12345678000199",
    "nome": "Cliente Exemplo LTDA",
    "email": "fiscal@cliente.com",
    "telefone": "4430000000",
    "endereco": {
      "logradouro": "Rua das Flores",
      "numero": "100",
      "complemento": "Sala 2",
      "bairro": "Centro",
      "xMun": "Cianorte",
      "UF": "PR",
      "CEP": "87200000"
    }
  },
  "naturezaOperacao": "VENDA DE MERCADORIA",
  "tipoOperacao": "1",
  "finalidade": 1,
  "serie": 1,
  "indFinal": 1,
  "indPres": 2,
  "valorFrete": 15.94,
  "transporte": { "modFrete": 0 },
  "informacoesAdicionais": "Pedido 3306 - Integracao API",
  "itens": [
    {
      "codigo": "SKU-001",
      "descricao": "Camiseta 100% Algodao",
      "ncm": "61091000",
      "unidade": "UN",
      "quantidade": 1,
      "valorUnitario": 259.90,
      "fiscalProfileId": "0e8a719f-..."
    }
  ],
  "pagamentos": [
    { "forma": "17", "valor": 275.84 }
  ]
}

Tabela de Parâmetros Principais (POST /v1/nfe)

CampoTipoObrigatórioDescrição e Valores
customerobjetoum dos doisDados cadastrais do cliente destinatário no próprio payload.
customerIdstring (UUID)um dos doisID de cliente já salvo no NFER (POST /v1/customers).
naturezaOperacaostringsimEx.: "VENDA DE MERCADORIA", "DEVOLUCAO DE COMPRA", "REMESSA".
tipoOperacaostring ("0"|"1")não (def. "1")"1" = Saída (venda/remessa), "0" = Entrada (devolução/compra).
finalidadenumber (1..4)não (def. 1)1 = Normal, 2 = Complementar, 3 = Ajuste, 4 = Devolução.
serienumbernão (def. 1)Série da nota fiscal na SEFAZ (ex.: 1).
indFinalnumber (0|1)não (def. 0)1 = Consumidor final (e-commerce e pessoa física), 0 = Revenda.
indPresnumber (0..9)não (def. 1)1 = Presencial, 2 = Internet/Não presencial, 9 = Outros.
itensarraysimLista de itens. Requer codigo, descricao, ncm, quantidade e valorUnitario.
pagamentosarraysim01=Dinheiro, 03=Cartão Crédito, 04=Cartão Débito, 17=PIX, 90=Sem Pagamento.
valorFretenumbernãoValor do frete somado automaticamente ao total da nota.
transporteobjetonãoModalidade do frete (modFrete: 0=Remetente, 1=Destinatário, 9=Sem frete).
informacoesAdicionaisstringnãoObservações fiscais impressas no DANFE e gravadas no XML.

2. Transmitir para a SEFAZ (POST /v1/nfe/:id/send)

Dispara a assinatura digital com certificado A1 e o envio do lote para os servidores da SEFAZ estadual.

POST/v1/nfe/:id/send

Enfileira o envio para a SEFAZ. Responde HTTP 202 com status 'processando'.

cURL — Transmitir NF-ebash
curl -s -X POST https://api.nfer.me/v1/nfe/8f21ac-uuid/send \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json"

Resposta imediata da fila:

Resposta 202 Acceptedjson
{
  "id": "8f21ac-uuid",
  "status": "processando",
  "numero": 1042,
  "serie": 1,
  "message": "Nota fiscal enviada para a fila de processamento da SEFAZ"
}

3. Consultar Status e Dados (GET /v1/nfe/:id)

Retorna todos os dados da nota fiscal, incluindo chave de acesso de 44 dígitos, protocolo de autorização, valores calculados e mensagens de erro da SEFAZ caso tenha sido rejeitada.

GET/v1/nfe/:id

Retorna o objeto completo da NF-e, status (rascunho, processando, autorizada, erro, cancelada).

cURL — Consultar NF-ebash
curl -s https://api.nfer.me/v1/nfe/8f21ac-uuid \
  -H "X-API-Key: $NFER_KEY"

4. Corrigir e Reenviar Nota com Erro (PUT /v1/nfe/:id)

Se a SEFAZ rejeitar a nota (ex: cStat 321 ou 539), nunca gere um novo rascunho. Atualize os dados da mesma nota usando PUT /v1/nfe/:id e chame /send novamente. Isso garante que o mesmo número sequencial seja utilizado, sem furos de numeração.

PUT/v1/nfe/:id

Substitui os dados do rascunho ou de nota com erro para reenviar à SEFAZ.

Fluxo de Correçãobash
# 1. Atualiza os dados com o body corrigido
curl -s -X PUT https://api.nfer.me/v1/nfe/8f21ac-uuid \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{ ...body corrigido... }'

# 2. Reenvia a mesma nota para a SEFAZ
curl -s -X POST https://api.nfer.me/v1/nfe/8f21ac-uuid/send \
  -H "X-API-Key: $NFER_KEY"

5. Download de XML e DANFE PDF

Após a autorização na SEFAZ, o NFER armazena o XML protocolado e gera o DANFE em PDF de alta qualidade para impressão.

GET/v1/nfe/:id/xml

Retorna o XML oficial assinado e protocolado pela SEFAZ (Content-Type: application/xml).

GET/v1/nfe/:id/danfe

Gera o arquivo PDF do DANFE pronto para impressão ou envio por e-mail.

Baixar XML Protocolado

O arquivo contém as tags <nfeProc> e <protNFe> exigidas pelo Fisco.

Download XMLbash
curl -s https://api.nfer.me/v1/nfe/$NFE_ID/xml \
  -H "X-API-Key: $NFER_KEY" -o nfe.xml

Baixar DANFE em PDF

Também suporta autenticação via query param ?api_key=... para abrir direto no navegador.

Download DANFE PDFbash
curl -s "https://api.nfer.me/v1/nfe/$NFE_ID/danfe?api_key=$NFER_KEY" \
  -o danfe.pdf

6. Nota de Devolução e Troca (E-commerce e Varejo)

Quando um cliente pede troca ou devolução de um pedido cujo prazo de cancelamento (24h) já expirou, a legislação fiscal brasileira exige a emissão de uma Nota Fiscal de Devolução de Entrada (finalidade 4).

POST/v1/nfe/:id/devolucao

Clona a nota original, inverte CFOPs (ex: 5102→1202), define tipo 0 (Entrada) e vincula nfeReferenciada.

CenárioO que fazerEfeito Fiscal e Estoque
Devolução de MercadoriaEmite NF-e de Entrada (tipo 0, finalidade 4) referenciando a chave da venda original.Anula os impostos da venda original e registra a reentrada do item no estoque.
Troca de Produto no E-commerce1. Emite NF-e de Devolução (Entrada) 2. Emite nova NF-e de Saída para o item substituto.Estorna contabilmente o item anterior e formaliza a remessa do novo produto com rastreio.
Atalho NFER (/devolucao)POST /v1/nfe/:id/devolucao na nota autorizada.O NFER preenche automaticamente tipo=0, finalidade=4, CFOPs de devolução e chave vinculada!
Exemplo: Emitir Devolução em 2 Passosbash
# 1. Gera o rascunho de devolução a partir da nota autorizada
curl -s -X POST https://api.nfer.me/v1/nfe/$NFE_ORIGINAL_ID/devolucao \
  -H "X-API-Key: $NFER_KEY"

# 2. Envia para autorização na SEFAZ
curl -s -X POST https://api.nfer.me/v1/nfe/$NFE_DEVOLUCAO_ID/send \
  -H "X-API-Key: $NFER_KEY"

7. Cancelamento de NF-e (POST /v1/nfe/:id/cancel)

O cancelamento só pode ser solicitado se a mercadoria ainda não saiu para entrega e dentro do prazo legal da SEFAZ estadual (geralmente 24 horas). A justificativa deve conter no mínimo 15 caracteres.

POST/v1/nfe/:id/cancel

Envia evento de cancelamento para a SEFAZ. Responde HTTP 202 com status 'processando'.

POST /v1/nfe/:id/cancelbash
curl -s -X POST https://api.nfer.me/v1/nfe/$NFE_ID/cancel \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "justificativa": "Cancelamento solicitado pelo cliente antes do envio"
  }'

8. Carta de Correção Eletrônica — CC-e (POST /v1/nfe/:id/correction-letter)

Usada para corrigir erros simples (ex.: erro de digitação no endereço de entrega, dados do transportador, informações complementares). Não permite alterar valores fiscais, alíquotas de impostos, data de emissão ou mudar completamente o destinatário.

POST/v1/nfe/:id/correction-letter

Envia evento de CC-e à SEFAZ. Justificativa entre 15 e 1000 caracteres.

POST /v1/nfe/:id/correction-letterbash
curl -s -X POST https://api.nfer.me/v1/nfe/$NFE_ID/correction-letter \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "correcao": "Onde se le Rua das Flores 100, leia-se Rua das Flores 102 Sala 4"
  }'

9. Inutilização de Numeração (POST /v1/nfe/inutilizar)

Se houve uma quebra na sequência de numeração (ex: pulou do número 105 para o 110 por falha interna do ERP), você deve justificar a inutilização desses números perante a SEFAZ para evitar multas tributárias.

POST/v1/nfe/inutilizar

Inutiliza faixa de números na SEFAZ. Síncrono.

POST /v1/nfe/inutilizarbash
curl -s -X POST https://api.nfer.me/v1/nfe/inutilizar \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "serie": 1,
    "numeroInicial": 106,
    "numeroFinal": 109,
    "justificativa": "Numeros pulados por falha na integracao do software emissor",
    "modelo": "55"
  }'

10. Emissão em Lote (POST /v1/nfe/batch)

Permite enviar até 50 notas de uma única vez para processamento paralelo de alta velocidade. Ideal para fechamento de vendas diárias ou expedições de e-commerce.

POST/v1/nfe/batch

Envia lista de payloads (mesmo JSON de POST /nfe). Responde 202 com batchId.

GET/v1/nfe/batch/:batchId

Acompanha o progresso do lote e o status de cada nota.

POST /v1/nfe/batchbash
curl -s -X POST https://api.nfer.me/v1/nfe/batch \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "notas": [
      { "naturezaOperacao": "VENDA", "itens": [...], "pagamentos": [...] },
      { "naturezaOperacao": "VENDA", "itens": [...], "pagamentos": [...] }
    ]
  }'

11. NFC-e — Cupom Fiscal Eletrônico (Modelo 65)

Para ponto de venda (PDV) e frente de caixa. O destinatário é opcional (venda anônima no balcão). Requer o CSC (nfceIdCsc e nfceTokenCsc) configurado no cadastro da empresa.

POST/v1/nfce

Cria rascunho de cupom NFC-e modelo 65.

POST/v1/nfce/:id/send

Envia o cupom para autorização na SEFAZ.

GET/v1/nfce/:id/xml

Download do XML da NFC-e autorizada.

POST /v1/nfcebash
curl -s -X POST https://api.nfer.me/v1/nfce \
  -H "X-API-Key: $NFER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "naturezaOperacao": "VENDA AO CONSUMIDOR",
    "itens": [
      {
        "descricao": "Cafe Expresso 50ml",
        "ncm": "09012100",
        "unidade": "UN",
        "quantidade": 1,
        "valorUnitario": 7.50
      }
    ],
    "pagamentos": [
      { "forma": "01", "valor": 7.50 }
    ]
  }'