Este é o checklist rápido de pré-requisitos antes da 1ª emissão. Pra ver todos os
campos, regimes tributários e tratamento de erros, veja o guia completo
Emitir NF-e.
Conta criada
Partner registrado e token JWT (ou API Key) em mãos
Empresa cadastrada
CNPJ emissor cadastrado via
POST /v1/companiesCertificado enviado
Arquivo
.pfx (A1) com senha válidaChecklist de pré-requisitos
1
Credencial disponível
Você tem uma API Key (
ek_live_/ek_test_, formato recomendado para integração
server-to-server) ou um JWT de POST /v1/auth/login (data.access_token, fluxo de
dashboard)? Ver Autenticação.2
Empresa cadastrada
Você já fez
POST /v1/companies? O id retornado é o issuerId, usado para escolher
o emissor em qualquer módulo (ver aviso abaixo sobre obrigatoriedade por módulo). A
resposta já traz prontoPara: { nfse, nfe, nfce, sandbox, faltando } — leia ali o que falta
para CADA documento fiscal, em vez de descobrir com um 422 na hora de emitir.
avisos[] vem junto: se o município não adere ao Padrão Nacional da NFS-e neste
ambiente, o item MUNICIPIO_NAO_ADERENTE_PADRAO_NACIONAL aparece (NF-e e NFC-e
seguem disponíveis). desconhecido não gera aviso e o cadastro nunca falha por cobertura.3
Certificado enviado
Você já fez
POST /v1/companies/{id}/certificate (campo multipart file, não
certificate)? Se sim, a resposta veio sem erro de senha? Sem certificado,
prontoPara.nfe/prontoPara.nfce/prontoPara.nfse vêm false. Certificado
vencido entra em faltando.nfse como certificadoVencido; de outra pessoa
jurídica (raiz diferente), como certificadoOutroCnpj. O 201 desta rota já traz prontoPara atualizado: não
precisa de um GET extra para ver o flip.4
Ambiente correto para o teste
Todo emissor novo nasce em homologação (
ambienteFiscal: 2). Não tente emitir em
produção sem antes validar em homologação. Ver Sandbox para o
estado real da promoção pra produção.NF-e e NFC-e aceitam
issuerId opcional no payload. Se você só tem uma empresa
cadastrada, pode omitir; a API usa o seu emissor. Com dois ou mais emissores, informe
issuerId (UUID) para escolher o CNPJ; sem ele a API responde 400. NFS-e exige
issuerId explícito no corpo da requisição.Estrutura de uma NF-e
Uma NF-e é composta por 4 blocos no payload (o emissor não entra no body, é resolvido pela API Key/JWT):Campos obrigatórios
Um payload com nomes de campo diferentes destes é rejeitado com 400 antes de chegar na SEFAZ.Raiz
Destinatário
Item (dentro de items[])
Não há campo
numero por item: o índice do array já identifica o item. O item não
exige icms preenchido: sem resolverTributacao, os campos fiscais viajam como
passthrough (o que você mandar é o que vai pro XML); com resolverTributacao: true, o
Cérebro Fiscal completa icms.csosn/icms (Regime Normal)/ibsCbs ausentes.ICMS simplificado (Simples Nacional)
ICMS no Regime Normal (Lucro Real / Lucro Presumido)
O emissorcrt: 3 não informa cst à mão: icms.cst é recusado com
422 CST_NAO_SUPORTADO_NFE (o leiaute exige a modalidade da base de cálculo, campo fora
deste contrato). O caminho que autoriza é resolverTributacao: true: o motor calcula
CST, base, alíquota e valor a partir de NCM, CFOP, UF e origem:
Pagamentos (array, mínimo 1)
Exemplo completo mínimo
- cURL
- Node.js
Resposta de sucesso
Mesmo contrato de resposta nos dois caminhos de emissão (síncrono e lote), envelopado por{ data, meta }:
data.status: "AUTHORIZED" (inglês, mesmo enum usado em GET /v1/nfe/{id} e no webhook
invoice.authorized) está aprovada pela SEFAZ e tem validade fiscal (se o emissor está em
produção: ambienteFiscal: 1). Não há issuer/customer embutidos, nem
xml/xmlPath/pdfPath/invoiceId/message/success/invoice aninhado: o PDF/XML têm
rotas próprias de download (downloads.xml/downloads.pdf apontam pra elas). amount é
string decimal ("100", sem zeros à direita), nunca number cru nem o Decimal.js interno serializado.Como a emissão chega até você
Um payload com nome de campo desconhecido é recusado antes de qualquer processamento (ver Campo desconhecido no payload). Passada essa validação, o caminho síncrono (POST /v1/nfe) e o caminho em lote
(POST /v1/nfe/batch, que enfileira e devolve o desfecho em GET /v1/nfe/queue) convergem
no mesmo destino: a SEFAZ decide, e o resultado chega por webhook ou por consulta.
Erros mais comuns nesta etapa
Próximos passos
Emitir NF-e (guia completo)
ICMS, IPI, PIS, COFINS. Todos os impostos detalhados
Webhooks
Receba a confirmação da SEFAZ em tempo real
Certificados
Gerenciar validade e renovação do certificado A1