Emitir NFe
Emita uma Nota Fiscal Eletrônica (NFe — modelo 55) e transmita para a SEFAZ em uma única chamada.
POST/v1/nfe/emitir
Pré-requisitos
Antes de emitir, você precisa ter:
- Conta criada — Registrar-se
- Empresa cadastrada — com CNPJ e dados fiscais
- Certificado digital A1 — upload pelo dashboard ou API
- Ambiente de homologação — para testes sem efeito fiscal
💡
Use o ambiente de homologação (environment: 2) para testar sem gerar notas fiscais reais. Mude para produção (environment: 1) apenas quando estiver pronto.
Request Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| issuerId | string | Sim | ID da empresa emissora (uuid) |
| naturezaOperacao | string | Sim | Ex: 'VENDA DE MERCADORIA', 'DEVOLUÇÃO' |
| destinatario | object | Sim | Dados do destinatário da nota |
| destinatario.cpfCnpj | string | Sim | CPF ou CNPJ do destinatário |
| destinatario.nome | string | Sim | Nome ou razão social |
| destinatario.endereco | object | Sim | Endereço completo |
| destinatario.indicadorIE | number | Sim | 1=Contribuinte, 2=Isento, 9=Não contribuinte |
| itens | array | Sim | Lista de itens/produtos da nota |
| itens[].codigo | string | Sim | Código interno do produto |
| itens[].descricao | string | Sim | Descrição do produto |
| itens[].ncm | string | Sim | Código NCM (8 dígitos) |
| itens[].cfop | string | Sim | Código CFOP (4 dígitos) |
| itens[].unidade | string | Sim | Unidade de medida (UN, KG, etc.) |
| itens[].quantidade | number | Sim | Quantidade vendida |
| itens[].valorUnitario | number | Sim | Valor unitário em R$ |
| itens[].valorTotal | number | Sim | Valor total do item (qtd × unitário) |
| itens[].icms | object | Sim | Dados de ICMS do item |
| pagamento | object | Sim | Forma e valor do pagamento |
| pagamento.forma | string | Sim | 01=Dinheiro, 02=Cheque, 03=Cartão Crédito, etc. |
| pagamento.valor | number | Sim | Valor total do pagamento em R$ |
| observacoes | string | Não | Informações adicionais da nota |
Exemplos de Request
- cURL
- TypeScript
- Python
- PHP
curl -X POST https://api.engineapi.com.br/v1/nfe/emitir \
-H "Authorization: Bearer sk_test_sua_api_key" \
-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": [{
"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
}
}'
const response = await fetch("https://api.engineapi.com.br/v1/nfe/emitir", {
method: "POST",
headers: {
Authorization: "Bearer sk_test_sua_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
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: [
{
codigo: "PROD001",
descricao: "Camiseta Algodão P",
ncm: "61091000",
cfop: "5102",
unidade: "UN",
quantidade: 2,
valorUnitario: 59.9,
valorTotal: 119.8,
icms: {
origem: 0,
cst: "00",
aliquota: 18,
baseCalculo: 119.8,
valor: 21.56,
},
},
],
pagamento: { forma: "01", valor: 119.8 },
}),
});
const { invoice } = await response.json();
console.log("NFe autorizada:", invoice.accessKey);
import httpx
response = httpx.post(
'https://api.engineapi.com.br/v1/nfe/emitir',
headers={'Authorization': 'Bearer sk_test_sua_api_key'},
json={
'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': [{
'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},
},
)
invoice = response.json()['invoice']
print(f"NFe autorizada: {invoice['accessKey']}")
<?php
$ch = curl_init('https://api.engineapi.com.br/v1/nfe/emitir');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer sk_test_sua_api_key',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'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' => [[
'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],
]),
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
echo "NFe autorizada: " . $data['invoice']['accessKey'];
Response de Sucesso (200)
{
"success": true,
"invoice": {
"id": "nfe_abc123def456",
"accessKey": "35260211222333000144550010000000011000000019",
"number": 1,
"series": 1,
"status": "AUTHORIZED",
"protocol": "135260000001234",
"xml": "https://api.engineapi.com.br/v1/nfe/nfe_abc123def456/xml",
"pdf": "https://api.engineapi.com.br/v1/nfe/nfe_abc123def456/pdf",
"createdAt": "2026-02-14T18:30:00.000Z"
}
}
Status Possíveis
| Status | Significado | Ação |
|---|---|---|
AUTHORIZED | Nota autorizada pela SEFAZ | Nenhuma — nota válida |
REJECTED | Rejeitada pela SEFAZ | Corrija os dados e reenvie |
PROCESSING | Em processamento | Aguarde ou consulte via GET |
CANCELLED | Cancelada | Nota foi cancelada |
CORRECTION | Carta de correção emitida | Nota corrigida |
Tratamento de Erros
400 — Dados Inválidos
{
"statusCode": 400,
"error": "Bad Request",
"message": "Campo 'destinatario.cpfCnpj' é obrigatório"
}
422 — Rejeição SEFAZ
{
"statusCode": 422,
"error": "Unprocessable Entity",
"message": "Rejeição 539: Duplicidade de NFe",
"sefazCode": 539,
"sefazMessage": "Duplicidade de NFe, com diferença na Chave de Acesso"
}
🚨
Rejeições SEFAZ (422) incluem os campos sefazCode e sefazMessage para
facilitar o diagnóstico. Consulte a tabela de
rejeições
para detalhes.
Webhook
Após a emissão, a Engine API dispara um webhook nfe.emitida com o payload:
{
"event": "nfe.emitida",
"data": {
"id": "nfe_abc123def456",
"accessKey": "35260211222333000144550010000000011000000019",
"status": "AUTHORIZED",
"issuerId": "ISSUER_ID"
},
"timestamp": "2026-02-14T18:30:00.000Z"
}
ℹ️
Configure seus webhooks em Dashboard → Configurações → Webhooks ou via API de Webhooks.
Próximos passos
- Cancelar NFe — Cancelamento em até 24h
- Carta de Correção — Corrigir dados da nota
- Consultar NFe — Verificar status
- Download XML/PDF — Obter arquivos