Developers / Documentos Fiscais / NF-e
Documentos Fiscais · NF-e

Emitir NF-e POST

Emite uma Nota Fiscal Eletrônica (modelo 55) de venda/circulação de mercadoria -- o motor fiscal calcula ICMS/IPI/PIS/COFINS, monta o XML, assina com o certificado digital do contribuinte e transmite para a SEFAZ da UF do emitente.

Quando utilizar

Sempre que seu ERP precisar emitir uma NF-e de saída (venda) ou entrada em nome do contribuinte cadastrado. Cada chamada gera exatamente um documento -- para NFC-e (modelo 65, venda a consumidor final) use o endpoint específico de NFC-e.

Pré-requisitos

  • Contribuinte (emitente) já cadastrado -- POST /v1/contribuintes.
  • Certificado digital A1 vinculado ao contribuinte -- POST /v1/contribuintes/{id}/certificado-digital.
  • Inscrição estadual ativa na UF do emitente.
  • Você controla a numeração (ide.numero/ide.serie) -- a API não auto-incrementa, diferente do RPS de NFS-e.
  • Responsável técnico cadastrado na sua conta -- CNPJ, nome, e-mail e telefone de contato, preenchidos em Área do Cliente → Responsável Técnico. Sem isso, toda emissão de NF-e/CT-e/MDF-e falha com status: "ERROR". Ver Responsável técnico abaixo.

Responsável técnico

O grupo infRespTec do layout oficial identifica quem desenvolve/opera o sistema usado pra emitir o documento -- na sua conta CentralFiscal, não em cada contribuinte individual. Não existe campo responsavel_tecnico no corpo desta requisição -- a API resolve automaticamente a partir do cadastro da sua conta (CNPJ + nome/e-mail/telefone de contato, preenchidos uma vez em Área do Cliente → Responsável Técnico).

⚠️
Bloqueante. Se sua conta não tiver CNPJ válido (14 dígitos) ou os 3 campos de contato preenchidos, toda emissão de NF-e, CT-e e MDF-e falha com status: "ERROR" e mensagem explicando o que falta -- nenhum documento incompleto chega a ser transmitido. Alguns estados (AL/AM/MS/PE/PR/SC/TO) já rejeitam NF-e sem esse grupo na SEFAZ (rejeição 972); CT-e/MDF-e exigem o grupo sempre que enviado, com CNPJ obrigatório (sem opção de branco).

Fluxo da operação

POST /v1/nfe/emissoes
Motor calcula ICMS/IPI/PIS/COFINS, assina e transmite pra SEFAZ
200 OK · resultado final (mesma chamada)
💡
Síncrono, mesmo padrão de CT-e/MDF-e/NFS-e. A própria chamada POST já calcula os tributos, assina e transmite pra SEFAZ -- a resposta já vem com status final (AUTHORIZED/REJECTED/ ERROR/PROCESSING), não um "recebido, consulte depois". Não existe notificação automática hoje -- GET /v1/nfe/emissoes/{transmissao_id} continua disponível pra reconsulta, mas normalmente não é necessário logo após o POST.

Endpoint

POST https://areacliente.centralfiscal.com.br/v1/nfe/emissoes

Headers

HeaderValor
AuthorizationBearer <sua_api_key>obrigatório
Content-Typeapplication/jsonobrigatório
Idempotency-Keystring livre, definida por vocêopcional -- alternativa ao campo idempotencia no corpo
Acceptapplication/pdfopcional -- só tem efeito com so_gerar_xml=true e quando o PDF foi gerado com sucesso; ver nota abaixo
💡
so_gerar_xml + PDF de pré-visualização. Por padrão (sem mandar Accept, ou mandando Accept: application/json), a resposta de so_gerar_xml=true já traz os dois juntos numa única chamada -- xml_assinado e pdf_preview_base64 (base64) no mesmo JSON. Não é preciso chamar duas vezes nem existem duas rotas. Se você mandar Accept: application/pdf, a resposta muda pra devolver só o PDF puro no corpo (Content-Type: application/pdf, sem o XML) -- útil quando você só quer abrir o documento direto num navegador/iframe sem decodificar base64. Se o PDF não puder ser gerado (XML inválido, falha na montagem), a resposta cai de volta pro JSON normal mesmo com Accept: application/pdf, nunca devolve um PDF vazio ou corrompido.

Body

O corpo do NF-e segue de perto os grupos do XML -- clique num campo com pra expandir.

so_gerar_xml
boolean
Se true, roda o pipeline completo (IBS/CBS, crítica tributária, XSD pré-assinatura, assinatura real com o certificado do emitente, XSD pós-assinatura) e devolve o XML assinado em xml_assinado sem transmitir à SEFAZ -- nunca toca a rede da SEFAZ. Útil pra conferir o documento antes de emitir de verdade. Não consome idempotência nem número/série de verdade (não fica gravado como transmissão). A resposta também traz pdf_preview_base64: um PDF (base64) do DANFE, com a marca d'água "PRÉ-VISUALIZAÇÃO" (nunca foi transmitido) -- vem null se o XML não pôde ser gerado ou se a montagem do PDF falhar (o XML em si nunca fica bloqueado por isso). Se você mandar o header Accept: application/pdf na mesma chamada, a resposta vem como o PDF puro (Content-Type: application/pdf) em vez do JSON com base64 -- útil pra abrir direto num navegador/cliente REST sem decodificar nada. Só funciona quando o PDF realmente foi gerado; se não deu (XML inválido, falha na montagem), a resposta continua vindo em JSON. Default false -- os demais campos abaixo (emitente_documento, ide, emitente, etc.) são os mesmos com ou sem so_gerar_xml, ele só muda o que a API faz com o resultado (transmite ou não).
emitente_documentorequired
string
CNPJ do emitente, sem pontuação -- precisa estar cadastrado e com contrato ATIVO.
required
object
Identificação do documento (grupo <ide>).
serierequired
string
Série da NF-e.
numerorequired
string
Número sequencial dentro da série -- controlado por você, a API não auto-incrementa.
data_emissaorequired
string <date-time>
Com fuso, ex.: 2026-08-06T10:00:00-03:00.
natureza_operacaorequired
string
Ex.: "Venda de mercadoria" -- aparece no DANFE.
municipio_fato_geradorrequired
integer
Código IBGE (7 dígitos) -- normalmente o do emitente.
tipo_operacao
string
Enum: ENTRADASAIDA
finalidade
string
Enum: 123456
1 Normal, 2 Complementar, 3 Ajuste, 4 Devolução, 5 Nota de crédito, 6 Nota de débito. 5/6 são finalidades novas da reforma tributária (LC 214/2025) e exigem tipo_nota_credito/tipo_nota_debito respectivamente -- sem isso a emissão falha.
destino_operacao
string
Enum: 123
1 Interna, 2 Interestadual, 3 Exterior. Se omitido, a API deriva automaticamente comparando a UF do destinatário com a do emitente: destinatário com uf: "EX" → Exterior; UF do destinatário diferente da do emitente → Interestadual; UF igual → Interna.
tipo_nota_credito
string
Enum: 010203040506
tpNFCredito -- obrigatório quando finalidade: "5". 01 Multa e juros, 02 Apropriação de crédito presumido de IBS sobre saldo devedor na ZFM (art. 450 §1º LC 214/25), 03 Retorno por recusa na entrega ou não localização do destinatário, 04 Redução de valores, 05 Transferência de crédito na sucessão, 06 Retorno por recusa parcial na entrega.
tipo_nota_debito
string
Enum: 0102030405060708
tpNFDebito -- obrigatório quando finalidade: "6". 01 Transferência de créditos para Cooperativas, 02 Anulação de Crédito por Saídas Imunes/Isentas, 03 Débitos de notas fiscais não processadas na apuração, 04 Multa e juros, 05 Transferência de crédito na sucessão, 06 Pagamento antecipado, 07 Perda em estoque (Perecimento, Perda, Furto, Roubo), 08 Desenquadramento do Simples Nacional.
codigo_indicador_operacao
string
cIndOp -- código indicador do local da operação de fornecimento (6 dígitos).
object
gCompraGov.
tipo_ente_governamentalrequired
string
tpEnteGov.
percentual_redutorrequired
number
pRedutor.
tipo_operacaorequired
string
tpOperGov -- 2 exige exatamente 1 chave em chaves_documento_fiscal_anterior, 3 aceita várias, 1/4 não aceita nenhuma.
chaves_documento_fiscal_anterior
Array of strings
refDFeAnt -- chave(s) de acesso do(s) documento(s) fiscal(is) anterior(es). Quantidade validada de acordo com tipo_operacao (ver acima).
consumidor_final
string
Enum: NORMALCONSUMIDOR_FINAL
indFinal. Default: NORMAL. Toda NFC-e (modelo 65) normalmente é CONSUMIDOR_FINAL.
presenca_comprador
string
Enum: NAO_SE_APLICAPRESENCIALINTERNETTELEATENDIMENTOENTREGA_DOMICILIOPRESENCIAL_FORA_ESTABELECIMENTONAO_PRESENCIAL_OUTROS
indPres. Default: NAO_PRESENCIAL_OUTROS -- errado pra venda de balcão. Informe PRESENCIAL explicitamente em NFC-e de PDV.
required
object PessoaFiscal
Dados fiscais do emitente. destinatario usa exatamente o mesmo formato.
documentorequired
string
CNPJ ou CPF, sem pontuação. Em destinatario, obrigatório para modelo 55.
razao_socialrequired
string
nome_fantasia
string
xFant.
required
object
logradourorequired
string
numerorequired
string
bairrorequired
string
municipiorequired
string
municipio_ibge
integer
uf
string
ceprequired
string
telefone
string
fone. Também aceito solto na raiz do emitente (fora de endereco).
pais_codigo
string
cPais -- código BACEN do país. Também aceito solto na raiz.
pais
string
xPais. Também aceito solto na raiz.
inscricao_estadual
string
Obrigatória para contribuinte de ICMS.
municipio_ibgerequired
integer
ufrequired
string
crt
string
Enum: 1234
Só existe em emitente -- destinatário não tem CRT. 1 Simples Nacional, 2 Simples Nacional excesso de sublimite, 3 Regime Normal, 4 Simples Nacional MEI. Decide se o motor monta o item com CST (regime normal) ou CSOSN (Simples Nacional) -- enviar csosn no item sem crt correto no emitente falha. Se omitido, usa o regime já cadastrado do contribuinte. crt: 4 (MEI) só aceita csosn: "900" -- é o único CSOSN que o layout oficial associa a MEI; qualquer outro (101, 102, 500 etc.) falha a emissão.
iest
string
Só existe em emitente. IEST -- Inscrição Estadual do Substituto Tributário.
cnae
string
Só existe em emitente. CNAE fiscal (7 dígitos), dentro do grupo opcional "informações de interesse da Prefeitura" -- exige inscricao_municipal informada junto (grupo indivisível no XSD, falha se vier um sem o outro).
isuf
string
Inscrição na SUFRAMA (operações com benefícios de incentivos fiscais sob controle da SUFRAMA), 8 ou 9 dígitos. Aceito tanto em emitente (ISUFEmit) quanto em destinatario (ISUF).
required
object PessoaFiscal
Mesmo formato de emitente. Obrigatório para modelo 55.
documentorequired
string
CNPJ ou CPF, sem pontuação. Deixa de ser obrigatório quando identificador_estrangeiro vier preenchido (comprador estrangeiro sem documento brasileiro).
razao_socialrequired
string
required
object
logradourorequired
string
numerorequired
string
bairrorequired
string
municipiorequired
string
municipio_ibge
integer
uf
string
Use EX pra destinatário no exterior (operação de exportação) -- ver cep abaixo.
cep
string
Obrigatório quando uf não é EX. Em operação com o exterior (uf: "EX") pode ser omitido -- o XML sai sem <CEP> (campo opcional no XSD nesse caso). municipio_ibge também pode ser omitido junto -- a API usa o código reservado 9999999 automaticamente.
telefone
string
fone. Também aceito solto na raiz do destinatário (fora de endereco).
pais
string
xPais -- nome do país. Default BRASIL quando omitido -- exceto com uf: "EX", onde vira obrigatório (não tem como a API adivinhar qual dos ~240 países é o destino). Também aceito solto na raiz.
pais_codigo
string
cPais -- código BACEN do país. Default 1058 (Brasil). Com uf: "EX" é opcional: se você mandar só pais (o nome), a API resolve o código sozinha por uma tabela oficial de ~240 países -- só precisa informar pais_codigo explicitamente se souber um código que a tabela não cobre direito. Também aceito solto na raiz.
inscricao_estadual
string
Obrigatória para contribuinte de ICMS.
indicador_ie
string
Enum: 129
indIEDest: 1 contribuinte de ICMS, 2 contribuinte isento de inscrição, 9 não contribuinte. Default: 1 se documento tiver 14 dígitos (CNPJ); 9 automaticamente se tiver 11 dígitos (CPF, nunca é contribuinte de ICMS). Venda a pessoa física sem informar isso corretamente é rejeitada pela SEFAZ -- informe explicitamente se souber o caso exato (ex.: CNPJ isento = 2).
email
string
Só existe em destinatario -- emitente não tem email no XSD (aceito se enviado ali, mas nunca transmitido no XML).
isuf
string
Inscrição na SUFRAMA (ISUF), 8 ou 9 dígitos. Também aceito em emitente (ISUFEmit).
identificador_estrangeiro
string
Só existe em destinatario. idEstrangeiro -- terceira alternativa (além de CNPJ/CPF) pra comprador estrangeiro sem documento brasileiro. Quando informado, documento deixa de ser obrigatório.
municipio_ibgerequired
integer
ufrequired
string
object
Local de retirada, quando diferente do endereço do emitente (grupo <retirada>, XSD TLocal). Se documento não vier, assume o CNPJ/CPF do próprio emitente.
documento
string
Se omitido, assume o CNPJ/CPF do emitente (ver acima) -- na prática nunca falha por causa deste campo.
razao_social
string
xNome -- nome do expedidor/recebedor no local.
logradourorequired
string
Obrigatório se o objeto retirada for enviado.
numerorequired
string
complemento
string
bairrorequired
string
municipio_ibgerequired
integer
municipiorequired
string
ufrequired
string
cep
string
pais_codigo
string
Código BACEN do país -- omitido do XML se não informado.
pais
string
telefone
string
email
string
inscricao_estadual
string
object
Local de entrega, quando diferente do endereço do destinatário (grupo <entrega>, mesma estrutura TLocal de retirada acima). Mesmos campos e mesma regra de obrigatoriedade de retirada (logradouro/numero/bairro/municipio_ibge/municipio/uf obrigatórios se o objeto for enviado); se documento não vier, assume o CNPJ/CPF do próprio destinatário.
required
Array of objects
Lista de produtos/serviços.
numero_item
integer
nItem. Se omitido, a API numera na ordem em que os itens aparecem no array.
codigorequired
string
cProd -- código do produto no seu sistema.
descricaorequired
string
ean
string
Default: "SEM GTIN"
cEAN/GTIN, quando o produto tem código de barras.
ean_tributavel
string
Default: "SEM GTIN"
cEANTrib -- GTIN da unidade tributável. Pode ser diferente de ean quando a unidade tributável não é a mesma da comercial.
ncmrequired
string
8 dígitos.
cest
string
Código Especificador da Substituição Tributária, quando o NCM está sujeito a ST.
codigo_beneficio_fiscal_produto
string
cBenef — código de benefício fiscal do produto (isenção, redução de base, suspensão, diferimento etc.), quando a UF do emitente exigir (Convênio ICMS 42/16 — varia por estado, confira a tabela da SEFAZ). Diferente de tributacao.icms.codigo_beneficio_fiscal, que só vale pro CST 51.
cfoprequired
string
unidade_comercialrequired
string
uCom. Também usada como unidade tributável (uTrib) -- a API não suporta unidades comercial/tributável diferentes.
quantidade_comercialrequired
number
valor_unitario_comercialrequired
number
valor_produtorequired
number
vProd = quantidade × valor unitário comercial. A API não recalcula/confere -- envie o valor certo.
unidade_tributavel
string
Aceito mas ignorado -- ver unidade_comercial.
quantidade_tributavel
number
Aceito mas ignorado -- ver quantidade_comercial.
valor_unitario_tributavel
number
Aceito mas ignorado -- ver valor_unitario_comercial.
valor_frete
number
valor_seguro
number
valor_desconto
number
valor_outros
number
pedido_compra
string
xPed -- número do pedido de compra, uso do emissor pra controle de B2B com o cliente. Máx. 15 caracteres.
numero_item_pedido
string
nItemPed -- número do item dentro do pedido de compra informado em pedido_compra. Máx. 6 dígitos.
informacoes_complementares_item
string
infAdProd -- informações adicionais do produto (norma referenciada, observação livre etc.), específicas deste item. Diferente de informacoes_complementares (nível raiz do documento), que vai no campo infAdic/xInfComp. Máx. 500 caracteres.
codigo_ex_tipi
string
EXTIPI -- código EX TIPI (exceção da TIPI), 2 a 3 dígitos.
classificacao_cred_pres_ibs_zfm
string
tpCredPresIBSZFM -- classificação pra subapuração do IBS na Zona Franca de Manaus. Campo de <prod>, diferente do crédito presumido de IBS dentro de tributacao.ibs_cbs.
Array of objects
gCred -- crédito presumido de ICMS na UF aplicado ao item (até 4 ocorrências, Convênio ICMS).
codigo_beneficio_fiscalrequired
string
cCredPresumido -- código do benefício fiscal na UF, 8 ou 10 caracteres.
percentualrequired
number
pCredPresumido.
valorrequired
number
vCredPresumido.
valor_item
number
vItem -- valor total do item, participação no total da nota (a soma dos itens deve bater com o total da NF-e). Campo filho direto de <det> (diferente de valor_produto, que é vProd dentro de <prod>).
object
DFeReferenciado -- referência a um item de outro documento fiscal (devolução parcial referenciando o item específico do documento original). Filho direto de <det> -- diferente do grupo referenciados (nível raiz), que referencia o documento inteiro.
chave_acessorequired
string
Chave de acesso (44 dígitos) do DFe original.
numero_item
string
nItem daquele documento (não deste).
Array of objects
DI -- Declaração de Importação (NT 2011/004), até 100 por item.
numero_direquired
string
nDI -- número do DI/DSI/DIRE/DUImp.
data_registrorequired
string <date>
dDI.
local_desembaraco_aduaneirorequired
string
xLocDesemb.
uf_desembaraco_aduaneirorequired
string
UFDesemb.
data_desembaraco_aduaneirorequired
string <date>
dDesemb.
via_transporte_internacionalrequired
string
tpViaTransp -- 1 Marítima, 2 Fluvial, 3 Lacustre, 4 Aérea, 5 Postal, 6 Ferroviária, 7 Rodoviária, 8 Conduto, 9 Meios próprios, 10 Entrada/saída ficta, 11 Courier, 12 Em mãos, 13 Por reboque.
forma_importacaorequired
string
tpIntermedio -- 1 por conta própria, 2 por conta e ordem, 3 encomenda.
codigo_exportadorrequired
string
cExportador -- código interno do exportador no seu sistema.
valor_afrmm
number
vAFRMM -- adicional de frete pra renovação de marinha mercante.
documento_adquirente_ou_encomendante
string
CNPJ ou CPF do adquirente/encomendante -- a API decide pelo tamanho do número.
uf_adquirente_ou_encomendante
string
UFTerceiro.
required
Array of objects
adi -- adições da DI (até 999).
numero_sequencial_adicaorequired
string
nSeqAdic.
codigo_fabricante_estrangeirorequired
string
cFabricante.
numero_adicao
string
nAdicao.
valor_desconto
number
vDescDI.
numero_ato_concessorio_drawback
string
nDraw.
Array of objects
detExport -- detalhe da exportação (drawback/exportação indireta), até 500 por item. Sibling de importacoes dentro de <prod>.
numero_ato_concessorio_drawback
string
nDraw.
object
exportInd.
registro_exportacaorequired
string
nRE.
chave_acesso_nferequired
string
chNFe -- chave de acesso da NF-e recebida para exportação.
quantidade_exportadarequired
number
qExport.
required
object
object
Use cst (regime normal) ou csosn (Simples Nacional) -- nunca os dois. N11-N28cada código tem seu próprio grupo de campos no layout oficial (XSD 4.00) -- escolha um abaixo:

● verde no código = suportado pela API hoje · ● cinza = existe no layout oficial, ainda não implementado pelo motor.

object
Opcional -- se omitido, o item não leva grupo <IPI> no XML. O grupo montado depende do cst: 00/49/50/99 gera IPITrib (usa base_calculo/aliquota/valor, ou o par quantidade_unidade_padrao/valor_por_unidade pra "pauta fixa"); 01-05/51-55 gera IPINT (só o CST).
cstrequired
string
Obrigatório se o objeto ipi for enviado -- mandar ipi sem cst falha a emissão inteira.
codigo_enquadramento
string
Default: "999"
cEnq.
base_calculo
number
aliquota
number
valor
number
cnpj_produtor
string
CNPJProd -- selo de controle do IPI (cigarros/bebidas). Opcional, fica antes de cEnq no XML.
codigo_selo_ipi
string
cSelo -- código do selo de controle do IPI. Ver cnpj_produtor.
quantidade_selos
integer
qSelo -- quantidade de selos de controle do IPI. Ver cnpj_produtor.
quantidade_unidade_padrao
number
qUnid -- "pauta fixa" (valor do IPI por unidade de medida), alternativa a base_calculo/aliquota. Só faz sentido pros CST 00/49/50/99; quando informado junto com valor_por_unidade, o motor usa esse par no lugar de vBC/pIPI.
valor_por_unidade
number
vUnid -- ver quantidade_unidade_padrao. Os dois são obrigatórios juntos.
object
Grupo <II> (Imposto de Importação), sibling de icms/ipi. Os 4 campos são todos obrigatórios juntos -- o grupo inteiro é opcional (omita se o item não teve importação).
base_calculorequired
number
vBC do II.
valor_despesas_aduaneirasrequired
number
vDespAdu.
valorrequired
number
vII.
valor_iofrequired
number
vIOF.
required
object
O grupo XML montado depende do cst informado: 01/02 gera PISAliq (usa base_calculo/aliquota/valor); 04-09 gera PISNT (só o CST, os outros campos são ignorados); 49-99 gera PISOutr (usa base_calculo/aliquota/valor). CST 03 ainda não suportado (tributação por quantidade).
cstrequired
string
base_calculorequired
number
Ignorado se cst for 04-09.
aliquotarequired
number
Ignorado se cst for 04-09.
valorrequired
number
Ignorado se cst for 04-09.
object
PISST -- substituição tributária, sibling de pis. xs:choice: informe base_calculo+aliquota (percentual) OU quantidade_vendida+aliquota_reais (por unidade), exatamente uma das duas variantes -- nunca as duas nem nenhuma. valor é sempre obrigatório.
valorrequired
number
vPIS (do PISST).
base_calculo
number
vBC -- variante percentual, com aliquota.
aliquota
number
pPIS -- variante percentual, com base_calculo.
quantidade_vendida
number
qBCProd -- variante por unidade, com aliquota_reais.
aliquota_reais
number
vAliqProd -- variante por unidade, com quantidade_vendida.
indicador_soma_valor_total
string
Enum: 01
indSomaPISST -- indica se o valor compõe o total da NF-e.
required
object
Mesma estrutura e mesma regra de cst de pis (grupo COFINSAliq/COFINSNT/COFINSOutr).
cstrequired
string
base_calculorequired
number
Ignorado se cst for 04-09.
aliquotarequired
number
Ignorado se cst for 04-09.
valorrequired
number
Ignorado se cst for 04-09.
object
COFINSST -- substituição tributária, sibling de cofins. Mesma regra de xs:choice de pis_st.
valorrequired
number
vCOFINS (do COFINSST).
base_calculo
number
vBC -- variante percentual, com aliquota.
aliquota
number
pCOFINS -- variante percentual, com base_calculo.
quantidade_vendida
number
qBCProd -- variante por unidade, com aliquota_reais.
aliquota_reais
number
vAliqProd -- variante por unidade, com quantidade_vendida.
indicador_soma_valor_total
string
Enum: 01
indSomaCOFINSST -- indica se o valor compõe o total da NF-e.
object
DIFAL/partilha (EC 87/2015, grupo ICMSUFDest) -- só se aplica em venda interestadual pra consumidor final não contribuinte de ICMS. A API não calcula esse grupo sozinha -- use POST /v1/tributario/icms/difal pra calcular e informe os valores prontos aqui. O motor confere a aritmética contra a mesma fonte oficial do calculador e devolve aviso em detalhes.divergencias_tributarias se algo não bater (nunca sobrescreve, nunca bloqueia).
base_calculo_uf_destinorequired
number
vBCUFDest.
aliquota_interna_uf_destinorequired
number
pICMSUFDest -- alíquota interna da UF de destino pro produto. Sem fonte federal única pras 27 alíquotas internas (mesma limitação do calculador standalone).
aliquota_interestadualrequired
number
pICMSInter -- 4/7/12. O motor confere contra a tabela oficial (Resolução do Senado 22/89 e 13/2012) e avisa se divergir.
percentual_partilha
number
Default: 100
pICMSInterPart -- 100% desde 2019 (fim do cronograma da EC 87/2015). Só informe diferente se for uma operação do período de transição 2016-2018.
valor_icms_uf_destinorequired
number
vICMSUFDest. O motor confere contra base_calculo_uf_destino × (aliquota_interna_uf_destino - aliquota_interestadual) / 100 e avisa se divergir.
valor_icms_uf_remetente
number
Default: 0
vICMSUFRemet -- sempre zero desde 2019, mesmo raciocínio do percentual_partilha.
base_calculo_fcp_uf_destino
number
vBCFCPUFDest. Só emitido junto com aliquota_fcp_uf_destino/valor_fcp_uf_destino.
aliquota_fcp_uf_destino
number
pFCPUFDest -- percentual do Fundo de Combate à Pobreza na UF de destino, quando aplicável.
valor_fcp_uf_destino
number
vFCPUFDest.
object
IBS/CBS (Reforma Tributária, LC 214/2025). Em 2026 (período de teste, art. 343) a SEFAZ exige esse grupo em toda NF-e de homologação, mesmo com alíquota efetivamente zero; em produção ainda é opcional em 2026 -- a partir de 2027 será obrigatório independente de homologação/produção. Se omitido aqui, a data_emissao for de 2026 e o ambiente for homologação, a API preenche automaticamente com cst=000/classificacao_tributaria=000001 (tributação integral, sem benefício) pra não quebrar na SEFAZ; a base de cálculo é o próprio valor_produto do item. Em produção a API nunca inventa essa classificação sozinha -- informe este campo explicitamente se precisar dele antes de 2027, ou se o item tiver uma classificação tributária diferente da genérica. Fora de 2026 continua opcional e sem default -- documento com data_emissao fora de 2026 é rejeitado se ibs_cbs vier preenchido.

● verde no código = suportado pela API hoje · ● cinza = existe no layout oficial, ainda não implementado pelo motor.

object
Grupo <total>/<ICMSTot>. Todo campo abaixo é opcional -- se omitido, o motor calcula automaticamente somando os itens (mesma regra que usa pra conferir o XML antes de assinar).
base_calculo_icms
number
valor_icms
number
valor_fcp
number
valor_produtos
number
valor_frete
number
valor_seguro
number
valor_desconto
number
valor_ipi
number
valor_pis
number
valor_cofins
number
valor_outros
number
vOutro -- outras despesas acessórias.
valor_nfe
number
valor_icms_desonerado
number
Default: 0
vICMSDeson -- sem soma automática dos itens ainda (nenhum campo de item alimenta este total hoje), por isso só aceita override explícito.
valor_fcp_st_retido_anteriormente
number
Default: 0
vFCPSTRet -- mesmo caso de valor_icms_desonerado, só override explícito.
valor_ipi_devolvido
number
Default: 0
vIPIDevol -- valor total do IPI devolvido (finalidade: "4", devolução, operações com não contribuintes do IPI).
valor_estimado_total_tributos
number
vTotTrib -- valor estimado total de impostos federais/estaduais/municipais (Lei da Transparência Fiscal, IBPT). Nunca calculado pelo motor (depende de tabela IBPT que não carregamos) -- só emitido se você informar.
object
retTrib -- retenção de tributos federais (comum em prestação de serviços com retenção na fonte pelo adquirente). Todos os campos são opcionais e independentes -- informe só o que foi retido.
valor_retido_pis
number
vRetPIS.
valor_retido_cofins
number
vRetCOFINS.
valor_retido_csll
number
vRetCSLL.
base_calculo_irrf
number
vBCIRRF.
valor_retido_irrf
number
vIRRF.
base_calculo_retencao_previdenciaria
number
vBCRetPrev.
valor_retencao_previdenciaria
number
vRetPrev.
💡
O leiaute oficial do NF-e tem mais subgrupos dentro de <total> além do ICMSTot acima -- veja o que a API aceita hoje e o que ainda não:
  • ICMS-ST (vBCST/vST/vFCPST) -- calculado automaticamente somando o ICMS-ST de cada item (CST 10/30/70, CSOSN 201/202/203). Não é um campo de totais -- não há como sobrescrever, o motor sempre soma.
  • DIFAL (vFCPUFDest/vICMSUFDest/vICMSUFRemet) -- calculado automaticamente somando os itens que tiverem tributacao.icms_uf_dest preenchido. Mesma regra: não há como sobrescrever.
  • Imposto de Importação (vII) -- calculado automaticamente somando tributacao.importacao.valor de cada item.
  • IBS/CBS (IBSCBSTot) -- mesma regra: calculado automaticamente a partir do ibs_cbs informado em cada item (ver seção itens acima). Não existe campo totais.ibs_cbs de entrada -- se enviado, é ignorado.
  • ISSQNtot (NF-e mista com serviço/ISS) e ISTot (Imposto Seletivo) existem no leiaute oficial (nfe_v4.00.xsd) mas o motor ainda não os suporta -- não há campo de entrada equivalente para nenhum dos dois.
object
Grupo <transp>. Omitido = sem transporte de carga (modFrete=9, default).
modalidade_frete
string
Default: "9"
Enum: 012349
0 CIF, 1 FOB, 2 Terceiros, 3 Próprio/remetente, 4 Próprio/destinatário, 9 Sem transporte.
object
Grupo <transporta>.
documento
string
razao_social
string
inscricao_estadual
string
endereco
string
Texto livre (xEnder), sem estrutura de logradouro/número -- assim que o layout da NF-e define este grupo.
municipio
string
uf
string
object
Grupo <veicTransp>.
placarequired
string
ufrequired
string
rntc
string
RNTRC, quando aplicável.
Array of objects
Grupo <reboque> (até 5) -- mesma estrutura de veiculo, placa obrigatória.
placarequired
string
ufrequired
string
rntc
string
vagao
string
Identificação do vagão, transporte ferroviário. Mutuamente exclusivo com veiculo/reboques e balsa (xs:choice no XSD).
balsa
string
Identificação da balsa, transporte aquaviário. Mutuamente exclusivo com veiculo/reboques e vagao (xs:choice no XSD).
object
retTransp -- retenção de ICMS do transporte (frete por conta de terceiro tributado).
valor_servicorequired
number
vServ.
base_calculo_retencaorequired
number
vBCRet.
aliquota_retencaorequired
number
pICMSRet.
valor_icms_retidorequired
number
vICMSRet.
cfoprequired
string
CFOP da prestação de serviço de transporte.
municipio_fato_geradorrequired
integer
cMunFG -- código IBGE do município.
Array of objects
Grupo <vol>, pode repetir.
quantidade
integer
especie
string
Ex.: CAIXA, PALLET, FARDO.
marca
string
numeracao
string
peso_liquido
number
Em quilogramas.
peso_bruto
number
Em quilogramas.
lacres
Array of strings
nLacre -- números dos lacres deste volume.
object
Grupo <cobr> -- fatura e duplicatas de venda a prazo. Independente da forma de pagamento em pagamentos.
object
Grupo <fat>.
numero
string
valor_original
number
valor_desconto
number
valor_liquido
number
Array of objects
Grupo <dup>, uma por parcela.
numero
string
Ex.: 001/003.
data_vencimentorequired
string <date>
valorrequired
number
Array of objects
Grupo <pag>, obrigatório no layout desde a NT 2020.005. Se omitido, a API preenche automaticamente um pagamento "SEM_PAGAMENTO" (tPag=90) com valor 0 -- tPag=90 significa que não houve pagamento, então vPag não pode ser o valor da nota.
forma
string
tPag (2 dígitos): 01 Dinheiro, 02 Cheque, 03 Cartão de crédito, 04 Cartão de 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, 18 Transferência bancária/Carteira Digital, 19 Fidelidade/Cashback, 90 Sem pagamento, 91 Pagamento Posterior, 99 Outros. Também aceita os aliases DINHEIRO/CHEQUE/CARTAO_CREDITO/CARTAO_DEBITO/CREDITO_LOJA/VALE_ALIMENTACAO/VALE_REFEICAO/VALE_PRESENTE/VALE_COMBUSTIVEL/DUPLICATA_MERCANTIL/BOLETO/DEPOSITO_BANCARIO/PIX/TRANSFERENCIA_BANCARIA/PROGRAMA_FIDELIDADE/SEM_PAGAMENTO/PAGAMENTO_POSTERIOR/OUTROS -- qualquer outro código cru de 2 dígitos também é aceito e transmitido como veio.
descricao
string
xPag -- descrição livre do meio de pagamento, 2-60 caracteres. Obrigatório na prática pra forma=99/OUTROS -- sem isso a SEFAZ rejeita com "Descrição do pagamento obrigatória para meio de pagamento 99-outros" (rejeição 441). Nas demais formas é opcional.
valor
number
indicador_pagamento
string
Enum: 01
indPag: 0 à vista, 1 a prazo. Omita se não aplicável.
data_pagamento
string (date)
dPag -- data em que o pagamento foi processado.
cnpj_estabelecimento_pagamento
string
CNPJPag -- CNPJ do estabelecimento onde o pagamento foi processado, quando diferente do emitente. Só é emitido se uf_estabelecimento_pagamento também vier -- o par é tudo ou nada.
uf_estabelecimento_pagamento
string
UFPag -- ver nota de cnpj_estabelecimento_pagamento.
object
Grupo <card> -- "Cartões, PIX, Boletos e outros Pagamentos Eletrônicos" (nome genérico no XSD oficial, não é exclusivo de cartão de fato).
tipo_integracaorequired
string
Enum: 12
tpIntegra: 1 pagamento integrado (TEF, e-commerce, POS integrado), 2 não integrado (POS simples). Único campo obrigatório do grupo.
cnpj
string
CNPJ da instituição de pagamento (credenciadora).
bandeira
string
tBand -- código de 2 dígitos da bandeira do cartão.
numero_autorizacao
string
cAut -- número de autorização da operação.
cnpj_beneficiario
string
CNPJReceb -- CNPJ do beneficiário do pagamento.
identificador_terminal
string
idTermPag -- identificador do terminal de pagamento (POS).
valor_troco
number
vTroco -- irmão do array pagamentos, não pertence a nenhum pagamento específico. Comum em NFC-e de PDV (venda em dinheiro com troco).
Array of objects
Documentos fiscais referenciados (devolução/complementar/ajuste), grupo <NFref>. Cada item escolhe um tipo e preenche só os campos daquela variante -- o XSD exige exatamente uma por documento.
tipo
Enum: nfenfe_sigilosactenf_modelo_antigonf_produtorcupom_fiscal
Default: nfe
Qual variante do grupo <NFref> este documento representa.
chave_acesso
string
Chave de acesso (44 dígitos). Usado quando tipo é nfe (<refNFe>), nfe_sigilosa (<refNFeSig> -- mesma NF-e, mas com código numérico zerado pra manter sigilo) ou cte (<refCTe>).
codigo_uf
integer
cUF -- código IBGE da UF do emitente do documento referenciado. Usado em nf_modelo_antigo/nf_produtor.
ano_mes_emissao
string
AAMM -- ano+mês de emissão (4 dígitos, ex. "2607"). Usado em nf_modelo_antigo/nf_produtor.
documento
string
CNPJ (nf_modelo_antigo) ou CNPJ/CPF (nf_produtor) do emitente do documento referenciado.
inscricao_estadual
string
IE do emitente da NF de produtor rural. Usado em nf_produtor.
modelo
string
Código do modelo: 01/02 em nf_modelo_antigo, 01/04 em nf_produtor, 2B/2C/2D em cupom_fiscal.
serie
string
Série do documento referenciado (0 se inexistente). Usado em nf_modelo_antigo/nf_produtor.
numero
string
Número do documento referenciado. Usado em nf_modelo_antigo/nf_produtor.
numero_ecf
string
nECF -- número de ordem sequencial do ECF que emitiu o cupom fiscal. Usado em cupom_fiscal.
numero_coo
string
nCOO -- número do contador de ordem de operação do cupom fiscal. Usado em cupom_fiscal.
autorizados_download_xml
Array of strings
autXML -- CNPJ ou CPF de pessoas autorizadas a baixar o XML desta NF-e (máx. 10, limite do XSD). A API decide CNPJ/CPF pelo tamanho do número informado.
object
Grupo <infAdic>.
informacoes_complementares
string
infCpl -- texto livre impresso no DANFE ("Dados Adicionais").
informacoes_adicionais_fisco
string
infAdFisco -- informações adicionais de interesse do Fisco, normalmente exigidas por legislação específica da UF.
Array of objects
obsCont -- observações de interesse do contribuinte, cada uma com campo nomeado.
nome_camporequired
string
xCampo.
textorequired
string
xTexto.
Array of objects
obsFisco -- observações de interesse do Fisco, mesma estrutura de observacoes_contribuinte.
nome_camporequired
string
xCampo.
textorequired
string
xTexto.
Array of objects
procRef -- processos administrativos/judiciais referenciados pela NF-e.
numero_processorequired
string
nProc.
origem_processorequired
string
indProc.
tipo_ato
string
tpAto.
object
validar_tributacao
string
Enum: STRICTWARNOFF
Default: WARN
STRICT bloqueia a emissão se a crítica tributária (CST/CSOSN vs regime do emitente, CFOP vs UF, etc.) encontrar divergência; WARN emite mesmo assim e devolve a divergência em detalhes.divergencias_tributarias; OFF desliga a crítica. Recomendado usar STRICT nos primeiros testes de integração pra pegar erro de mapeamento cedo.
permitir_contingencia
boolean
Default true. Quando o autorizador primário da UF falha por comunicação (timeout/DNS/TLS -- nunca uma rejeição de negócio da SEFAZ), a CentralFiscal confirma que a SVC (Sistema de Contingência) mapeada pra UF está ativa e, se estiver, reconstrói e retransmite a NF-e automaticamente em contingência (SVC-AN ou SVC-RS, conforme a UF -- Ato COTEPE ICMS 39/2012); se a SVC também estiver fora do ar, o erro original volta normalmente -- não há risco de forçar uma contingência indevida. Envie false explicitamente (booleano de verdade, não string) se precisar travar a emissão num único canal. Veja detalhes.tipo_emissao_utilizado na resposta pra saber se isso realmente aconteceu.

Não existem validar_xml_antes_assinatura nem gerar_qrcode -- a validação contra o XSD oficial antes de assinar é sempre feita (não dá pra desligar), e o QR Code é gerado automaticamente quando o modelo é 65 (NFC-e) e nunca quando é 55 (NF-e).

idempotencia
string
Alternativa ao header Idempotency-Key. Reenviar a mesma chave nunca gera uma segunda NF-e -- devolve o resultado da primeira tentativa.
id_externo
string
Referência livre do seu sistema, só' pra rastreio -- não afeta a NF-e.

Exemplo mínimo

Um item, ICMS regime normal -- veja o código ao lado.

Exemplo Simples Nacional

Mesma estrutura do exemplo acima -- só muda o crt do emitente e a tributação do ICMS do item. Em emitente.crt, use "1" (Simples Nacional). No item, troque icms.cst por icms.csosn -- o exemplo ao lado usa 102 (Tributada pelo Simples Nacional sem permissão de crédito), o CSOSN mais comum pra revenda de mercadoria. PIS/COFINS seguem normalmente com cst de regime normal (01/02 etc.) -- a API não muda o tratamento de PIS/COFINS conforme o CRT do emitente, só o ICMS distingue CST de CSOSN.

⚠️
Não misture CST e CSOSN no mesmo item. Mandar icms.csosn com emitente.crt diferente de 1/2/4 (ou icms.cst com um emitente do Simples Nacional) falha a emissão. Veja a tabela completa de CSOSN suportados na seção Body → itens → tributacao → icms acima.

Resposta de sucesso

200 OK -- já com o resultado final da SEFAZ nesta mesma resposta (status: "AUTHORIZED" em caso de sucesso). Traz chave (chave de acesso de 44 dígitos) e documento (rótulo do tipo). O campo detalhes traz o cstat/xmotivo reais devolvidos pela SEFAZ, além de tipo_emissao_utilizado ("1" na grande maioria dos casos; "6" ou "7" quando o autorizador primário falhou por comunicação e a NF-e saiu em contingência SVC-AN/SVC-RS -- comportamento ligado por padrão, desliga só se você mandar configuracoes.permitir_contingencia: false). Veja o exemplo ao lado.

Resposta de erro

Erro de payload (campo obrigatório ausente, valor inválido) não vira 400 -- ainda vem 200 OK, com o erro embutido no corpo. A chamada só devolve HTTP de erro de verdade pra falha de autenticação (401) ou contrato ausente (403/409). Pra tudo que acontece depois disso -- inclusive campo obrigatório faltando -- olhe status e retorno_amigavel.codigo (NFE_EMISSAO_FALHOU é o caso comum) na resposta 200, nunca o status HTTP. Exemplo real: endereço do emitente incompleto devolve 200 com status: "ERROR" e retorno_amigavel.codigo: "NFE_EMISSAO_FALHOU" trazendo a mensagem exata do campo que faltou. Catálogo completo de erros: Tratamento de Erros.

⚠️
Cuidado ao reenviar com a mesma idempotency_key depois de corrigir o payload. Se a primeira tentativa falhou por campo ausente, ela já ficou registrada com esse erro. Reenviar com a MESMA chave de idempotência devolve "duplicado": true com o erro antigo -- não tenta de novo. Corrija o payload e gere uma idempotency_key nova antes de reenviar.

Notificação assíncrona

Não existe webhook genérico hoje -- e como a chamada já é síncrona (a resposta já traz o resultado final), normalmente você não precisa de nada além do próprio POST. Se precisar reconsultar mais tarde (ex. reprocessamento manual), use GET /v1/nfe/emissoes/{transmissao_id}.

📤
Eventos como Emitente. Os eventos abaixo (Cancelamento, Carta de Correção, Ator Interessado, Eventos RTC) são todos do ponto de vista de quem emite a NF-e -- notas que o seu próprio contribuinte gerou. Se em vez disso você precisa se manifestar sobre uma NF-e que outra empresa emitiu contra o CNPJ do seu contribuinte (ele como destinatário/comprador), veja Manifestação do Destinatário -- é uma página e um caso de uso diferentes.

Cancelamento

POST /v1/nfe/cancelamentos -- exige chave_acesso (44 dígitos), protocolo (da autorização original) e justificativa com pelo menos 15 caracteres. Mesmo padrão síncrono da emissão: a resposta já vem com o resultado final do evento de cancelamento na SEFAZ. Veja o exemplo ao lado.

Carta de Correção (CC-e)

POST /v1/nfe/cartas-correcao -- evento 110110. Não cancela nem corrige valores, impostos ou participantes da NF-e (isso exige cancelamento + nova emissão) -- só serve para os campos que a legislação permite corrigir por evento (dados cadastrais, endereço, informações complementares etc.). A NF-e original continua AUTHORIZED em caso de sucesso -- é isso que aparece no campo status da resposta, não um estado novo. Mesmo padrão síncrono do Cancelamento acima.

Exige chave_acesso (44 dígitos) e x_correcao (texto livre, 15 a 1000 caracteres -- limites do próprio schema oficial da SEFAZ, leiauteCCe_v1.00.xsd). sequencia_evento é opcional (padrão 1) -- só precisa informar se for enviar mais de uma CC-e para a mesma NF-e (a SEFAZ aceita até 19 por chave); quem controla qual sequencial usar em cada reenvio é quem chama a API, a CentralFiscal não guarda esse contador.

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/cartas-correcao \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: cce-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "x_correcao": "Correcao do endereco do destinatario: numero do imovel e complemento."
  }'
💡
Reconsulta. A resposta do POST já traz o resultado final (mesmo padrão síncrono da emissão/cancelamento), mas se precisar conferir de novo mais tarde -- ex. depois de um status: "INDETERMINATE" -- use GET /v1/nfe/cartas-correcao/{transmissao_id} com o transmissao_id devolvido no POST original.

Ator Interessado

POST /v1/nfe/atores-interessados -- evento 110150 ("Ator Interessado na NF-e - Transportador"). Autoriza um terceiro (CNPJ ou CPF -- ex.: contador, outro transportador, ou qualquer parte interessada) a baixar o XML completo da NF-e diretamente na SEFAZ, sem você precisar compartilhar o arquivo manualmente. Não cancela nem altera nenhum dado da NF-e -- ela continua AUTHORIZED em caso de sucesso, só ganha um evento de autorização anexado. Mesmo padrão síncrono do Cancelamento/CC-e acima.

⚠️
Só emitente. O leiaute oficial permite o evento ser gerado pelo emitente, pelo destinatário ou pelo transportador da NF-e (tpAutor 1/2/3). A CentralFiscal só expõe a geração pelo emitente (tpAutor=1) -- é o caso de uso do produto, que atua do lado de quem emite a nota. Não há campo para escolher outra variante.

Exige chave_acesso (44 dígitos) e autorizado.documento (CNPJ ou CPF de quem está sendo autorizado a baixar o XML). tipo_autorizacao é opcional: "0" não permite, "1" permite que o autorizado -- quando for um transportador -- repasse a autorização a subcontratados ou redespachados. Quando tipo_autorizacao é "1", a CentralFiscal já preenche xCondUso com o texto fixo exigido pelo schema oficial (leiauteEventoAtorInteressado_v1.00.xsd) -- não é um campo que você envia. sequencia_evento é opcional (padrão 1), mesmo critério da CC-e (a SEFAZ aceita até 20 por chave).

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/atores-interessados \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: ator-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "autorizado": { "documento": "98765432000121" }
  }'
💡
Reconsulta. Mesmo padrão da CC-e: se precisar conferir de novo mais tarde -- ex. depois de um status: "INDETERMINATE" -- use GET /v1/nfe/atores-interessados/{transmissao_id} com o transmissao_id devolvido no POST original.

Eventos RTC (Reforma Tributária)

A Reforma Tributária (IBS/CBS) define 16 eventos novos de NF-e. Esta página documenta os 7 que fazem sentido do lado de quem emite a nota (tpAutor=1, Empresa Emitente). A CentralFiscal também expõe os 6 eventos do lado da empresa destinatária (tpAutor=2) -- ver Eventos RTC · como destinatário na página de Manifestação do Destinatário. Os 3 que sobram são do lado de empresa sucessora em fusão/aquisição ou do próprio Fisco -- fora do escopo do produto. Todos os 7 eventos desta página seguem o mesmo padrão síncrono do Cancelamento/CC-e/Ator Interessado acima: nenhum deles cancela nem altera a NF-e, ela continua AUTHORIZED em caso de sucesso, só ganha o evento correspondente anexado.

Pagamento Integral (112110)

POST /v1/nfe/pagamentos-integrais -- "Informação de efetivo pagamento integral para liberar crédito presumido do adquirente". É uma confirmação simples, no mesmo espírito do Ator Interessado: o único dado que você envia é a chave_acesso (44 dígitos) da NF-e referenciada -- a descrição do evento e o indicador de quitação são fixos, preenchidos pela CentralFiscal.

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/pagamentos-integrais \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pagtointegral-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018"
  }'

Importação em ALC/ZFM (112120)

POST /v1/nfe/importacoes-alc-zfm -- "Importação em ALC/ZFM não convertida em isenção" (Área de Livre Comércio / Zona Franca de Manaus). Item por item, em itens[]: nItem, vIbs/vCbs (valor do IBS/CBS que não atendeu aos requisitos da isenção) e qtde/unidade (quantidade que não converteu).

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/importacoes-alc-zfm \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: importalczfm-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "itens": [
      { "nItem": 1, "vIbs": 120.50, "vCbs": 45.10, "qtde": 3.5, "unidade": "UN" }
    ]
  }'

Perecimento no Transporte (112130)

POST /v1/nfe/perecimentos-transporte-fornecedor -- "Perecimento, perda, roubo ou furto durante o transporte contratado pelo fornecedor". Item por item, em itens[], cada item carrega dois pares de valor de imposto com significado diferente -- não troque um pelo outro:

  • vIbsNotaFornecimento/vCbsNotaFornecimento -- valor do imposto na nota de fornecimento correspondente à quantidade perdida.
  • qPerecimento/uPerecimento -- a quantidade perdida.
  • vIbsEstornoCredito/vCbsEstornoCredito -- valor do crédito a estornar referente à aquisição (diferente do par acima).
curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/perecimentos-transporte-fornecedor \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: perecimento-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "itens": [
      {
        "nItem": 1,
        "vIbsNotaFornecimento": 200.00, "vCbsNotaFornecimento": 80.00,
        "qPerecimento": 5, "uPerecimento": "UN",
        "vIbsEstornoCredito": 150.00, "vCbsEstornoCredito": 60.00
      }
    ]
  }'

Fornecimento Não Realizado (112140)

POST /v1/nfe/fornecimentos-nao-realizados -- "Fornecimento não realizado com pagamento antecipado". Item por item, em itens[]: nItem, vIbs/vCbs (valor na nota de débito do pagamento antecipado correspondente à quantidade não fornecida) e qNaoFornecida/uNaoFornecida.

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/fornecimentos-nao-realizados \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: fornecnaorealizado-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "itens": [
      { "nItem": 1, "vIbs": 30.00, "vCbs": 12.00, "qNaoFornecida": 2, "uNaoFornecida": "UN" }
    ]
  }'

Previsão de Entrega (112150)

POST /v1/nfe/atualizacoes-previsao-entrega -- "Atualização da Data de Previsão de Entrega". O mais simples dos 7: um único campo de negócio, data_previsao_entrega (formato AAAA-MM-DD).

curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/atualizacoes-previsao-entrega \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: prevendtrega-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "data_previsao_entrega": "2026-10-15"
  }'

Crédito Presumido (211110)

POST /v1/nfe/solicitacoes-credito-presumido -- "Solicitação de Apropriação de crédito presumido". Item por item, em itens[]: vBc (base de cálculo) é obrigatório; ibs e/ou cbs trazem codigoCreditoPresumido (tabela SEFAZ, 2 dígitos), percentualCreditoPresumido e valorCreditoPresumido.

⚠️
Pelo menos um de ibs/cbs. O schema oficial tecnicamente permite os dois ausentes num item, mas um pedido de crédito presumido sem IBS nem CBS não tem sentido de negócio nenhum -- a CentralFiscal rejeita o item se nenhum dos dois vier preenchido.
curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/solicitacoes-credito-presumido \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: credpresumido-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "itens": [
      {
        "nItem": 1,
        "vBc": 1000.00,
        "ibs": { "codigoCreditoPresumido": "01", "percentualCreditoPresumido": 10, "valorCreditoPresumido": 100.00 },
        "cbs": { "codigoCreditoPresumido": "02", "percentualCreditoPresumido": 5, "valorCreditoPresumido": 50.00 }
      }
    ]
  }'

Consumo Pessoal (211120)

POST /v1/nfe/consumos-pessoais -- "Destinação de item para consumo pessoal". Item por item, em itens[]: vIbs/vCbs (valor na nota de aquisição correspondente à quantidade destinada a consumo pessoal), qConsumo/uConsumo e chaveAcessoReferenciada/ nItemReferenciado -- a chave da nota emitida para o fornecimento e o item correspondente nela.

ℹ️
Duas variantes neste mesmo endpoint. O leiaute oficial deste evento aceita tpAutor=1 (emitente) ou tpAutor=2 (destinatária), com a regra "caso NF-e de Importação, informar 1=Empresa Emitente; demais casos, informar 2=Empresa destinatária". Nesta página (do ponto de vista do emitente) o padrão é tpAutor=1, exclusivo do caso de NF-e de Importação. Para a variante destinatária (tpAutor=2), informe "papel": "destinataria" no corpo da requisição -- ver Consumo Pessoal · como destinatário na página de Manifestação do Destinatário, que documenta essa variante com o campo autorDocumento (quem assina o evento quando é o destinatário, não o emitente original da nota).
curl -X POST https://areacliente.centralfiscal.com.br/v1/nfe/consumos-pessoais \
  -H "Authorization: Bearer cf_test_51JqK..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: consumopessoal-nfe-0001" \
  -d '{
    "chave_acesso": "43260712345678000190550010000010011000010018",
    "itens": [
      {
        "nItem": 1,
        "vIbs": 40.00, "vCbs": 16.00,
        "qConsumo": 1, "uConsumo": "UN",
        "chaveAcessoReferenciada": "43260712345678000190550010000010021000010028",
        "nItemReferenciado": 3
      }
    ]
  }'
💡
Reconsulta. Mesmo padrão dos demais eventos: cada um destes 7 endpoints tem seu GET /v1/nfe/{recurso}/{transmissao_id} correspondente (ex. GET /v1/nfe/pagamentos-integrais/{transmissao_id}, GET /v1/nfe/consumos-pessoais/{transmissao_id} etc.) usando o transmissao_id devolvido no POST original.

O que ainda não existe

Estes grupos existem no leiaute oficial (nfe_v4.00.xsd) mas o motor não os suporta hoje -- todos são nichos legítimos de baixo volume, sem previsão:

  • NF-e avulsa -- emissão por órgão do Fisco em nome de terceiro.
  • infIntermed -- identificação de intermediador/marketplace.
  • exporta -- comprovante de exportação (DI, drawback).
  • compra -- dados de nota de empenho/pedido de compra governamental.
  • cana -- agroindústria canavieira (fechamento de safra).
  • agropecuario -- produtos agropecuários animais/vegetais/florestais (NT 2024.003).
  • infRespTec -- responsável técnico pelo sistema emissor.
  • infSolicNFF -- Nota Fiscal Fácil (NT específica).

Próximos passos

  • Baixar o XML e o DANFE usando as URLs em detalhes.
  • Se precisar cancelar, ver POST /v1/nfe/cancelamentos acima.
  • Se precisar corrigir dados sem cancelar, ver POST /v1/nfe/cartas-correcao acima.
  • Se precisar autorizar um terceiro a baixar o XML, ver POST /v1/nfe/atores-interessados acima.
  • Reconsultar mais tarde, se precisar: GET /v1/nfe/emissoes/{transmissao_id}.