Skip to main content

Emitir NFe

Emita uma Nota Fiscal Eletrônica (NFe — modelo 55) e transmita para a SEFAZ em uma única chamada REST. Endpoint: POST https://api.engineapi.com.br/nfe/emitir

Pré-requisitos

1

Conta criada

Registre-se em app.engineapi.com.br e obtenha seu token via POST /auth/login.
2

Empresa cadastrada

Cadastre o CNPJ emissor via POST /companies. Guarde o id retornado — esse é o issuerId.
3

Certificado digital enviado

Faça upload do .pfx via POST /companies/{issuerId}/certificate. Sem certificado, a emissão falha.
4

Ambiente definido

Use environment: 2 na empresa para homologação e environment: 1 para produção.
Notas em homologação (environment: 2) são transmitidas para o SEFAZ de teste e não têm validade fiscal. Use para testar sem risco.

Exemplos de Request

curl -X POST https://api.engineapi.com.br/nfe/emitir \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "issuerId": "ISSUER_ID",
    "naturezaOperacao": "VENDA DE MERCADORIA",
    "destinatario": {
      "cnpj": "99888777000155",
      "nome": "Cliente Exemplo SA",
      "endereco": {
        "logradouro": "Av Brasil",
        "numero": "500",
        "bairro": "Centro",
        "codigoMunicipio": "3550308",
        "municipio": "São Paulo",
        "uf": "SP",
        "cep": "01001000"
      },
      "indicadorIE": 1
    },
    "itens": [{
      "numero": 1,
      "codigo": "PROD001",
      "descricao": "Camiseta Algodão P",
      "ncm": "61091000",
      "cfop": "5102",
      "unidade": "UN",
      "quantidade": 2,
      "valorUnitario": 59.90,
      "valorTotal": 119.80,
      "icms": {
        "origem": 0,
        "cst": "00",
        "aliquota": 18,
        "baseCalculo": 119.80,
        "valor": 21.56
      }
    }],
    "pagamento": { "forma": "01", "valor": 119.80 }
  }'

ICMS por Regime Tributário

O campo icms muda conforme o regime da empresa emissora:
Use quando taxRegime: 3. Informe apenas origem e csosn.
"icms": {
  "origem": 0,
  "csosn": "400"
}
CSOSNQuando usar
102Tributada pelo Simples, sem permissão de crédito
400Não tributada pelo Simples Nacional
500ICMS cobrado anteriormente por substituição tributária
900Outros
Use quando taxRegime: 1 ou taxRegime: 2. Requer cst, aliquota, baseCalculo e valor.
"icms": {
  "origem": 0,
  "cst": "00",
  "aliquota": 18,
  "baseCalculo": 119.80,
  "valor": 21.56
}
CSTSignificado
00Tributada integralmente
20Com redução de base de cálculo
40Isenta
41Não tributada
60Cobrada anteriormente por ST
CódigoOrigem
0Nacional
1Estrangeira — importação direta
2Estrangeira — adquirida no mercado interno
3Nacional com mais de 40% de conteúdo estrangeiro
4Nacional produzida conforme processos básicos

Campos de Referência

Raiz

CampoTipoObrigatórioDescrição
issuerIdstring (UUID)SimID da empresa emissora
naturezaOperacaostringSimEx: "VENDA DE MERCADORIA"
destinatarioobjetoSimDados do destinatário
itensarraySimMínimo 1 item
pagamentoobjetoSimForma e valor
observacoesstringInformações adicionais

Destinatário

CampoTipoObrigatórioDescrição
cnpj ou cpfstringSim (um)Documento do destinatário
nomestringSimRazão social ou nome
indicadorIEnúmeroSim1=contribuinte, 2=isento, 9=não contribuinte
inscricaoEstadualstringIE quando indicadorIE: 1
endereco.*objetoSimEndereço completo

Item

CampoTipoObrigatórioDescrição
numeronúmeroSimSequencial do item (1, 2, 3…)
codigostringSimCódigo interno do produto
descricaostringSimDescrição do produto
ncmstringSim8 dígitos — Nomenclatura Comum do Mercosul
cfopstringSim4 dígitos — ver CFOP
unidadestringSimUN, KG, MT, CX, etc.
quantidadenúmeroSimQuantidade
valorUnitarionúmeroSimValor por unidade em R$
valorTotalnúmeroSimquantidade × valorUnitario
icmsobjetoSimDados tributários do item

Response de sucesso

{
  "success": true,
  "invoice": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accessKey": "35260211222333000144550010000000011000000019",
    "number": 1,
    "series": 1,
    "status": "AUTHORIZED",
    "protocol": "135260000001234",
    "danfeUrl": "/nfe/3fa85f64.../danfe",
    "createdAt": "2026-04-26T18:30:00.000Z"
  }
}
StatusSignificadoAção
AUTHORIZEDAprovada pela SEFAZNenhuma — nota válida
REJECTEDRejeitadaCorrija e reenvie
PROCESSINGEm processamentoConsulte via GET /nfe/{id}
CANCELLEDCanceladaNota cancelada

Tratamento de Erros

Rejeição SEFAZ (422)

{
  "statusCode": 422,
  "message": "Rejeição 539: Duplicidade de NFe",
  "sefazCode": 539,
  "sefazMessage": "Duplicidade de NFe, com diferença na Chave de Acesso"
}
Rejeições SEFAZ retornam 422 com os campos sefazCode e sefazMessage. Use o sefazCode para consultar a tabela oficial de rejeições da Fazenda.

Webhook após emissão

A Engine API dispara automaticamente um evento invoice.authorized quando a SEFAZ aprova:
{
  "event": "invoice.authorized",
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "accessKey": "35260211222333000144550010000000011000000019",
    "status": "AUTHORIZED",
    "issuerId": "ISSUER_ID"
  },
  "timestamp": "2026-04-26T18:30:00.000Z"
}
Configure seus webhooks em Dashboard → Configurações → Webhooks ou via guia de webhooks.

Próximos passos

Cancelar NFe

Cancelamento em até 24h após a autorização

Carta de Correção

Corrija dados sem cancelar a nota

Webhooks

Receba notificações automáticas em tempo real