Emitir NF-e

POST /nfe?ref=SUA-REF: emite uma NF-e. A resposta é assíncrona: 202 significa que a nota foi aceita, tem número reservado e está a caminho da SEFAZ.

Rota POST /api/v2/nfe?ref={ref}
Corpo JSON com a venda (destinatário, itens, pagamentos...)
Qual empresa emite cnpj_emitente no corpo (ou na query). Conta com uma só empresa dispensa o campo
Limite 120 emissões por minuto por chave (ajustável por conta)
Resposta Quando
202 aceita e na fila (ou a nota da ref já estava em andamento com este mesmo conteúdo)
200 a ref já tinha uma nota com este mesmo conteúdo, em estado final: devolve o estado atual
404 a empresa não é da sua conta (empresa_nao_encontrada)
409 a ref já pertence a uma nota com outro conteúdo (ref_ja_utilizada)
422 requisição inválida (requisicao_invalida), cálculo fiscal recusado (validacao_fiscal) ou empresa não informada (cnpj_emitente_obrigatorio)

Tudo o que dá para recusar sem a SEFAZ volta como 422 aqui, antes de gastar um número da série: nota recusada na validação não deixa buraco na numeração.

O exemplo mínimo

Venda para um consumidor final (pessoa física) em outro estado, paga por PIX. É o menor corpo que emite uma nota completa:

{
  "nome_destinatario": "Maria da Silva",
  "cpf_destinatario": "529.982.247-25",
  "logradouro_destinatario": "Av Atlantica",
  "numero_destinatario": "500",
  "bairro_destinatario": "Copacabana",
  "municipio_destinatario": "Rio de Janeiro",
  "codigo_municipio_destinatario": "3304557",
  "uf_destinatario": "RJ",
  "cep_destinatario": "22010-000",
  "items": [
    {
      "codigo_produto": "CAMISA-P",
      "descricao": "Camiseta basica algodao P",
      "codigo_ncm": "61091000",
      "icms_origem": 0,
      "quantidade_comercial": 1,
      "valor_unitario_comercial": 100.00
    }
  ],
  "formas_pagamento": [ { "forma_pagamento": "17" } ]
}

Resposta 202:

{
  "cnpj_emitente": "11222333000181",
  "ref": "PED-1001",
  "ambiente": "homologacao",
  "status": "processando_autorizacao",
  "numero": "1",
  "serie": "1",
  "chave_nfe": null,
  "protocolo_sefaz": null,
  "status_sefaz": null,
  "mensagem_sefaz": null,
  "mensagem": null,
  "valor_total": 100,
  "autorizada_em": null,
  "caminho_xml_nota_fiscal": null,
  "caminho_danfe": null,
  "eventos": []
}

Note que o ICMS, o DIFAL, o PIS/COFINS e o CFOP não foram informados: a plataforma calcula pelo regime da empresa e pela operação. Aqui, por ser uma venda interestadual a consumidor final não contribuinte, ela calcula também o DIFAL.

Segundos depois, GET /nfe/PED-1001 devolve a nota autorizada:

{
  "cnpj_emitente": "11222333000181",
  "ref": "PED-1001",
  "ambiente": "homologacao",
  "status": "autorizado",
  "numero": "1",
  "serie": "1",
  "chave_nfe": "35261011222333000181550010000000011219954665",
  "protocolo_sefaz": "135260000000001",
  "status_sefaz": "100",
  "mensagem_sefaz": "Autorizado o uso da NF-e",
  "mensagem": null,
  "valor_total": 100,
  "autorizada_em": "2026-10-04T15:50:10+00:00",
  "caminho_xml_nota_fiscal": "https://srv1839254.hstgr.cloud/api/v2/nfe/PED-1001/xml?cnpj_emitente=11222333000181",
  "caminho_danfe": "https://srv1839254.hstgr.cloud/api/v2/nfe/PED-1001/danfe?cnpj_emitente=11222333000181",
  "eventos": []
}

A resposta da nota

Campo Significado
cnpj_emitente, ref, ambiente quem emitiu, o seu identificador e homologacao ou producao
status estado atual: veja os estados
numero, serie número fiscal da NF-e e série (texto). Reservados na aceitação; não mudam se a nota for rejeitada e reenviada
chave_nfe chave de acesso de 44 dígitos (existe depois que a nota é montada e assinada)
protocolo_sefaz protocolo de autorização
status_sefaz, mensagem_sefaz código (cStat) e texto da última resposta da SEFAZ. Sempre o original
mensagem por que a nota está parada ou foi recusada, numa frase (rejeição da SEFAZ ou pendência de validação)
valor_total valor da nota em reais
autorizada_em quando a SEFAZ autorizou
caminho_xml_nota_fiscal link do XML autorizado. Continua disponível depois do cancelamento (guarda obrigatória de 5 anos)
caminho_danfe link do DANFE (PDF), enquanto a nota vale
eventos cancelamentos e cartas de correção, com o estado de cada um (veja Consultar e eventos)

Os links exigem a chave de API, como qualquer chamada. Guarde o XML autorizado: é o documento fiscal, e você precisa mantê-lo por 5 anos.

Referência dos campos

Campo desconhecido é recusado (422, com o caminho do campo). Valores em reais (número). Documentos aceitam máscara.

Nota

Campo Regra
cnpj_emitente a empresa que emite. Dispensável se a conta tem uma só
serie série em que a nota sai, 0 a 889. Padrão 1. O próximo número de cada série se configura em Numeração
natureza_operacao texto, até 60. Padrão VENDA DE MERCADORIA
presenca_comprador 0 não se aplica, 1 presencial, 2 internet, 3 teleatendimento, 4 entrega a domicílio, 5 presencial fora do estabelecimento, 9 outros. Padrão 2
modalidade_frete 0 por conta do remetente, 1 do destinatário, 2 de terceiros, 3 transporte próprio do remetente, 4 do destinatário, 9 sem frete. Padrão 9
consumidor_final 0 ou 1. Padrão: 1 se o destinatário não é contribuinte de ICMS e 0 se é
valor_frete, valor_seguro, valor_desconto, valor_outras_despesas valores da nota, que a API rateia entre os itens (como)
valor_total opcional: o total que você calculou, com IPI (o vNF). A nota só sai se o total calculado pela API fechar com ele
valor_produtos opcional: soma dos itens, só para conferência
informacoes_adicionais_contribuinte texto livre (até 2000) que vai nas informações complementares da nota
cnpj_intermediador, identificador_intermediador venda por marketplace (abaixo)
tipo_documento só 1 (saída)
finalidade_emissao só 1 (normal). Devolução, complementar e ajuste ainda não
local_destino 1 interna, 2 interestadual. Precisa bater com as UFs (emitente e destinatário)

Destinatário

Informe um documento: cpf_destinatario ou cnpj_destinatario (com dígito verificador válido; o CNPJ pode ser alfanumérico).

Campo Regra
nome_destinatario obrigatório
cpf_destinatario / cnpj_destinatario exatamente um dos dois
inscricao_estadual_destinatario dígitos, ou o texto ISENTO
indicador_inscricao_estadual_destinatario 1 contribuinte, 2 isento, 9 não contribuinte. Padrão: CNPJ com IE → 1; ISENTO → 2; o resto → 9. Com 1 a IE é obrigatória
logradouro_destinatario, bairro_destinatario, municipio_destinatario obrigatórios
numero_destinatario padrão S/N
complemento_destinatario, telefone_destinatario, email_destinatario opcionais
uf_destinatario obrigatório; UF válida
cep_destinatario obrigatório, 8 dígitos
codigo_municipio_destinatario código IBGE do município (7 dígitos). Informe sempre que puder: se faltar, a API tenta descobrir pelo CEP (consulta externa) e, se não conseguir, devolve 422 pedindo o código
pais_destinatario só Brasil (Brasil ou 1058). Destinatário no exterior não é suportado

Em homologação a SEFAZ exige o texto NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL no nome do destinatário e na descrição do item 1: a plataforma coloca sozinha. Você manda os dados reais normalmente.

Itens (items)

De 1 a 990 itens, na ordem.

Campo Regra
codigo_produto obrigatório (até 60). É o SKU e a chave do catálogo
descricao descrição do item (até 120 saem na nota). Se faltar, vem do catálogo
codigo_ncm NCM, 8 dígitos. Se faltar, vem do catálogo
icms_origem origem da mercadoria, 0 a 8. Se faltar, vem do catálogo
quantidade_comercial obrigatória, maior que zero, até 4 casas
valor_unitario_comercial obrigatório, até 10 casas (0.3333 vale)
valor_bruto opcional: quantidade × preço. Se vier, precisa bater com a conta (tolerância de R$ 0,01, como a SEFAZ)
unidade_comercial padrão UN (ou a do catálogo)
codigo_barras_comercial GTIN válido, ou SEM GTIN/omitido
codigo_cest 7 dígitos
producao_propria true para o que você fabrica (CFOP x101). Padrão: revenda (x102)
valor_desconto, valor_frete, valor_seguro, valor_outras_despesas valores do item, somados ao rateio da nota
numero_item opcional; se vier, tem de ser a posição do item (1, 2, 3...)
unidade_tributavel, quantidade_tributavel, valor_unitario_tributavel só aceitos se iguais aos comerciais (unidade tributável diferente ainda não é suportada)
inclui_no_total só 1
cfop, icms_situacao_tributaria, icms_aliquota, icms_reducao_base_calculo, fcp_aliquota, icms_difal, pis_situacao_tributaria, pis_aliquota_porcentual, cofins_situacao_tributaria, cofins_aliquota_porcentual, ipi_situacao_tributaria, ipi_aliquota parâmetros fiscais do modo híbrido. Opcionais: o que você não informa a plataforma calcula

Valores de imposto (icms_valor, icms_base_calculo, pis_valor, ipi_valor...) são recusados, com uma mensagem que explica: a API calcula os valores a partir dos parâmetros.

Pagamentos (formas_pagamento)

Pelo menos uma forma de pagamento.

Campo Regra
forma_pagamento obrigatório. Código da NF-e: 01 dinheiro, 02 cheque, 03 cartão de crédito, 04 cartão de débito, 05 crédito loja, 10 a 13 vales (alimentação, refeição, presente, combustível), 14 duplicata mercantil, 15 boleto, 16 depósito, 17 PIX, 90 sem pagamento, 99 outros. 18 a 22 são os demais meios da tabela de formas de pagamento do leiaute da NF-e (tPag)
valor_pagamento opcional com uma forma (paga a nota inteira); obrigatório com duas ou mais, e a soma tem de fechar com o valor da nota
descricao_pagamento obrigatória na forma 99
indicador_pagamento 0 à vista, 1 a prazo. Padrão 1 para 03, 05 e 14; 0 para as demais
tipo_integracao_pagamento cartão (03 e 04): 1 integrado ao sistema de pagamento, 2 não integrado. Obrigatório no cartão. PIX dinâmico (17) também leva o grupo de pagamento eletrônico na nota: se você não informar, sai como 2 (não integrado) — a SEFAZ rejeita (391) o PIX sem esse grupo
cnpj_credenciadora, bandeira_operadora, numero_autorizacao cartão integrado (tipo_integracao_pagamento = 1): obrigatórios. Bandeira: 01 Visa, 02 Mastercard, 03 Amex, 04 Sorocred, 05 Diners, 06 Elo, 07 Hipercard, 08 Aura, 09 Cabal, 99 outras

Frete, desconto e rateio

Você pode informar frete, seguro, desconto e outras despesas na nota e/ou em cada item. Os valores da nota são rateados entre os itens, proporcionalmente ao valor de cada um, e a soma dos itens bate exatamente com o que você informou (a diferença de arredondamento vai para os maiores restos). Os valores de cada item entram além do rateio.

Exemplo: dois itens de R$ 100,00 e R$ 30,00, frete de R$ 10,00 na nota e desconto de R$ 5,00. O frete se divide em R$ 7,69 e R$ 2,31; o desconto em R$ 3,85 e R$ 1,15. A nota fecha em 100 + 30 + 10 − 5 = 135,00.

O desconto de um item não pode passar do valor dele.

Total e pagamentos precisam fechar

Antes de emitir, a API calcula o total da nota e confere:

  • se você informou valor_total, ele tem de bater com o total calculado (incluindo IPI). Se não bater: 422 validacao_fiscal com a mensagem Total calculado (11500) difere do total informado (9990). (valores em centavos). É a rede de segurança para um erro de cálculo do seu lado não virar uma nota errada;
  • com duas ou mais formas de pagamento, a soma de valor_pagamento tem de fechar com o valor da nota.

Campos aceitos e ignorados

Para facilitar a migração de quem vem de outro emissor, estes campos são aceitos e ignorados de propósito:

  • data_emissao, data_entrada_saida: a nota sai com o horário real da emissão, o da plataforma;
  • cpf_emitente, nome_emitente, nome_fantasia_emitente, logradouro_emitente, numero_emitente, bairro_emitente, municipio_emitente, uf_emitente, cep_emitente, inscricao_estadual_emitente, regime_tributario_emitente: os dados do emitente vêm do cadastro da empresa.

Qualquer outro campo desconhecido é recusado.

Reenvio de uma ref

O que acontece ao enviar de novo uma ref que já existe depende do estado da nota:

Estado da nota Mesmo conteúdo Conteúdo diferente
processando_autorizacao 202, devolve o estado (repetir por falha de rede é seguro) 409 ref_ja_utilizada
autorizado, cancelado, denegado, inutilizado 200, devolve o estado 409 ref_ja_utilizada: use uma ref nova
erro_autorizacao ou erro_validacao reenfileira (é o "tentar de novo") aceita o conteúdo corrigido e reenfileira, com o mesmo número

Em resumo: nota rejeitada se corrige reenviando na mesma ref; nota cancelada, denegada ou inutilizada nunca reaproveita a ref para outro conteúdo (assim, uma repetição por falha de rede jamais emite uma segunda nota). Para uma venda nova, use sempre uma ref nova.

O corpo do 409:

{ "codigo": "ref_ja_utilizada", "mensagem": "A ref PED-1001 já pertence a uma nota (autorizado) com outro conteúdo. Use uma ref nova para uma nota nova.", "status_atual": "autorizado" }

Exemplos prontos

Venda B2B com frete, desconto e pagamento dividido

Empresa do Simples Nacional vendendo para uma empresa contribuinte de outro estado. Dois itens, frete de R$ 10,00 e desconto de R$ 5,00 na nota, total conferido, pago em PIX e boleto a prazo:

{
  "natureza_operacao": "VENDA DE MERCADORIA ADQUIRIDA",
  "modalidade_frete": 1,
  "valor_frete": 10.00,
  "valor_desconto": 5.00,
  "valor_total": 135.00,
  "informacoes_adicionais_contribuinte": "Pedido de compra 4471.",
  "nome_destinatario": "COMERCIAL RIO LTDA",
  "cnpj_destinatario": "11.444.777/0001-61",
  "inscricao_estadual_destinatario": "12345678",
  "logradouro_destinatario": "Av Atlantica",
  "numero_destinatario": "500",
  "bairro_destinatario": "Copacabana",
  "municipio_destinatario": "Rio de Janeiro",
  "codigo_municipio_destinatario": "3304557",
  "uf_destinatario": "RJ",
  "cep_destinatario": "22010-000",
  "items": [
    { "codigo_produto": "CAMISA-P", "descricao": "Camiseta basica algodao P", "codigo_ncm": "61091000", "icms_origem": 0,
      "quantidade_comercial": 2, "valor_unitario_comercial": 50.00, "codigo_barras_comercial": "7891000100103" },
    { "codigo_produto": "BONE-U", "descricao": "Bone aba curva", "codigo_ncm": "65050090", "icms_origem": 0,
      "quantidade_comercial": 1, "valor_unitario_comercial": 30.00 }
  ],
  "formas_pagamento": [
    { "forma_pagamento": "17", "valor_pagamento": 85.00 },
    { "forma_pagamento": "15", "valor_pagamento": 50.00, "indicador_pagamento": 1 }
  ]
}

Venda por marketplace com cartão

Quando a venda foi intermediada por um marketplace, informe o CNPJ do intermediador (e o seu identificador de vendedor lá). O pagamento por cartão integrado exige credenciadora, bandeira e número de autorização:

{
  "cnpj_intermediador": "03.007.331/0001-41",
  "identificador_intermediador": "123456789",
  "nome_destinatario": "Maria da Silva",
  "cpf_destinatario": "529.982.247-25",
  "logradouro_destinatario": "Av Atlantica",
  "numero_destinatario": "500",
  "bairro_destinatario": "Copacabana",
  "municipio_destinatario": "Rio de Janeiro",
  "codigo_municipio_destinatario": "3304557",
  "uf_destinatario": "RJ",
  "cep_destinatario": "22010-000",
  "items": [
    { "codigo_produto": "CAMISA-P", "descricao": "Camiseta basica algodao P", "codigo_ncm": "61091000", "icms_origem": 0,
      "quantidade_comercial": 1, "valor_unitario_comercial": 100.00 }
  ],
  "formas_pagamento": [
    {
      "forma_pagamento": "03",
      "tipo_integracao_pagamento": 1,
      "cnpj_credenciadora": "03.007.331/0001-41",
      "bandeira_operadora": "01",
      "numero_autorizacao": "A12345"
    }
  ]
}

Com cnpj_intermediador a nota sai com o indicador de intermediador ligado. O identificador_intermediador sozinho (sem o CNPJ) é recusado.

Empresa do regime normal, venda interna

Empresa do Lucro Presumido vendendo dentro do próprio estado. O ICMS, o PIS, a COFINS e o IBS/CBS são calculados pelo regime, sem você informar nada:

{
  "nome_destinatario": "COMERCIAL PAULISTA LTDA",
  "cnpj_destinatario": "11.444.777/0001-61",
  "inscricao_estadual_destinatario": "110042490114",
  "logradouro_destinatario": "Rua Augusta",
  "numero_destinatario": "1000",
  "bairro_destinatario": "Consolacao",
  "municipio_destinatario": "Sao Paulo",
  "codigo_municipio_destinatario": "3550308",
  "uf_destinatario": "SP",
  "cep_destinatario": "01304-001",
  "items": [
    { "codigo_produto": "CAMISA-P", "descricao": "Camiseta basica algodao P", "codigo_ncm": "61091000", "icms_origem": 0,
      "quantidade_comercial": 2, "valor_unitario_comercial": 50.00 }
  ],
  "formas_pagamento": [ { "forma_pagamento": "15", "indicador_pagamento": 1 } ]
}

Se o produto está no catálogo, o item pode ir só com o essencial: o NCM, a origem, a descrição e a unidade vêm do cadastro.

{
  "nome_destinatario": "Maria da Silva",
  "cpf_destinatario": "529.982.247-25",
  "logradouro_destinatario": "Av Atlantica",
  "numero_destinatario": "500",
  "bairro_destinatario": "Copacabana",
  "municipio_destinatario": "Rio de Janeiro",
  "codigo_municipio_destinatario": "3304557",
  "uf_destinatario": "RJ",
  "cep_destinatario": "22010-000",
  "items": [ { "codigo_produto": "CAMISA-P", "quantidade_comercial": 3, "valor_unitario_comercial": 100.00 } ],
  "formas_pagamento": [ { "forma_pagamento": "17" } ]
}

Quando a emissão é recusada

Exemplos reais do que a API devolve na hora, antes de gastar um número:

Campos inválidos (422 requisicao_invalida, com todos os problemas de uma vez):

{
  "codigo": "requisicao_invalida",
  "mensagem": "O campo nome destinatario é obrigatório.",
  "erros": {
    "nome_destinatario": ["O campo nome destinatario é obrigatório."],
    "uf_destinatario": ["O valor informado em uf destinatario é inválido."],
    "items.0.codigo_ncm": ["O campo items.0.codigo_ncm deve ter 8 dígitos."],
    "items.0.icms_valor": ["A API calcula icms_valor a partir da situação tributária e da alíquota informadas; não envie este valor."]
  }
}

Recusa fiscal (422 validacao_fiscal): o cálculo ou a empresa não permitem emitir. Exemplos: total que não fecha, cenário tributário que o motor não suporta, certificado vencido, empresa inativa, produção bloqueada.

{ "codigo": "validacao_fiscal", "mensagem": "Total calculado (11500) difere do total informado (9990)." }

ref já usada com outro conteúdo (409): veja Reenvio de uma ref.

Se a nota passou pela validação e a SEFAZ a rejeitar, o status fica erro_autorizacao e a nota traz o motivo original:

{
  "ref": "PED-1005", "status": "erro_autorizacao", "numero": "3", "chave_nfe": "35261011222333000181550010000000031948157050",
  "status_sefaz": "225", "mensagem_sefaz": "Rejeicao: Falha no Schema XML da NFe", "mensagem": "Rejeição 225: Rejeicao: Falha no Schema XML da NFe"
}

Corrija o problema e reenvie na mesma ref: o número fiscal é o mesmo (rejeição não consome número). Veja os motivos mais comuns em Erros.