NF-e · Nota Fiscal eletrônica · modelo 55 chave ace_
Nota fiscal entre empresas/pessoas, com destinatário (endereço obrigatório).
O emitente (sua empresa) vem da configuração — você não envia dados do emitente na
emissão. Compartilha o mesmo certificado A1 da NFC-e/MDF-e/CT-e/DCe (série própria serie_nfe).
Cobra 1 unidade por nota autorizada e por CC-e aceita; rejeição não cobra.
POST /nfe/certificado com certificado_base64+senha) e configure
série/ambiente (PUT /nfe/configuracao · {"ambiente":2,"serie_nfe":1,"inscricao_estadual":"ISENTO"}).
O ICMS é escolhido pelo regime tributário do emitente: Simples Nacional usa CSOSN; Lucro
Real/Presumido usa CST.# 1) certificado A1 (compartilhado) curl -X POST .../api/v1/nfe/certificado \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -d '{"certificado_base64":"MIIK...","senha":"1234"}' # 2) série + ambiente (2=homolog, 1=produção) curl -X PUT .../api/v1/nfe/configuracao \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -d '{"ambiente":2,"serie_nfe":1, "inscricao_estadual":"ISENTO"}'
$b64 = base64_encode(file_get_contents('cert.pfx')); $cli->nfe()->enviarCertificado($b64, '1234'); $cli->nfe()->configurar([ 'ambiente' => 2, 'serie_nfe' => 1, 'inscricao_estadual' => 'ISENTO', ]);
Api.EnviarCertificado('nfe', CertToBase64('cert.pfx'), '1234').Free; Api.Put('nfe/configuracao', JSONFromStr('{"ambiente":2,"serie_nfe":1}')).Free;
Cabeçalho da nota
Todos opcionais (têm padrão). Enviados na raiz do JSON.
| Campo | Padrão | Valores |
|---|---|---|
natureza_operacao | VENDA DE MERCADORIA | texto livre |
tipo_operacao | 1 | 0=entrada, 1=saída |
destino_operacao | 1 | 1=interna, 2=interestadual, 3=exterior (deve casar com o CFOP: 5xxx interno, 6xxx interestadual) |
finalidade | 1 | 1=normal, 2=complementar, 3=ajuste, 4=devolução |
consumidor_final | 1 | 0=não, 1=sim |
presenca | 1 | 0=n/a, 1=presencial, 2=internet, 3=teleatendimento, 4=NFC-e domicílio, 9=outros |
data_saida | agora | ISO-8601 (ex.: 2026-07-26T10:00:00-03:00) |
info_complementar | — | texto livre (infCpl da nota) |
{
"natureza_operacao": "VENDA DE MERCADORIA",
"tipo_operacao": 1,
"destino_operacao": 1,
"finalidade": 1,
"consumidor_final": 1,
"presenca": 1,
"info_complementar": "Pedido 12345"
}
Destinatário obrigatório
| Campo | Descrição | |
|---|---|---|
documento | obrig. | CPF (11 díg) ou CNPJ (14 díg), só números |
nome | obrig. | Nome / razão social |
indicador_ie | padrão 9 | 1=contribuinte ICMS, 2=isento, 9=não contribuinte |
inscricao_estadual | opc. | Obrigatória se indicador_ie=1 |
email | opc. | Para envio da nota |
endereco | obrig. | objeto (ver abaixo) |
Endereço (do destinatário)
| Campo | |
|---|---|
logradouro, numero, bairro, cidade, uf, cep | obrig. |
cod_municipio — código IBGE de 7 dígitos | obrig. |
complemento, telefone | opc. |
{
"destinatario": {
"documento": "12345678000195",
"nome": "CLIENTE DESTINATARIO LTDA",
"indicador_ie": 9,
"inscricao_estadual": null,
"email": "[email protected]",
"endereco": {
"logradouro": "AV BRASIL", "numero": "100",
"complemento": "SALA 2", "bairro": "CENTRO",
"cod_municipio": "3304557",
"cidade": "RIO DE JANEIRO",
"uf": "RJ", "cep": "20090003"
}
}
}
Itens / produtos obrigatório
Lista produtos[] com 1+ item. Cada item:
| Campo | Descrição | |
|---|---|---|
codigo | obrig. | Código interno do produto |
descricao | obrig. | Descrição do item |
ncm | obrig. | NCM (8 díg) |
cfop | obrig. | CFOP (4 díg) — casa com destino_operacao |
unidade | obrig. | UN, KG, CX, L… |
quantidade | obrig. | número |
valor_unitario | obrig. | número (o total do item = qtd × unit) |
ean | SEM GTIN | Código de barras |
origem | 0 | 0=nacional, 1=import. direta, 2=import. mercado interno… |
csosn | 102 | Simples Nacional (só regime Simples) |
cst_icms | 00 | Lucro Real/Presumido |
aliq_icms | 18 | % de ICMS (regime normal) |
cst_pis / cst_cofins | 07 | CST PIS/COFINS |
ICMSSN com o csosn (padrão 102 — sem permissão de crédito). Se é Lucro
Real/Presumido, usa ICMS com cst_icms + aliq_icms. PIS/COFINS
saem com CST 07 (isento) por padrão.{
"produtos": [
{
"codigo": "001",
"ean": "7896292301382",
"descricao": "REFRIGERANTE LATA 350ML",
"ncm": "22021000",
"cfop": "5102",
"unidade": "UN",
"quantidade": 2,
"valor_unitario": 5.50,
"origem": 0,
"csosn": "102",
// regime normal, use:
"cst_icms": "00", "aliq_icms": 18
}
]
}
Totais, frete e transporte opcionais
| Campo | Descrição |
|---|---|
totais.frete | Valor do frete (somado ao total da nota) |
totais.seguro | Valor do seguro (somado) |
totais.desconto | Desconto (subtraído) |
totais.outros | Outras despesas (somado) |
frete.tipo | Modalidade: 0=emitente, 1=destinatário, 2=terceiros, 3=próprio remet., 4=próprio dest., 9=sem frete (padrão) |
transporte.razao_social, cnpj_cpf, inscricao_estadual, endereco, municipio, uf | Transportadora |
transporte.placa, placa_uf, codigo_antt | Veículo |
transporte.volumes[] | quantidade, especie, marca, numeracao, peso_liquido, peso_bruto |
O total da nota (vNF) é calculado: soma dos itens + frete + seguro + outros − desconto.
{
"totais": { "frete": "10.00", "desconto": "5.00" },
"frete": { "tipo": 0 },
"transporte": {
"razao_social": "TRANSPORTES XYZ LTDA",
"cnpj_cpf": "99888777000166",
"placa": "ABC1D23", "placa_uf": "RJ",
"volumes": [
{ "quantidade": 2, "especie": "CAIXA",
"peso_bruto": "12.500" }
]
}
}
Pagamento opcional
Objeto pagamento com formas[] e troco. Se omitido,
assume 1 forma "à vista" (01) no valor da nota. Os campos de cada forma são
os mesmos da NFC-e — veja a tabela completa em NFC-e.
01 dinheiro | 02 cheque | 03 cartão crédito |
04 cartão débito | 05 crédito loja | 10 vale alimentação |
11 vale refeição | 12 vale presente | 13 vale combustível |
14 duplicata mercantil | 15 boleto | 16 depósito bancário |
17 PIX dinâmico | 18 transf. / carteira digital | 19 fidelidade / cashback |
20 PIX estático | 21 crédito em loja | 22 pgto. eletrônico não informado |
90 sem pagamento | 99 outros exige descricao |
tipo_integracao. Para
03 04 10 11 12 13 17 18 19 20 21 — PIX incluído — a SEFAZ obriga o grupo
card; sem ele a nota volta com rejeição 391. Preenchemos
tipo_integracao: 2 (não integrado) quando você não manda. E
forma: "99" exige descricao — sem ela devolvemos 422 na hora.{
"pagamento": {
"formas": [
{ "forma": "01", "valor": 6.00 },
{ "forma": "17", "valor": 5.00 },
{ "forma": "99", "valor": 1.00,
"descricao": "Vale do funcionário" }
],
"troco": 0
}
}
Emitir — requisição completa
Resposta 200: nfe_id (use nas demais chamadas), numero,
serie, chave (44 díg), protocolo e status
(autorizada).
curl -X POST .../api/v1/nfe/emitir \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "natureza_operacao": "VENDA DE MERCADORIA", "finalidade": 1, "destino_operacao": 1, "destinatario": { "documento": "12345678000195", "nome": "CLIENTE LTDA", "indicador_ie": 9, "endereco": {"logradouro":"AV BRASIL","numero":"100", "bairro":"CENTRO","cod_municipio":"3304557", "cidade":"RIO DE JANEIRO","uf":"RJ","cep":"20090003"} }, "produtos": [ {"codigo":"001","descricao":"PRODUTO X","ncm":"22021000", "cfop":"5102","unidade":"UN","quantidade":1, "valor_unitario":10.00,"origem":0} ], "totais": {"frete":"0.00","desconto":"0.00"}, "pagamento": {"formas":[{"forma":"01","valor":10.00}]}, "info_complementar": "Pedido 12345" }'
$nota = $cli->nfe()->emitir([ 'destinatario' => [ /* ... */ ], 'produtos' => [ /* ... */ ], 'pagamento' => ['formas'=>[['forma'=>'01','valor'=>10]]], ]); echo $nota['status'], $nota['chave'];
R := Api.EmitirNFe(JSONFromStr(JsonDaNota)); try Id := R.Int('nfe_id'); Cha := R.Str('chave'); finally R.Free; end;
{ "nfe_id": 33, "numero": 6, "serie": 1,
"chave": "33260712345678000195550010000000061...",
"protocolo": "133260000012345",
"status": "autorizada" }
Baixar XML e DANFE
Devolvem o arquivo direto (não o envelope JSON): o XML autorizado e o DANFE em PDF.
{id} = o nfe_id da emissão.
curl .../api/v1/nfe/33/xml \ -H "Authorization: Bearer ace_SEU_TOKEN" -o nota.xml curl .../api/v1/nfe/33/danfe \ -H "Authorization: Bearer ace_SEU_TOKEN" -o nota.pdf
$cli->nfe()->xml(33, 'nota.xml'); $cli->nfe()->danfe(33, 'nota.pdf'); // sem 2º arg: devolve ['bytes','content_type','filename']
Api.BaixarXML('nfe', 33, 'nota.xml'); Api.BaixarPDF('nfe', 33, 'nota.pdf');
Cancelar
Body: {"justificativa":"..."} — 15 a 255 caracteres. Só dentro do prazo legal
(24h para pleno efeito).
Carta de Correção (CC-e) cobra 1 un.
Body: {"correcao":"texto de 15 a 1000 caracteres"}. A sequência é automática (até 20 por
nota). GET lista as CC-e da nota. Não corrige valores/impostos, destinatário nem datas.
Pré-visualizar · Listar · Detalhe
Pré-visualizar gera o XML/rascunho sem transmitir à SEFAZ (mesmo corpo do emitir). Listar traz o
campo nfes; detalhe traz a nota + eventos.
curl -X POST .../api/v1/nfe/33/cancelar \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -d '{"justificativa":"Erro nos dados da nota fiscal"}' curl -X POST .../api/v1/nfe/33/carta-correcao \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -d '{"correcao":"Endereco de entrega correto: Rua X, 50"}'
$cli->nfe()->cancelar(33, 'Erro nos dados da nota'); $cli->nfe()->cartaCorrecao(33, 'Transporte por conta do dest.'); $cli->nfe()->listarCartasCorrecao(33); $cli->nfe()->listar(50, 0); $cli->nfe()->obter(33);
Api.Cancelar('nfe', 33, 'Erro nos dados').Free; Api.Post('nfe/33/carta-correcao', JSONFromStr('{"correcao":"..."}')).Free;
{ "cce_id": 4, "sequencia": 1,
"protocolo": "133...", "status": "aprovada" }
Erros específicos da NF-e
| HTTP · code | Quando |
|---|---|
422 emissao_rejeitada | SEFAZ recusou — o motivo vem na message (ex.: "sem informação de endereço do destinatário", "CFOP interestadual e idDest ≠ 2", duplicidade). Não cobra. |
422 correcao_rejeitada · correcao_invalida | CC-e recusada pela SEFAZ ou texto fora de 15–1000 |
422 cancelamento_rejeitado · justificativa_curta | Cancelamento fora do prazo, ou justificativa < 15 caracteres |
403 produto_nao_vinculado · produto_suspenso | Empresa sem o produto nfe ativo |
404 nota_nao_encontrada · nota_indisponivel | {id} inexistente ou sem XML/DANFE |
{ "ok": false, "status": 422,
"error": {
"code": "emissao_rejeitada",
"message": "Rejeicao 794: NF-e sem a informacao
de endereco do destinatario" },
"data": { "nfe_id": 34 } }