REST API v2.5 SYSTEM OPERATIONAL

Documentação NFE API

Bem-vindo à documentação da NFE API. API completa para emissão, consulta e cancelamento de Notas Fiscais Eletrônicas (NF-e) no Brasil. Suporta cálculo automático de impostos (ICMS, IPI, PIS/COFINS), geração de XML, autorização SEFAZ e integração com sistemas de gestão.

list_alt

Campos Importantes da API

Interpretação de Campos Críticos

Esta seção explica os campos mais importantes da NFE API que são essenciais para o correto funcionamento da emissão de notas fiscais.

⚠️ ATENÇÃO: A configuração correta destes campos é fundamental para a emissão válida de notas fiscais. Consulte sempre a legislação tributária vigente.
Campo Descrição Valores Possíveis Importância
invoice_type Tipo de empresa (pessoa jurídica/física) juridica, fisica Alta - Define o regime tributário
nature_of_operation Natureza da operação (venda, devolução, etc.) Ex: VENDA, DEVOLUCAO Alta - Determina o CFOP
transaction_type Tipo de transação (entrada/saída) ENTRADA, SAIDA Alta - Direciona o fluxo fiscal
model Modelo da nota fiscal nfe, nfce Alta - Modelo do documento
issuance_type Tipo de emissão (normal, contingência) NORMAL, CONTINGENCIA Média - Modo de emissão
ambiente Ambiente de processamento PRODUCAO, HOMOLOGACAO Alta - Define SEFAZ destino
cliente Tipo do cliente/comprador CONSUMIDOR, CONTRIBUINTE Alta - Impacta nos impostos
products.origem Origem do produto (nacional/importado) 0 a 8 Alta - Determina tributação
products.indicador_total Se o produto entra no total da NF true, false Média - Para itens de amostra
💡 DICA: Para produtos, o campo origem é crítico: 0-Nacional, 1-Estrangeira importação direta, 2-Estrangeira adquirida no mercado interno, etc. Consulte a tabela completa de origem de mercadorias.
sync_alt

Fluxo do Processo de Emissão

Diagrama completo da emissão de NF-e

O fluxo completo de emissão de nota fiscal eletrônica no Brasil, desde a criação da empresa até a geração dos arquivos finais.

business

1. Criar Empresa

Criar informações fiscais da empresa local no Brasil

send

2. Push de Informações

Dados do pedido (usuário, endereço, impostos do produto)

receipt

3. Emitir Nota Fiscal

Processar e enviar para autorização SEFAZ

assignment_returned

4. Retornar Resultado

Status da emissão e dados da NF-e

description

5. Gerar Arquivos

XML e PDF da nota fiscal

published_with_changes

Verificação Fiscal

Validação com SEFAZ

check_circle

Sucesso

error

Falha

Configuração Inicial
Processamento de Dados
Emissão Fiscal
Resultados Positivos
📊 Fluxo Detalhado: O processo segue uma sequência lógica: (1) Configuração da empresa → (2) Recebimento dos dados do pedido → (3) Processamento e emissão da NF-e → (4) Retorno do status → (5) Geração dos arquivos. O ponto de decisão (Verificação Fiscal) determina se a emissão foi autorizada pela SEFAZ.
flash_on

Referência Rápida de Endpoints

Todos os endpoints da NFE API

Visão geral completa de todos os endpoints disponíveis na API. Use esta tabela como referência rápida para navegar na documentação.

URL Base
https://api.tffiscal.com
Path Método HTTP Função
business Gestão de Empresas
/api/company/create POST Criar empresa
/api/company/get_detail GET Consultar empresa
/api/company/edit POST Modificar empresa
/api/company/get_list GET Listar empresas
/api/company/v2/create POST Criar empresa (simplificado)
/api/company/get_cep_detail GET Consultar CEP
/api/company/get_export_invoice_month_files GET Arquivos exportados mensais
category Gestão de Categorias/Impostos
/api/category/get_list GET Listar categorias de impostos
/api/category/create POST Criar categoria de impostos
/api/category/get_detail GET Consultar detalhes da categoria
/api/category/edit POST Editar categoria de impostos
/api/category/delete POST Excluir categoria de impostos
receipt Gestão de Notas Fiscais
/api/invoice/create POST Emitir nota fiscal
/api/invoice/get_list GET Listar notas fiscais
/api/invoice/get_detail GET Consultar detalhes da nota fiscal
/api/invoice/refresh POST Atualizar status da nota fiscal
/api/invoice/cancel POST Cancelar nota fiscal
/api/invoice/invalid POST Invalidar número da nota fiscal
/api/invoice/return POST Devolução de nota fiscal
/api/invoice/get_xml POST Exportar XML da nota fiscal
receipt NFC-e (Cupom Fiscal)
/api/nfce/company/create POST Cadastrar empresa NFC-e
/api/nfce/company/update POST Atualizar empresa NFC-e
/api/nfce/company/get POST Consultar empresa NFC-e
/api/nfce/create POST Emitir NFC-e
/api/nfce/cancel POST Cancelar NFC-e
/api/nfce/get_detail POST Consultar NFC-e
/api/nfce/get_danfe POST Obter DANFE NFC-e
description NFS-e (Nota de Servico)
/api/nfse/create POST Emitir NFS-e
/api/nfse/cancel POST Cancelar NFS-e
/api/nfse/get_danfse POST Obter DANFSE (PDF)
/api/nfse/get_xml POST Download XML NFS-e
📋 Notas Importantes:
  • Todos os endpoints requerem autenticação via headers: sign, timestamp, token
  • Para criar empresa e listar empresas, use o token do distribuidor (b2b_token)
  • O Content-Type deve ser sempre application/json;charset=utf-8
  • As respostas seguem o padrão JSON com campos success, message e data
200

Sucesso

Requisição processada com sucesso

400

Erro do Cliente

Dados inválidos ou faltantes

500

Erro do Servidor

Erro interno no servidor

account_balance

NFE API

Nota Fiscal Eletrônica Brasileira (NF-e)

API completa para emissão, consulta e cancelamento de Notas Fiscais Eletrônicas (NF-e) no Brasil. Suporta cálculo automático de impostos (ICMS, IPI, PIS/COFINS), geração de XML, autorização SEFAZ e integração com sistemas de gestão. Atualmente suporta emissão de notas fiscais para produtos em todo território brasileiro.

Base URL (Produção)
https://api.tffiscal.com/v1
Autenticação
Headers: sign, timestamp, token
Requisitos
Certificado Digital A1 válido

sync_alt Fluxo do Sistema

input Dados de Entrada
  • Informações do Cliente
  • Dados dos Produtos
  • Informações Fiscais
  • Dados de Transporte
settings Processamento
  • Validação dos dados
  • Cálculo de impostos
  • Geração do XML
  • Autorização SEFAZ
download Saída
  • XML da nota fiscal
  • PDF da nota fiscal
  • DANFE (Documento Auxiliar)
  • Status de autorização

Endpoints Principais

POST /api/company/create
Cadastrar nova empresa emissora

Cadastra uma empresa emissora vinculada a uma conta de distribuidor (b2b). Use este endpoint quando os dados da empresa já estão disponíveis. Para extração automática a partir do certificado digital, use /api/company/v2/create.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken do distribuidor (b2b — a conta precisa ter isb2b=true)
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
Identificação
cnpj *stringCNPJ da empresa emissora
name *stringRazão social
ie *stringInscrição Estadual
invoice_type *stringRegime tributário (ex.: "simples_nacional", "normal")
unit *stringTipo de unidade
emailstringE-mail da empresa
Endereço
cep *stringCEP
address *stringLogradouro
house_number *stringNúmero do endereço
town *stringBairro
city *stringMunicípio
state *stringUF (sigla do estado)
Certificado digital
cert_file *stringURL HTTPS do certificado digital A1 (.pfx ou .p12)
cert_pwd *stringSenha do certificado
Numeração e configurações
serie *intSérie da NF-e
number *intNúmero inicial da numeração
is_create_category_templatebooleanCria categorias fiscais padrão automaticamente. Default: true

* Campo obrigatório.

Exemplo de payload

            {
              "cnpj": "12345678000199",
              "name": "Empresa Exemplo LTDA",
              "ie": "123456789",
              "invoice_type": "simples_nacional",
              "unit": "UN",
              "email": "contato@empresa.com",
              "cep": "01001000",
              "address": "Rua Exemplo",
              "house_number": "100",
              "town": "Centro",
              "city": "São Paulo",
              "state": "SP",
              "cert_file": "https://exemplo.com/cert.pfx",
              "cert_pwd": "senha_do_certificado",
              "serie": 1,
              "number": 1
            }

Resposta

            {
              "success": true,
              "data": {
                "company_id": "comp_789012",
                "token": "eyJhbGciOiJIUzI1NiIs..."
              }
            }
POST /api/company/v2/create
Cadastrar empresa com auto-preenchimento via certificado

Versão simplificada de /api/company/create: a API valida o certificado digital e extrai automaticamente razão social, IE, endereço e demais dados via consulta interna. Apenas cnpj, cert_file e cert_pwd são obrigatórios.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken do distribuidor (b2b — a conta precisa ter isb2b=true)
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
cnpj *stringCNPJ da empresa emissora
cert_file *stringURL HTTPS do certificado digital A1 (.pfx ou .p12)
cert_pwd *stringSenha do certificado
is_create_category_templatebooleanCria categorias fiscais padrão automaticamente. Default: true

* Campo obrigatório.

Exemplo de payload

            {
              "cnpj": "12345678000199",
              "cert_file": "https://exemplo.com/cert.pfx",
              "cert_pwd": "senha_do_certificado"
            }

Resposta

            {
              "success": true,
              "data": {
                "company_id": "comp_789012",
                "token": "eyJhbGciOiJIUzI1NiIs..."
              }
            }
POST /api/company/edit
Editar dados da empresa

Atualiza dados da empresa emissora. Envie apenas os campos que deseja alterar — todos exceto company_id são opcionais. CNPJ é imutável: tentar enviá-lo retorna erro. Ao atualizar cep, o sistema resolve automaticamente stateCode e ibge. Quando cert_file e cert_pwd vêm juntos, o certificado é validado antes de salvar.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
company_id *stringID da empresa a editar
namestringRazão social
invoice_typestringRegime tributário
iestringInscrição Estadual
unitstringTipo de unidade
emailstringE-mail
cepstringCEP (atualiza stateCode e ibge automaticamente)
addressstringLogradouro
house_numberstringNúmero
townstringBairro
citystringMunicípio
statestringUF
cert_filestringURL HTTPS do novo certificado (.pfx ou .p12). Se enviado junto com cert_pwd, é validado antes de salvar
cert_pwdstringNova senha do certificado
serieintNova série da NF-e
numberintNovo número inicial

* Campo obrigatório. Enviar cnpj retorna erro.

Exemplo de payload

                        {
                          "company_id": "comp_789012",
                          "name": "Nova Razão Social LTDA",
                          "email": "novo@empresa.com",
                          "cep": "01310100"
                        }

Resposta

                        {
                          "success": true
                        }
GET /api/company/get_list
Listar empresas do distribuidor

Lista, com paginação, as empresas emissoras vinculadas à conta de distribuidor (b2b). Parâmetros via query string.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken do distribuidor (b2b — a conta precisa ter isb2b=true)
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
page *intNúmero da página (≥ 1)
page_size *intTamanho da página (1–20)

* Campo obrigatório.

Exemplo de chamada

GET /api/company/get_list?page=1&page_size=10

Resposta

            {
              "success": true,
              "data": {
                "companys": [
                  {
                    "company_id": "comp_789012",
                    "invoice_type": "simples_nacional",
                    "token": "eyJhbGciOiJIUzI1NiIs...",
                    "cnpj": "12345678000199",
                    "name": "Empresa Exemplo LTDA",
                    "ie": "123456789",
                    "unit": "UN",
                    "email": "contato@empresa.com",
                    "cep": "01001000",
                    "address": "Rua Exemplo",
                    "house_number": "100",
                    "town": "Centro",
                    "city": "São Paulo",
                    "state": "SP",
                    "cert_file": "https://exemplo.com/cert.pfx",
                    "cert_pwd": "***",
                    "serie": 1,
                    "number": 142
                  }
                ],
                "page": 1,
                "total": 8,
                "total_pages": 1
              }
            }
GET /api/company/get_detail
Detalhes da empresa autenticada

Retorna os dados completos da empresa identificada pelo header token, incluindo a lista de categorias fiscais cadastradas. Não aceita body nem query string.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Exemplo de chamada

GET /api/company/get_detail

Resposta

            {
              "success": true,
              "data": {
                "company_id": "comp_789012",
                "name": "Empresa Exemplo LTDA",
                "token": "eyJhbGciOiJIUzI1NiIs...",
                "invoice_type": "simples_nacional",
                "cnpj": "12345678000199",
                "ie": "123456789",
                "unit": "UN",
                "email": "contato@empresa.com",
                "cep": "01001000",
                "address": "Rua Exemplo",
                "house_number": "100",
                "town": "Centro",
                "city": "São Paulo",
                "state": "SP",
                "cert_file": "https://exemplo.com/cert.pfx",
                "cert_pwd": "***",
                "serie": 1,
                "number": 142,
                "categorys": [
                  {
                    "category_id": "cat_001",
                    "descricao": "Venda de mercadoria",
                    "disable_difal": false,
                    "desconta_icms_pis_cofins": false
                  }
                ]
              }
            }
GET /api/company/get_cep_detail
Consultar endereço por CEP

Resolve um CEP brasileiro retornando UF, código IBGE do município e dados do endereço. Útil para preencher endereços de empresas e clientes. Requer conta de distribuidor (b2b).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken do distribuidor (b2b — a conta precisa ter isb2b=true)
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
cep *stringCEP brasileiro (8 dígitos, com ou sem traço)

* Campo obrigatório.

Exemplo de chamada

GET /api/company/get_cep_detail?cep=01001000

Resposta

            {
              "success": true,
              "data": {
                "cep": "01001-000",
                "uf": "SP",
                "ibge": 3550308,
                "logradouro": "Praça da Sé",
                "bairro": "Sé",
                "localidade": "São Paulo",
                "ddd": "11"
              }
            }
GET /api/company/get_export_invoice_month_files
Listar arquivos de exportação mensal já gerados

Retorna a lista de arquivos de exportação mensal que já foram gerados para a empresa no ano corrente (timezone America/Sao_Paulo). Cada mês pode ter até 4 arquivos: 1 planilha Excel (apenas status Success) + 3 XMLs (por status Success, Canceled e Voided). Apenas arquivos efetivamente exportados aparecem no retorno — use /api/invoice/get_xml para gerar novos.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Exemplo de chamada

GET /api/company/get_export_invoice_month_files

Resposta

CampoTipoDescrição
files[]arrayLista de arquivos disponíveis
files[].urlstringURL do arquivo no OSS
files[].yearintAno do período
files[].monthstringMês (1–12)
files[].typestringTipo do arquivo: "xlsx" ou "xml"
files[].statusstringStatus das notas no arquivo: "Success", "Canceled" ou "Voided"
files[].createdatetimeQuando o arquivo foi gerado

Exemplo de resposta

            {
              "success": true,
              "data": {
                "files": [
                  {
                    "url": "https://oss.example.com/.../2024_01_success.xlsx",
                    "year": 2024,
                    "month": "1",
                    "type": "xlsx",
                    "status": "Success",
                    "create": "2024-02-01T03:15:00Z"
                  },
                  {
                    "url": "https://oss.example.com/.../2024_01_success.zip",
                    "year": 2024,
                    "month": "1",
                    "type": "xml",
                    "status": "Success",
                    "create": "2024-02-01T03:15:30Z"
                  }
                ]
              }
            }
GET /api/category/get_list
Listar categorias de produtos

Retorna todas as categorias disponíveis para classificação fiscal.

POST /api/invoice/create
Emitir nova nota fiscal

Emite uma NF-e (modelo 55). A empresa emissora é identificada pelo header token; não envie company_id no body.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body — campos top-level

CampoTipoDescrição
Identificação e operação
idstringID único do cliente para idempotência (compõe a chave de deduplicação)
nature_of_operation *stringNatureza da operação (ex: "Venda de mercadoria")
transaction_type *stringTipo: "0"=entrada, "1"=saída, "2"=importação, "3"=exportação
model *stringModelo do documento: "55"=NF-e
issuance_type *stringTipo de emissão ("1"=normal, "9"=contingência, etc.)
ambiente *string"1"=produção, "2"=homologação
finalidadestringFinalidade: "1"=normal, "2"=complementar, "3"=ajuste, "4"=devolução
ref_nfe_chavestringChave de 44 dígitos da NF-e referenciada (complementar/ajuste/devolução)
is_reopenbooleanReabrir/sobrescrever uma NF-e já emitida anteriormente
dh_sai_entstringData/hora de saída ou entrada (ISO 8601). Default: timestamp atual
Valores e descontos
total_discount_amountdecimalDesconto total da nota
trocodecimalTroco (uso típico em NFC-e)
segurodecimalValor de seguro (rateado entre os produtos no XML vSeg)
outras_despesasdecimalOutras despesas (rateadas entre os produtos no XML vOutro)
Indicadores e informações adicionais
ind_finalstringConsumidor final: "0"=B2B, "1"=B2C
ind_presstringIndicador de presença: "1"=presencial, "2"=internet, "3"=teleatendimento, etc.
informacoes_complementaresstringInformações complementares (escrito em infAdic.infCpl)
informacoes_fiscostringInformações para o fisco (escrito em infAdic.infAdFisco)

Body — cliente (objeto, obrigatório)

Para operações nacionais (transaction_type 0 ou 1): cpf ou cnpj, name, endereco, bairro (mín. 2 caracteres), city, uf e cep são obrigatórios. Para importação/exportação (transaction_type 2 ou 3): apenas name é obrigatório.
CampoTipoDescrição
cpfstringCPF do cliente (alternativa a cnpj)
cnpjstringCNPJ do cliente (alternativa a cpf)
iestringInscrição Estadual
name *stringRazão social / nome do cliente
enderecostringLogradouro
complementostringComplemento
numerostringNúmero do endereço
bairrostringBairro (mínimo 2 caracteres em operações nacionais)
citystringMunicípio
ufstringUF (é substituída pelo UF resolvido a partir do CEP)
cepstringCEP (valida o UF e o município)
telefonestringTelefone
emailstringE-mail
id_estrangeirostringIdentificação estrangeira (uso em importação/exportação)
c_paisintCódigo BACEN do país. Default: 1058 (Brasil)
x_paisstringNome do país. Default: "BRASIL"

Body — products[] (array, mínimo 1 item)

Cada produto exige tributação: ou category_id (referência a uma categoria fiscal pré-cadastrada), ou o objeto impostos/tax_info com a configuração inline.
CampoTipoDescrição
codigostringCódigo interno do produto
name *stringDescrição do produto (caracteres CJK são removidos)
ncm *stringNCM com 8 dígitos
ceststringCódigo CEST (obrigatório quando há ICMS-ST)
gtinstringGTIN / código de barras
gtin_tributavelstringGTIN da unidade tributável
count *decimalQuantidade
unit *stringUnidade comercial (ex: "UN", "KG", "MT")
unit_price *decimalValor unitário
total_price *decimalValor total do item
discount_pricedecimalDesconto aplicado ao item
origem *intOrigem da mercadoria (0=Nacional, 1=Estrangeira—Importação direta, etc.)
indicador_total *intCompõe o total da NF-e: 0=não, 1=sim
category_idstringID da categoria fiscal pré-cadastrada (obrigatório se não enviar impostos/tax_info)
impostosobjectConfiguração inline de tributos (alternativa a category_id). Veja estrutura abaixo
tax_infoobjectAlias de impostos (mesma estrutura)
disable_difalbooleanDesativa o cálculo de DIFAL para este item
desconta_icms_pis_cofinsbooleanDesconta o ICMS da base de PIS/COFINS apenas para este item (sobrepõe a categoria)
iiobjectImposto de Importação — obrigatório para CFOP 3.xxx. Veja estrutura abaixo
import_declarationsarrayDeclarações de Importação (DI) — obrigatório quando transaction_type="2". Veja estrutura abaixo
nItemPedintItem do Pedido de Compra (I61). Número sequencial do item dentro do pedido referenciado em xPed (vem do id da raiz). Valores válidos: 1–999999. Default: omitido.

Body — products[].impostos / products[].tax_info

CampoTipoDescrição
industriastringIndústria/alíquota base (alias: aliquota)
icms
icms.codigo_cfopstringCFOP
icms.situacao_tributariastringCST/CSOSN do ICMS
icms.industriastringIndústria ICMS
icms.tipo_pessoastringTipo de pessoa (PF/PJ)
icms.codigo_beneficio_fiscalstringcBenef (código de benefício fiscal)
ipi
ipi.codigo_enquadramentostringCódigo de enquadramento legal do IPI
ipi.situacao_tributariastringCST IPI
ipi.aliquotastringAlíquota IPI
ipi.tipo_pessoastringTipo de pessoa
pis
pis.situacao_tributariastringCST PIS
pis.aliquotastringAlíquota PIS
pis.tipo_pessoastringTipo de pessoa
cofins
cofins.situacao_tributariastringCST COFINS
cofins.aliquotastringAlíquota COFINS
cofins.tipo_pessoastringTipo de pessoa
is (Imposto Seletivo)
is.cenariostringCenário IS
is.situacao_tributariastringCST IS
is.aliquotastringAlíquota IS
is.tipo_pessoastringTipo de pessoa
ibs_cbs (Reforma Tributária)
ibs_cbs.situacao_tributariastringCST IBS/CBS
ibs_cbs.tipo_pessoastringTipo de pessoa
ibs_cbs.classificacao_tributariastringClassificação tributária IBS/CBS
difal
difal.disable_difalbooleanDesativa DIFAL para o item (alternativa ao disable_difal direto no produto)

Body — products[].ii (Imposto de Importação)

CampoTipoDescrição
vBCdecimalBase de cálculo do II
vDespAdudecimalDespesas aduaneiras
vIIdecimalValor do II
vIOFdecimalValor do IOF

Body — products[].import_declarations[]

CampoTipoDescrição
nDIstringNúmero da DI
dDIstring (date)Data da DI
xLocDesembstringLocal do desembaraço
UFDesembstringUF do desembaraço
dDesembstring (date)Data do desembaraço
cExportadorstringCódigo do exportador
tpViaTranspintVia de transporte internacional
tpIntermediointTipo de intermediação
vAFRMMdecimalValor do AFRMM
additionsarrayAdições da DI (campos: nAdicao, nSeqAdic, cFabricante, vDescDI, nDraw)

Body — shipping_address / delivery_address (objetos, opcionais)

shipping_address é o local de retirada (origem física da mercadoria, se diferente do emitente). delivery_address é o local de entrega (destino físico, se diferente do cliente). Quando presentes, exigem: cpf ou cnpj, name, endereco, bairro (mín. 2 caracteres), city, uf e cep. Ambos objetos têm a mesma estrutura.
CampoTipoDescrição
cpfstringCPF (alternativa a cnpj)
cnpjstringCNPJ (alternativa a cpf)
iestringInscrição Estadual
name *stringRazão social / nome
endereco *stringLogradouro
complementostringComplemento
numberstringNúmero (atenção: o campo é number, não numero)
bairro *stringBairro
city *stringMunicípio
uf *stringUF
cep *stringCEP
telefonestringTelefone
emailstringE-mail

Body — transportation (objeto, opcional)

Se transportation for omitido, o sistema assume transport_mode="9" (sem frete).
CampoTipoDescrição
transport_modestringModalidade do frete: "0"=por conta do emitente, "1"=por conta do destinatário, "2"=por conta de terceiros, "3"=transporte próprio do remetente, "4"=transporte próprio do destinatário, "9"=sem frete
freight_amountdecimalValor total do frete
carrier_info — transportador
carrier_info.cpfstringCPF do transportador (alternativa a cnpj)
carrier_info.cnpjstringCNPJ do transportador (alternativa a cpf)
carrier_info.iestringInscrição Estadual
carrier_info.namestringRazão social
carrier_info.enderecostringLogradouro
carrier_info.citystringMunicípio
carrier_info.ufstringUF
carrier_info.cepstringCEP
vehicle_info — veículo
vehicle_info.platestringPlaca
vehicle_info.ufstringUF da placa
vehicle_info.rntcstringRNTC (Registro Nacional de Transportadores de Carga)
trailer_info — reboque (mesma estrutura de vehicle_info)
trailer_info.platestringPlaca do reboque
trailer_info.ufstringUF
trailer_info.rntcstringRNTC
packages[] — volumes
packages[].qtyintQuantidade
packages[].gross_weightdecimalPeso bruto
packages[].net_weightdecimalPeso líquido
packages[].packaging_typestringEspécie
packages[].numberstringNumeração
packages[].markstringMarca
packages[].sealsarray<string>Lacres
transport_tax_retention_info — retenção de ICMS sobre frete
transport_tax_retention_info.freight_service_amountdecimalValor do serviço de transporte
transport_tax_retention_info.tax_basedecimalBase de cálculo da retenção
transport_tax_retention_info.tax_ratedecimalAlíquota da retenção
transport_tax_retention_info.cfopstringCFOP
transport_tax_retention_info.cepstringCEP

Body — pag_info[] (array, opcional)

Se omitido, o sistema assume [{ "payment_method": "01", "payment_indicator": "0" }] (dinheiro, à vista).
CampoTipoDescrição
payment_method *stringForma de pagamento: "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, "15"=boleto, "17"=PIX, "90"=sem pagamento, "99"=outros
payment_indicator *stringIndicador: "0"=à vista, "1"=a prazo
payment_valuedecimalValor pago
card_info — dados do cartão (para payment_method 03/04)
card_info.integration_type *stringTipo de integração da maquininha (obrigatório se card_info presente)
card_info.brand_code *stringBandeira do cartão (obrigatório se card_info presente)
card_info.acquirer_cnpjstringCNPJ da adquirente
card_info.authorization_codestringCódigo de autorização

* Campo obrigatório.

Exemplo simplificado

{
  "nature_of_operation": "Venda de mercadoria",
  "transaction_type": "1",
  "model": "55",
  "issuance_type": "1",
  "ambiente": "2",
  "cliente": {
    "cpf": "12345678909",
    "name": "Cliente Exemplo",
    "endereco": "Rua Exemplo",
    "numero": "100",
    "bairro": "Centro",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "01001000",
    "email": "cliente@exemplo.com"
  },
  "products": [
    {
      "codigo": "PROD001",
      "name": "Produto Exemplo",
      "ncm": "85176277",
      "count": 2,
      "unit": "UN",
      "unit_price": 150.00,
      "total_price": 300.00,
      "category_id": "SEU_CATEGORY_ID",
      "origem": 0,
      "indicador_total": 1
    }
  ],
  "pag_info": [
    { "payment_method": "01", "payment_indicator": "0", "payment_value": 300.00 }
  ]
}

Exemplo completo (todos os campos)

{
  "id": "PEDIDO-2026-0001",
  "nature_of_operation": "Venda de mercadoria",
  "transaction_type": "1",
  "model": "55",
  "issuance_type": "1",
  "ambiente": "2",
  "finalidade": "1",
  "ref_nfe_chave": "",
  "is_reopen": false,
  "dh_sai_ent": "",
  "total_discount_amount": 0.00,
  "troco": 0.00,
  "seguro": 0.00,
  "outras_despesas": 0.00,
  "ind_final": "1",
  "ind_pres": "9",
  "informacoes_complementares": "Entrega via transportadora",
  "informacoes_fisco": "ICMS recolhido conforme legislação",
  "cliente": {
    "cpf": "",
    "cnpj": "12345678000199",
    "ie": "123456789",
    "name": "Cliente Exemplo LTDA",
    "endereco": "Av. Paulista",
    "numero": "1000",
    "complemento": "Sala 200",
    "bairro": "Bela Vista",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "01310100",
    "telefone": "11999998888",
    "email": "cliente@exemplo.com",
    "id_estrangeiro": "",
    "c_pais": 1058,
    "x_pais": "BRASIL"
  },
  "shipping_address": {
    "cnpj": "98765432000111",
    "name": "Depósito Origem LTDA",
    "ie": "987654321",
    "endereco": "Rua do Depósito",
    "number": "50",
    "complemento": "Galpão 3",
    "bairro": "Industrial",
    "city": "Guarulhos",
    "uf": "SP",
    "cep": "07000000",
    "telefone": "11988887777",
    "email": "deposito@exemplo.com"
  },
  "delivery_address": {
    "cnpj": "12345678000199",
    "name": "Cliente Exemplo LTDA",
    "ie": "123456789",
    "endereco": "Rua de Entrega",
    "number": "25",
    "complemento": "Loja 2",
    "bairro": "Centro",
    "city": "Campinas",
    "uf": "SP",
    "cep": "13010000",
    "telefone": "11977776666",
    "email": "entrega@exemplo.com"
  },
  "products": [
    {
      "codigo": "PROD001",
      "name": "Notebook Dell",
      "ncm": "84713012",
      "cest": "",
      "gtin": "7891234567890",
      "gtin_tributavel": "7891234567890",
      "count": 2,
      "unit": "UN",
      "unit_price": 3500.00,
      "total_price": 7000.00,
      "discount_price": 0.00,
      "origem": 0,
      "indicador_total": 1,
      "category_id": "TF00001",
      "nItemPed": 1
    },
    {
      "codigo": "PROD002",
      "name": "Mouse sem fio",
      "ncm": "84716053",
      "count": 5,
      "unit": "UN",
      "unit_price": 80.00,
      "total_price": 400.00,
      "origem": 0,
      "indicador_total": 1,
      "nItemPed": 2,
      "impostos": {
        "icms": {
          "codigo_cfop": "5102",
          "situacao_tributaria": "00",
          "industria": "",
          "tipo_pessoa": "juridica",
          "codigo_beneficio_fiscal": ""
        },
        "ipi": {
          "codigo_enquadramento": "999",
          "situacao_tributaria": "99",
          "aliquota": "0.00",
          "tipo_pessoa": "juridica"
        },
        "pis": {
          "situacao_tributaria": "01",
          "aliquota": "0.65",
          "tipo_pessoa": "juridica"
        },
        "cofins": {
          "situacao_tributaria": "01",
          "aliquota": "3.00",
          "tipo_pessoa": "juridica"
        },
        "ibs_cbs": {
          "situacao_tributaria": "000",
          "tipo_pessoa": "juridica",
          "classificacao_tributaria": "000001"
        }
      }
    }
  ],
  "transportation": {
    "transport_mode": "1",
    "freight_amount": 150.00,
    "carrier_info": {
      "cnpj": "11222333000144",
      "ie": "112223334",
      "name": "Transportadora Exemplo LTDA",
      "endereco": "Rod. BR-101, km 50",
      "city": "Santos",
      "uf": "SP",
      "cep": "11000000"
    },
    "vehicle_info": {
      "plate": "ABC1D23",
      "uf": "SP",
      "rntc": "12345"
    },
    "trailer_info": {
      "plate": "DEF4G56",
      "uf": "SP",
      "rntc": "67890"
    },
    "packages": [
      {
        "qty": 3,
        "gross_weight": 12.500,
        "net_weight": 11.000,
        "packaging_type": "CAIXA",
        "number": "001-003",
        "mark": "FRAGIL",
        "seals": ["LACRE001", "LACRE002"]
      }
    ],
    "transport_tax_retention_info": {
      "freight_service_amount": 150.00,
      "tax_base": 150.00,
      "tax_rate": 12.00,
      "cfop": "5932",
      "cep": "11000000"
    }
  },
  "pag_info": [
    {
      "payment_indicator": "1",
      "payment_method": "03",
      "payment_value": 7400.00,
      "card_info": {
        "integration_type": "1",
        "brand_code": "01",
        "acquirer_cnpj": "01234567000189",
        "authorization_code": "AUTH987654"
      }
    }
  ]
}
GET /api/invoice/get_list
Listar NF-e (com paginação)

Lista as NF-e da empresa com paginação. Parâmetros passados via query string (não no body). O filtro de tempo é opcional, mas se enviado exige ambos start_create_time e end_create_time.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
page *intNúmero da página (≥ 1)
page_size *intTamanho da página (1–50)
start_create_timelongUnix timestamp em milissegundos — início (exige end_create_time)
end_create_timelongUnix timestamp em milissegundos — fim
statusstringFiltrar por status (valores: "Authorized", "Canceled", "Processing", "Rejected", etc.)

* Campo obrigatório.

Exemplo de chamada

GET /api/invoice/get_list?page=1&page_size=20&status=Authorized

Resposta

            {
              "success": true,
              "data": {
                "list": [
                  {
                    "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                    "chave": "35210112345678901234567890123456789012345678",
                    "status": "Authorized",
                    "create": "2024-01-10T10:30:00Z",
                    "issue_time": "2024-01-10T10:31:00Z"
                  }
                ],
                "page": 1,
                "total": 142,
                "total_pages": 8
              }
            }
GET /api/invoice/get_detail
Consultar detalhes da NF-e

Retorna os detalhes de uma NF-e específica pelo UUID. Inclui URLs do XML, do DANFE (completo, simplificado e de etiqueta) e metadados.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
uuid *stringUUID da NF-e

* Campo obrigatório.

Exemplo de chamada

GET /api/invoice/get_detail?uuid=65f8b9a1c2d3e4f5a6b7c8d9

Resposta

            {
              "success": true,
              "data": {
                "id": "pedido-2024-0001",
                "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                "chave": "35210112345678901234567890123456789012345678",
                "serie": 1,
                "number": 100,
                "status": "Authorized",
                "total_price": 300.00,
                "xml": "https://oss.example.com/.../chave.xml",
                "danfe": "https://oss.example.com/.../chave.pdf",
                "danfe_simples": "https://oss.example.com/.../chave_simplie.pdf",
                "danfe_etiqueta": "https://oss.example.com/.../chave_etiqueta.pdf",
                "create": "2024-01-10T10:30:00Z",
                "issue_time": "2024-01-10T10:31:00Z"
              }
            }
POST /api/invoice/refresh
Atualizar status da nota fiscal

Consulta o status atual da NF-e na SEFAZ e atualiza o registro local. Útil quando a emissão ficou em processamento ou contingência.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
uuid *stringUUID da NF-e a consultar

* Campo obrigatório.

Exemplo de payload

            {
              "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
            }
POST /api/invoice/cancel
Cancelar nota fiscal

Cancela uma NF-e já autorizada. A justificativa enviada à SEFAZ é fixa: "Erro no preenchimento da nota fiscal." — não é configurável pelo payload.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
uuid *stringUUID da NF-e a cancelar (identificador interno retornado por /api/invoice/create)

* Campo obrigatório.

Exemplo de payload

            {
              "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
            }
POST /api/invoice/invalid
Inutilizar faixa de numeração

Inutiliza uma faixa contínua de numeração que não chegou a ser emitida (não confundir com cancelamento — cancelamento é para nota já autorizada). Operação registrada na SEFAZ e irreversível.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
modelo *stringModelo do documento: "55"=NF-e, "65"=NFC-e. (Atenção: o campo aqui é modelo, não model)
ambiente *string"1"=produção, "2"=homologação
serie *intSérie da numeração a inutilizar
start_number *intNúmero inicial da faixa
end_number *intNúmero final da faixa
motivo *stringJustificativa da inutilização (mín. 15 caracteres por exigência SEFAZ)

* Campo obrigatório.

Exemplo de payload

            {
              "modelo": "55",
              "ambiente": "2",
              "serie": 1,
              "start_number": 100,
              "end_number": 105,
              "motivo": "Falha no sistema durante a emissao do lote"
            }
POST /api/invoice/get_danfe
Obter DANFE (PDF) da NF-e

Retorna três URLs da DANFE de uma NF-e: a DANFE completa (PDF), a DANFE simplificada em PDF (formato cupom) e a DANFE simplificada em PNG (etiqueta/imagem). Os PDFs são gerados sob demanda a partir do XML autorizado e cacheados no OSS. Em chamadas subsequentes, se o status da nota não mudou, retorna o cache existente; se o status mudou (ex.: nota foi cancelada), os PDFs são regerados.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body

CampoTipoDescrição
uuid ⚠stringUUID interno da NF-e (retornado por /api/invoice/create)
chave ⚠stringChave de acesso da NF-e (44 dígitos)

uuid ou chave, um dos dois é obrigatório.

Exemplo de payload

                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                  "uuid": "abc123-def456-..."
                                                                                                                                                                                                                                                                                                                                                                                                }

Resposta

                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                  "success": true,
                                                                                                                                                                                                                                                                                                                                                                                                  "data": {
                                                                                                                                                                                                                                                                                                                                                                                                    "danfe": "https://storage.../uid/dd-MM-yyyy/companyId/.pdf",
                                                                                                                                                                                                                                                                                                                                                                                                    "danfe_simples": "https://storage.../uid/cnpj/dd-MM-yyyy/_simplie.pdf",
                                                                                                                                                                                                                                                                                                                                                                                                    "danfe_simples_png": "https://storage.../uid/cnpj/dd-MM-yyyy/_simplie.png"
                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                }

Campos da Resposta

CampoTipoDescrição
danfestringURL do PDF da DANFE completa (formato A4)
danfe_simplesstringURL do PDF da DANFE simplificada (formato cupom)
danfe_simples_pngstringURL do PNG da DANFE simplificada (etiqueta/imagem)

Respostas de erro

MensagemCausa
uuid/chave不能为空Nem uuid nem chave foram enviados
发票不存在Nota não encontrada para o usuário do token, ou XML autorizado ausente
发票详情不存在Detalhe da nota (com protocolo) não encontrado
获取PDF失败:<motivo>Falha ao gerar o PDF a partir do XML
POST /api/invoice/get_xml
Exportar XML/Excel em lote (assíncrono)

Inicia uma tarefa assíncrona de exportação em lote de notas fiscais do usuário, filtrando por período e status. Pode gerar uma planilha Excel (somente metadados) ou um pacote ZIP com os XMLs. A primeira chamada cria a tarefa e retorna status: "Processing"; chamadas seguintes com os mesmos parâmetros retornam o progresso até status: "Success", quando o campo url contém o link de download.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
type *stringFormato de saída: "excel" (planilha de metadados) ou qualquer outro valor (ex.: "xml") para ZIP com XMLs
statusstringFiltra por status da nota (ex.: "Success", "Canceled", "Voided"). Para type=excel, é tratado em minúsculas
monthintMês (1–12). Se informado, sobrepõe start_create_time/end_create_time; usa fuso America/Sao_Paulo e ano corrente (ou anterior se o mês for futuro)
start_create_timelongInício do período (Unix timestamp em milissegundos)
end_create_timelongFim do período (Unix timestamp em milissegundos)

* Campo obrigatório.

Exemplo de payload

                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                  "type": "xml",
                                                                                                                                                                                                                                                                                                                                                                                                  "status": "Success",
                                                                                                                                                                                                                                                                                                                                                                                                  "month": 5
                                                                                                                                                                                                                                                                                                                                                                                                }

Resposta — processando

                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                  "success": true,
                                                                                                                                                                                                                                                                                                                                                                                                  "data": {
                                                                                                                                                                                                                                                                                                                                                                                                    "status": "Processing",
                                                                                                                                                                                                                                                                                                                                                                                                    "progress_count": 120,
                                                                                                                                                                                                                                                                                                                                                                                                    "total_count": 543,
                                                                                                                                                                                                                                                                                                                                                                                                    "url": ""
                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                }

Resposta — concluído

                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                  "success": true,
                                                                                                                                                                                                                                                                                                                                                                                                  "data": {
                                                                                                                                                                                                                                                                                                                                                                                                    "status": "Success",
                                                                                                                                                                                                                                                                                                                                                                                                    "progress_count": 543,
                                                                                                                                                                                                                                                                                                                                                                                                    "total_count": 543,
                                                                                                                                                                                                                                                                                                                                                                                                    "url": "https://storage.../exports/uid/.zip"
                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                }

Campos da Resposta

CampoTipoDescrição
statusstring"Processing" enquanto a tarefa roda, "Success" quando o arquivo está pronto
progress_countintQuantidade de notas já processadas
total_countintTotal de notas a processar
urlstringURL de download do arquivo final (vazio enquanto status = Processing)
Idempotência: a tarefa é deduplicada por hash dos parâmetros (uid + token + período + status + type). Chamadas repetidas com os mesmos parâmetros retornam o progresso da mesma tarefa, sem disparar novas execuções.

Respostas de erro

MensagemCausa
发票类型字段不能为空type ausente
POST /api/invoice/consultar_status
Consultar status da NF-e/NFC-e na SEFAZ

Consulta o status atual de uma NF-e ou NFC-e diretamente na SEFAZ pela chave de acesso (44 dígitos), via serviço NfeConsultaProtocolo4. Funciona tanto para notas próprias (emitidas pela empresa do token) quanto para notas de terceiros (ex.: capturadas via DistDFe). O modelo (NF-e/NFC-e) é detectado automaticamente pelas posições 20-21 da chave.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa (cujo certificado será usado na consulta)
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body

CampoTipoDescrição
chave *stringChave de acesso (44 dígitos numéricos). UF do emitente é extraída das posições 0-1; modelo das posições 20-21 (55=NF-e, 65=NFC-e).

* Campo obrigatório.

Exemplo de payload

        {
          "chave": "35260512345678000199550010000000011000000018"
        }

Resposta

        {
          "success": true,
          "message": "Sucesso",
          "data": {
            "chave": "35260512345678000199550010000000011000000018",
            "status": "autorizada",
            "cstat": 100,
            "motivo": "Autorizado o uso da NF-e"
          }
        }

Campos da resposta

CampoTipoDescrição
chavestringChave de acesso consultada
statusstringStatus normalizado (ver tabela abaixo)
cstatintCódigo cStat bruto da SEFAZ
motivostringMensagem xMotivo bruta da SEFAZ

Mapeamento de status

statuscStat da SEFAZSignificado
autorizada100, 150NF-e autorizada para uso
cancelada101, 151Cancelada (também retornado se houver evento de cancelamento vinculado, mesmo com cStat=100)
denegada110, 301, 302Uso denegado pela SEFAZ
inutilizada102Número inutilizado (faixa de numeração)
nao_encontrada217NF-e não consta na base da SEFAZ
desconhecidooutroscStat não mapeado — consulte cstat e motivo brutos

Respostas de erro

MensagemCausa
chave inválida: deve ter 44 dígitosChave ausente, com tamanho diferente de 44 ou contendo caracteres não numéricos
empresa não possui certificado configuradoA empresa do token não tem cert_file cadastrado
SEFAZ retornou resposta vaziaA SEFAZ não devolveu retorno (timeout, fora do ar)
erro ao consultar SEFAZ: <detalhe>Exceção ao chamar o serviço (XML inválido, timeout, certificado expirado, etc.)
POST /api/category/create
Criar categoria fiscal

Cria uma nova categoria fiscal (template de impostos) vinculada à empresa autenticada. Cada categoria agrega cenários de ICMS, IPI, PIS, COFINS, e opcionalmente IBS/CBS e IS. Para editar uma existente, use /api/category/edit.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body — top-level

CampoTipoDescrição
descricao *stringDescrição da categoria fiscal
category_idstringID customizado. Quando omitido, é auto-gerado no formato "TF" + número incremental
disable_difalbooleanDesabilita o cálculo de DIFAL para esta categoria. Default: false
desconta_icms_pis_cofinsbooleanDesconta o ICMS da base de cálculo de PIS/COFINS (base = vProd − vICMS). Default: false
icms[] *arrayCenários de ICMS (estrutura abaixo)
ipi[] *arrayCenários de IPI (estrutura abaixo)
pis[] *arrayCenários de PIS (estrutura abaixo)
cofins[] *arrayCenários de COFINS (estrutura abaixo)
ibs_cbs[]arrayCenários de IBS/CBS — reforma tributária (estrutura abaixo)
is[]arrayCenários de IS — Imposto Seletivo (estrutura abaixo)

Body — icms[]

CampoTipoDescrição
tipo_tributacao *stringTipo de tributação ICMS
cenario *stringCenário (ex.: "saida_dentro_estado", "saida_fora_estado", "padrao")
tipo_pessoa *string"fisica" ou "juridica"
codigo_cfop *stringCFOP
situacao_tributaria *stringCST/CSOSN do ICMS
nao_contribuintebooleanCliente não-contribuinte
aliquota_importacaostringAlíquota de importação
aliquota_creditodecimalAlíquota de crédito (% para Simples Nacional)
aliquota_diferimentodecimalPercentual de diferimento
aliquota_diferimentoFcpstringDiferimento do FCP (atenção: campo usa camelCase diferimentoFcp)
aliquota_reducaodecimalPercentual de redução de base ICMS
aliquota_reducaoStdecimalPercentual de redução de base ICMS-ST (atenção: reducaoSt camelCase)
motivo_desoneracaostringCódigo do motivo da desoneração ICMS
motivo_desoneracaoStstringCódigo do motivo da desoneração ICMS-ST (atenção: camelCase)
Alíquotas por estado — opcional
aliquota_mva[]arrayMVA por UF — itens: { estado, aliquota }
aliquota_icms[]arrayAlíquota ICMS por UF — itens: { estado, aliquota }
aliquota_icms_st[]arrayAlíquota ICMS-ST por UF — itens: { estado, aliquota }
aliquota_fcp[]arrayAlíquota FCP por UF — itens: { estado, aliquota }
aliquota_fcp_st[]arrayAlíquota FCP-ST por UF — itens: { estado, aliquota }
beneficio_fiscal[]arrayCódigo de benefício fiscal por UF — itens: { estado, codigo }

Body — ipi[]

CampoTipoDescrição
cenario *stringCenário
tipo_pessoa *string"fisica" ou "juridica"
situacao_tributaria *stringCST IPI
codigo_enquadramento *stringCódigo de enquadramento legal
aliquota *stringAlíquota IPI

Body — pis[] e cofins[] (mesma estrutura)

CampoTipoDescrição
cenario *stringCenário
tipo_pessoa *string"fisica" ou "juridica"
situacao_tributaria *stringCST PIS/COFINS
aliquota *stringAlíquota

Body — ibs_cbs[] (Reforma Tributária)

CampoTipoDescrição
cenario *stringCenário
tipo_pessoa *string"fisica" ou "juridica"
situacao_tributaria *stringCST IBS/CBS
classificacao_tributaria *stringClassificação tributária

Body — is[] (Imposto Seletivo)

CampoTipoDescrição
cenario *stringCenário
tipo_pessoa *string"fisica" ou "juridica"
situacao_tributaria *stringCST IS
aliquota *stringAlíquota IS

* Campo obrigatório.

Exemplo mínimo

        {
          "descricao": "Venda de mercadoria padrão",
          "icms": [{
            "tipo_tributacao": "normal",
            "cenario": "padrao",
            "tipo_pessoa": "juridica",
            "codigo_cfop": "5102",
            "situacao_tributaria": "00"
          }],
          "ipi":  [{ "cenario": "padrao", "tipo_pessoa": "juridica", "situacao_tributaria": "99", "codigo_enquadramento": "999", "aliquota": "0" }],
          "pis":  [{ "cenario": "padrao", "tipo_pessoa": "juridica", "situacao_tributaria": "01", "aliquota": "0.65" }],
          "cofins":[{ "cenario": "padrao", "tipo_pessoa": "juridica", "situacao_tributaria": "01", "aliquota": "3" }]
        }

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF123"
          }
        }
GET /api/category/get_detail
Detalhes da categoria fiscal

Retorna a configuração completa de uma categoria fiscal: todos os cenários de ICMS, IPI, PIS, COFINS, IBS/CBS, incluindo arrays por UF (MVA, alíquotas, benefícios fiscais).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
category_id *stringID da categoria fiscal

* Campo obrigatório.

Exemplo de chamada

GET /api/category/get_detail?category_id=TF123

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF123",
            "descricao": "Venda de mercadoria padrão",
            "disable_difal": false,
            "desconta_icms_pis_cofins": false,
            "icms": [{
              "tipo_tributacao": "normal",
              "cenario": "padrao",
              "tipo_pessoa": "juridica",
              "nao_contribuinte": false,
              "codigo_cfop": "5102",
              "situacao_tributaria": "00",
              "aliquota_importacao": "",
              "aliquota_credito": 0,
              "aliquota_reducao": 0,
              "aliquota_reducao_st": 0,
              "motivo_desoneracao": "",
              "motivo_desoneracao_st": "",
              "aliquota_icms": [{"estado":"SP","aliquota":18}]
            }],
            "ipi":    [{"cenario":"padrao","tipo_pessoa":"juridica","situacao_tributaria":"99","codigo_enquadramento":"999","aliquota":"0"}],
            "pis":    [{"cenario":"padrao","tipo_pessoa":"juridica","situacao_tributaria":"01","aliquota":"0.65"}],
            "cofins": [{"cenario":"padrao","tipo_pessoa":"juridica","situacao_tributaria":"01","aliquota":"3"}],
            "ibs_cbs":[]
          }
        }
GET /api/category/get_list
Listar categorias fiscais

Lista as categorias fiscais da empresa autenticada com paginação. Retorna apenas category_id e descricao de cada categoria — use /api/category/get_detail para detalhes completos.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
page *intNúmero da página (≥ 1)
page_size *intTamanho da página (1–50)

* Campo obrigatório.

Exemplo de chamada

GET /api/category/get_list?page=1&page_size=20

Resposta

        {
          "success": true,
          "data": {
            "list": [
              { "category_id": "TF123", "descricao": "Venda de mercadoria padrão" },
              { "category_id": "TF124", "descricao": "Devolução de venda" }
            ],
            "page": 1,
            "total": 2,
            "total_pages": 1
          }
        }
POST /api/category/edit
Editar categoria fiscal

Edita uma categoria fiscal existente. O corpo é idêntico ao de /api/category/create, com a única diferença de que category_id é obrigatório e deve corresponder a uma categoria existente. O upsert substitui completamente os arrays icms, ipi, pis, cofins, ibs_cbs, is — envie todos os cenários atualizados (não há merge por cenário).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

A estrutura completa do body está documentada em /api/category/create. Aqui só o category_id tem tratamento diferente:

CampoTipoDescrição
category_id *stringID da categoria a editar (deve existir; caso contrário retorna erro)
descricao *stringDescrição
icms[] *arrayCenários ICMS (substitui completamente)
ipi[] *arrayCenários IPI
pis[] *arrayCenários PIS
cofins[] *arrayCenários COFINS
ibs_cbs[]arrayCenários IBS/CBS (opcional)
is[]arrayCenários IS (opcional)
disable_difalbooleanDefault: false
desconta_icms_pis_cofinsbooleanDefault: false

* Campo obrigatório. Para os campos internos de cada array (icms[].codigo_cfop etc.), veja /api/category/create.

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF123"
          }
        }
POST /api/category/delete
Excluir categoria fiscal

Remove uma categoria fiscal da empresa. Operação irreversível. Produtos que estavam vinculados a esta categoria continuarão referenciando o category_id removido, então a emissão de NFe vai falhar — atualize os produtos antes de excluir.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
category_id *stringID da categoria a excluir

* Campo obrigatório.

Exemplo de payload

        {
          "category_id": "TF123"
        }

Resposta

        {
          "success": true
        }
POST /api/invoice/return
Emitir NF-e de devolução

Emite uma NF-e de devolução (modelo 55, finalidade 4) a partir de uma NF-e original. Suporta dois modos: devolução total (referencia a nota original via uuid ou chave) ou devolução parcial/customizada (envia o body completo via return_detail).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body — campos de raiz

CampoTipoDescrição
uuidstringUUID da NF-e original (obrigatório se chave ausente; não usado no modo return_detail)
chavestringChave de 44 dígitos da NF-e original (obrigatória no modo return_detail; alternativa a uuid no modo simples)
cfop *stringCFOP de devolução (ex.: "1202", "1411", "2202", "5202", "5411", "6202")
natureza_operacaostringNatureza da operação (ex.: "Devolução de venda"). Alias aceito: nature_of_operation
return_detailobjectBody completo da NF-e de devolução. Mesma estrutura de /api/invoice/create, com uma peculiaridade: dentro de return_detail.cliente o campo do número do endereço é number (em inglês), não numero. Quando ausente, a devolução é um clone integral da NF-e original.

* Campo obrigatório. uuid OU chave também é obrigatório (exatamente um).

Exemplo — devolução total

                        {
                          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                          "cfop": "5202",
                          "natureza_operacao": "Devolução de venda"
                        }

Exemplo — devolução parcial via return_detail

                        {
                          "chave": "35210112345678901234567890123456789012345678",
                          "cfop": "5202",
                          "natureza_operacao": "Devolução parcial",
                          "return_detail": {
                            "nature_of_operation": "Devolução parcial",
                            "transaction_type": "1",
                            "model": "55",
                            "issuance_type": "1",
                            "ambiente": "2",
                            "cliente": { "cnpj": "12345678000199", "name": "Fornecedor", "endereco": "...", "bairro": "...", "city": "...", "uf": "SP", "cep": "01001000" },
                            "products": [ { "name": "...", "ncm": "...", "count": 1, "unit": "UN", "unit_price": 100, "total_price": 100, "category_id": "...", "origem": 0, "indicador_total": 1 } ]
                          }
                        }

percent Parâmetros Tributários Detalhados

scale_balance Parâmetros ICMS
Cenário de Tributação
padrao saida_fora_estado saida_dentro_estado entrada_fora_estado entrada_dentro_estado
Situação Tributária (CST)
00: Tributada integralmente
02: Tributada isenta
10: Tributada com cobrança do ICMS
20: Com redução de base de cálculo
30: Isenta ou não tributada
40: Isenta
41: Não tributada
50: Suspensão
">saida_dentro_estado entrada_fora_estado entrada_dentro_estado
Situação Tributária (CST)
01: Operação Tributável (alíquota normal)
02: Operação Tributável (alíquota diferenciada)
03: Operação Tributável (isenta)
04: Operação Tributável (suspensão)
05: Operação Tributável (ST)
06: Operação Tributável (alíquota zero)
07: Operação Isenta da Contribuição
08: Operação sem Incidência da Contribuição
09: Operação com Suspensão da Contribuição
49: Outras Operações de Saída
50: Direito a crédito (operações próprias)
51: Direito a crédito (aquisições)
52: Lançamento a crédito
53: Lançamento a débito
54: Lançamento a crédito (extemporâneo)
55: Lançamento a débito (extemporâneo)
56: Crédito Presumido
60: Crédito Presumido (aquisições)
61: Crédito Presumido (importação)
62: Crédito Presumido (atividade rural)
63: Crédito Presumido (outras)
64: Crédito Presumido (não gerador)
65: Crédito Presumido (substituição)
66: Crédito Presumido (substituição)
67: Crédito Presumido (exportação)
70: Operação de Aquisição sem Direito a Crédito
71: Operação de Aquisição com Isenção
72: Operação de Aquisição com Suspensão
73: Operação de Aquisição a Alíquota Zero
74: Operação de Aquisição sem Incidência
75: Operação de Aquisição por Substituição
98: Outras Operações de Entrada
99: Outras Operações
💡 INFORMAÇÃO: Os campos tipo_pessoa aceitam valores fisica (pessoa física) ou juridica (pessoa jurídica). Para PIS/COFINS, o campo aliquota deve ser formatado como string com duas casas decimais (ex: "1.65").

credit_card Parâmetros de Pagamento

Indicador de Pagamento
0 À vista
1 À prazo
Métodos de Pagamento
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
15 Boleto Bancário
90 Sem Pagamento
99 Outros
Bandeiras de Cartão
01 Visa
02 Mastercard
03 American Express
04 Sorocred
05 Diners Club
06 Elo
07 Hipercard
08 Aura
09 Cabal
99 Outros

bug_report Solução de Problemas com XML

warning Rejeição 225 - Falha no Schema XML

Ocorre quando tenta cancelar, baixar XML, inutilizar número ou fazer manifestação de uma NF-e que não foi registrada com sucesso na base de dados da SEFAZ.

1
Verificar se a NF-e foi autorizada (status "Autorizada")
2
Reemitir a NF-e se não foi autorizada
3
Inutilizar número se não foi utilizado
lightbulb Validação Online da SEFAZ

Use o validador oficial para identificar problemas no XML:

https://www.sefaz.rs.gov.br/nfe/nfe-val.aspx

Problemas comuns: Endereço incompleto, NCM inválido, formatação de valores incorreta, campos obrigatórios ausentes.

error Códigos de Erro da SEFAZ

Código Descrição Solução
217 Data de emissão muito atrasada Emitir em contingência ou regularizar
404 CNPJ/CPF do destinatário inválido Verificar documento do cliente
563 CFOP não permitido para operação Revisar CFOP da operação
POST /api/nfce/company/create
Cadastrar empresa para NFC-e

Cadastra (ou atualiza) uma empresa para emissão de NFC-e. Razão social, IE, endereço e demais dados são extraídos automaticamente via SintegraWS a partir do CNPJ. Se o CNPJ já existir para o usuário, atualiza os campos NFC-e e retorna a empresa existente.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken do distribuidor (b2b)
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
cnpj *stringCNPJ da empresa emissora
cert_file *stringURL HTTPS do certificado digital A1 (.pfx ou .p12)
cert_pwd *stringSenha do certificado
csc_id *stringID do CSC (Código de Segurança do Contribuinte) na SEFAZ
csc *stringToken CSC (segredo compartilhado com a SEFAZ)
serie_nfceintSérie da NFC-e
number_nfceintNúmero inicial da numeração de NFC-e
telefonestringTelefone da empresa

* Campo obrigatório. Demais dados (nome, IE, endereço, etc.) são extraídos automaticamente via SintegraWS pelo CNPJ.

Exemplo de payload

        {
          "cnpj": "12345678000199",
          "cert_file": "https://exemplo.com/cert.pfx",
          "cert_pwd": "senha_certificado",
          "csc_id": "000001",
          "csc": "ABCDEF0123456789",
          "serie_nfce": 1,
          "number_nfce": 1,
          "telefone": "11999999999"
        }

Resposta

        {
          "success": true,
          "message": "Empresa cadastrada para NFC-e",
          "data": {
            "company_id": "comp_789012",
            "token": "eyJhbGciOiJIUzI1NiIs..."
          }
        }
POST /api/nfce/company/update
Atualizar dados da empresa NFC-e

Atualiza dados da empresa NFC-e identificada pelo header token. Todos os campos do body são opcionais — envie apenas os que deseja modificar. Ao atualizar cep, o sistema resolve automaticamente stateCode e ibge. Quando cert_file e cert_pwd vêm juntos, o certificado é validado antes de salvar.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body (todos os campos opcionais — envie ≥ 1)

CampoTipoDescrição
Identificação
namestringRazão social
aliasstringNome fantasia
iestringInscrição Estadual
invoice_typestringRegime tributário
emailstringE-mail
telefonestringTelefone
Endereço
cepstringCEP (atualiza automaticamente stateCode e ibge)
addressstringLogradouro
house_numberstringNúmero
complementostringComplemento
townstringBairro
citystringMunicípio
statestringUF
NFC-e
csc_idstringID do CSC
cscstringToken CSC
serie_nfceintSérie
number_nfceintPróximo número
cert_filestringURL HTTPS do novo certificado A1 (.pfx ou .p12)
cert_pwdstringSenha do certificado

Pelo menos 1 campo no body é obrigatório. CNPJ é imutável.

Exemplo de payload

        {
          "alias": "Loja Centro - Filial 02",
          "telefone": "11988888888",
          "serie_nfce": 2,
          "number_nfce": 1
        }

Resposta

        {
          "success": true,
          "message": "Empresa NFC-e atualizada com sucesso"
        }
POST /api/nfce/company/get
Consultar empresa NFC-e

Retorna os dados da empresa NFC-e identificada pelo header token. Atenção: método é POST mas não há campos no body — a empresa é resolvida apenas pelo token.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

Vazio. Pode ser enviado {}.

Resposta

        {
          "success": true,
          "data": {
            "company_id": "comp_789012",
            "cnpj": "12345678000199",
            "name": "Empresa Exemplo LTDA",
            "alias": "Loja Centro",
            "ie": "123456789",
            "invoice_type": "simples_nacional",
            "email": "contato@empresa.com",
            "telefone": "11999999999",
            "cep": "01001000",
            "address": "Rua Exemplo",
            "house_number": "100",
            "complemento": "Sala 5",
            "town": "Centro",
            "city": "São Paulo",
            "state": "SP",
            "state_code": "SP",
            "cert_file": "https://exemplo.com/cert.pfx",
            "csc_id": "000001",
            "csc": "ABCDEF0123456789",
            "serie_nfce": 1,
            "number_nfce": 42
          }
        }

Gerenciamento de Categorias Fiscais NFC-e

Categorias fiscais definem as regras tributárias aplicadas aos produtos na emissão de NFC-e. Diferente da NFe, a NFC-e opera apenas com vendas internas (dentro do estado), portanto a estrutura é simplificada: um único objeto por imposto, sem necessidade de múltiplos cenários.

Nota: As categorias NFC-e são armazenadas separadamente das categorias NFe. Cada categoria possui configurações de ICMS, PIS, COFINS e IBS/CBS. Todos os endpoints desta seção exigem os headers token, sign e timestamp.
POST /api/nfce/category/create
Criar categoria fiscal NFC-e

Cria uma categoria fiscal NFC-e. Cada categoria tem um único cenário (saída interna) e usa objetos planos para ICMS, PIS, COFINS e IBS/CBS (sem array, pois NFC-e não permite múltiplos cenários por categoria). Não possui IPI.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body (raiz)

CampoTipoDescrição
descricao *stringDescrição da categoria
codigo_cfop *stringCódigo CFOP (ex.: 5102, 5405)
icms *objectConfiguração de ICMS (objeto plano)
pis *objectConfiguração de PIS (objeto plano)
cofins *objectConfiguração de COFINS (objeto plano)
ibs_cbsobjectConfiguração de IBS/CBS (Reforma Tributária, opcional)

icms

CampoTipoDescrição
situacao_tributaria *stringCST/CSOSN (ex.: 102, 500)
aliquota_reducaodecimalPercentual de redução da base de cálculo
motivo_desoneracaostringCódigo do motivo de desoneração
aliquota_icmsarrayAlíquotas por estado: [{ "estado": "SP", "aliquota": 18.00 }]
aliquota_fcparrayFCP por estado: [{ "estado": "SP", "aliquota": 0.00 }]
beneficio_fiscalarrayBenefício fiscal por estado: [{ "estado": "SP", "codigo": "SP800001" }]

pis / cofins

CampoTipoDescrição
situacao_tributaria *stringCST PIS/COFINS
aliquota *stringAlíquota percentual (ex.: "0.00", "1.65", "7.60")

ibs_cbs (opcional)

CampoTipoDescrição
situacao_tributaria *stringCST IBS/CBS
classificacao_tributaria *stringCódigo de classificação tributária

* Campo obrigatório.

Exemplo de payload

        {
          "descricao": "Bebidas não alcoólicas",
          "codigo_cfop": "5102",
          "icms": {
            "situacao_tributaria": "102",
            "aliquota_icms": [
              { "estado": "SP", "aliquota": 18.00 }
            ]
          },
          "pis": {
            "situacao_tributaria": "99",
            "aliquota": "0.00"
          },
          "cofins": {
            "situacao_tributaria": "99",
            "aliquota": "0.00"
          },
          "ibs_cbs": {
            "situacao_tributaria": "000",
            "classificacao_tributaria": "000001"
          }
        }

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF00001"
          }
        }
GET /api/nfce/category/get_detail
Obter detalhes da categoria fiscal NFC-e

Retorna os dados completos de uma categoria fiscal NFC-e (descrição, CFOP, ICMS, PIS, COFINS e IBS/CBS).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Query string

CampoTipoDescrição
category_id *stringID da categoria NFC-e

* Campo obrigatório.

Exemplo de requisição

GET /api/nfce/category/get_detail?category_id=TF00001

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF00001",
            "descricao": "Bebidas não alcoólicas",
            "codigo_cfop": "5102",
            "icms": {
              "situacao_tributaria": "102",
              "aliquota_icms": [
                { "estado": "SP", "aliquota": 18.00 }
              ],
              "aliquota_fcp": [
                { "estado": "SP", "aliquota": 0.00 }
              ],
              "beneficio_fiscal": [
                { "estado": "SP", "codigo": "SP800001" }
              ]
            },
            "pis": {
              "situacao_tributaria": "99",
              "aliquota": "0.00"
            },
            "cofins": {
              "situacao_tributaria": "99",
              "aliquota": "0.00"
            },
            "ibs_cbs": {
              "situacao_tributaria": "000",
              "classificacao_tributaria": "000001"
            }
          }
        }
GET /api/nfce/category/get_list
Listar categorias fiscais NFC-e

Retorna lista paginada de categorias fiscais NFC-e cadastradas para a empresa autenticada.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Query string

CampoTipoDescrição
page *intNúmero da página (mínimo 1)
page_size *intItens por página (1 a 50)

* Campo obrigatório.

Exemplo de requisição

GET /api/nfce/category/get_list?page=1&page_size=20

Resposta

        {
          "success": true,
          "data": {
            "list": [
              { "category_id": "TF00001", "descricao": "Bebidas não alcoólicas" },
              { "category_id": "TF00002", "descricao": "Alimentos industrializados" }
            ],
            "page": 1,
            "total": 2,
            "total_pages": 1
          }
        }
POST /api/nfce/category/edit
Editar categoria fiscal NFC-e
Nota: Mesma estrutura do endpoint /api/nfce/category/create, com o campo adicional category_id obrigatório. Os campos icms, pis, cofins e ibs_cbs são substituídos integralmente (não fazem merge).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Campo adicional

CampoTipoDescrição
category_id *stringID da categoria a editar

* Campo obrigatório.

Exemplo de payload

        {
          "category_id": "TF00001",
          "descricao": "Bebidas não alcoólicas — atualizado",
          "codigo_cfop": "5102",
          "icms": {
            "situacao_tributaria": "102",
            "aliquota_icms": [
              { "estado": "SP", "aliquota": 18.00 }
            ]
          },
          "pis": {
            "situacao_tributaria": "99",
            "aliquota": "0.00"
          },
          "cofins": {
            "situacao_tributaria": "99",
            "aliquota": "0.00"
          },
          "ibs_cbs": {
            "situacao_tributaria": "000",
            "classificacao_tributaria": "000001"
          }
        }

Resposta

        {
          "success": true,
          "data": {
            "category_id": "TF00001"
          }
        }
POST /api/nfce/category/delete
Excluir categoria fiscal NFC-e

Remove uma categoria fiscal NFC-e. Operação irreversível. Produtos vinculados a esta categoria continuarão referenciando o category_id removido — atualize-os antes.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
category_id *stringID da categoria NFC-e a excluir

* Campo obrigatório.

Exemplo de payload

        {
          "category_id": "TF123"
        }

Resposta

        {
          "success": true
        }
POST /api/nfce/create
Emitir NFC-e

Emite uma NFC-e (modelo 65, sempre saída interna ao estado, sem frete). Diferenças importantes em relação ao endpoint de NFe: o objeto do consumidor chama-se client (não cliente); o número do endereço é client.number; o consumidor é opcional; não existem impostos.ipi, shipping_address, delivery_address, nem transportation. O campo de valor em pag_info chama-se amount.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa NFC-e
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body (raiz)

CampoTipoDescrição
nature_of_operation *stringNatureza da operação (ex.: "Venda de mercadoria")
issuance_type *stringTipo de emissão: "1" (normal), "9" (contingência off-line NFC-e)
ambiente *string"1" produção, "2" homologação
products *arrayLista de produtos (ver detalhes abaixo)
idstringIdentificador externo
ind_presstringPresença do comprador: "1" presencial (default), "4" entrega em domicílio, "5" presencial fora do estabelecimento, "9" não se aplica
ind_intermedstring"0" sem intermediador, "1" marketplace. Obrigatório quando ind_pres = 2, 3 ou 4
total_discount_amountdecimalDesconto total da nota
trocodecimalValor do troco
segurodecimalValor de seguro
outras_despesasdecimalOutras despesas acessórias
informacoes_complementaresstringInformações complementares ao consumidor
informacoes_fiscostringInformações de interesse do fisco
clientobjectDados do consumidor (opcional — ver tabela)
pag_infoarrayPagamentos (default: dinheiro à vista — ver tabela)

client (opcional)

Preencha apenas se o consumidor for identificado. CPF ou CNPJ devem ser informados como apenas dígitos.

CampoTipoDescrição
cpfstringCPF (define pessoa física)
cnpjstringCNPJ (pessoa jurídica)
iestringInscrição estadual
namestringNome / razão social
enderecostringLogradouro
numberstringNúmero do endereço (atenção: nome diferente da NFe, que usa numero)
complementostringComplemento
bairrostringBairro
citystringCidade
ufstringUF (validada com base no CEP, se informado)
cepstringCEP (apenas dígitos)
telefonestringTelefone
emailstringE-mail

products[] (cada item)

CampoTipoDescrição
name *stringNome do produto (caracteres CJK são removidos)
ncm *stringNCM (8 dígitos)
count *decimalQuantidade
unit *stringUnidade comercial (ex.: "UN", "KG")
unit_price *decimalPreço unitário
total_price *decimalValor total do item
origem *intOrigem da mercadoria (0..8)
indicador_total *int1 = compõe o total da nota; 0 = não compõe
category_id ⚠stringID da categoria fiscal NFC-e (obrigatório se não enviar impostos)
impostos ⚠objectImpostos manuais (alternativa a category_id; sem IPI)
tax_info ⚠objectAlias de impostos (mesma estrutura). Usado apenas se impostos estiver ausente
codigostringCódigo interno do produto
ceststringCEST
gtinstringGTIN/EAN comercial
gtin_tributavelstringGTIN tributável
discount_pricedecimalDesconto do item
nItemPedintItem do Pedido de Compra (I61). Número sequencial do item dentro do pedido referenciado em xPed (vem do id da raiz). Valores válidos: 1–999999. Default: omitido.

pag_info[] (cada item)

CampoTipoDescrição
payment_indicator *string"0" à vista, "1" a prazo
payment_method *stringForma de pagamento (01=dinheiro, 03=cartão crédito, 04=cartão débito, 17=PIX, 99=outros, etc.)
amountdecimalValor pago nesta forma
card_info.integration_typestring"1" integrado, "2" não integrado (obrigatório para cartão 03/04)
card_info.brand_codestringBandeira do cartão (obrigatório para cartão 03/04)
card_info.acquirer_cnpjstringCNPJ da credenciadora
card_info.authorization_codestringCódigo de autorização

* Campo obrigatório. ⚠ category_id, impostos ou tax_info, um deles é obrigatório.

Exemplo simplificado

{
  "nature_of_operation": "Venda de mercadoria",
  "issuance_type": "1",
  "ambiente": "2",
  "ind_pres": "1",
  "client": {
    "cpf": "12345678909",
    "name": "Consumidor Final"
  },
  "products": [
    {
      "name": "Refrigerante 2L",
      "ncm": "22021000",
      "count": 2,
      "unit": "UN",
      "unit_price": 10.50,
      "total_price": 21.00,
      "origem": 0,
      "indicador_total": 1,
      "category_id": "TF00001"
    }
  ],
  "pag_info": [
    {
      "payment_indicator": "0",
      "payment_method": "17",
      "amount": 21.00
    }
  ]
}

Exemplo completo (todos os campos)

{
  "id": "PEDIDO-2026-0001",
  "nature_of_operation": "Venda de mercadoria",
  "issuance_type": "1",
  "ambiente": "2",
  "ind_pres": "1",
  "ind_intermed": "0",
  "total_discount_amount": 0.00,
  "troco": 0.00,
  "seguro": 0.00,
  "outras_despesas": 0.00,
  "informacoes_complementares": "Pedido entregue na loja",
  "informacoes_fisco": "ICMS recolhido conforme legislação",
  "client": {
    "cpf": "12345678909",
    "cnpj": "",
    "ie": "",
    "name": "Consumidor Final",
    "endereco": "Rua das Flores",
    "number": "100",
    "complemento": "Sala 5",
    "bairro": "Centro",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "01001000",
    "telefone": "11999998888",
    "email": "cliente@exemplo.com"
  },
  "products": [
    {
      "codigo": "PROD001",
      "name": "Refrigerante 2L",
      "ncm": "22021000",
      "cest": "0300100",
      "gtin": "7891234567890",
      "gtin_tributavel": "7891234567890",
      "count": 2,
      "unit": "UN",
      "unit_price": 10.50,
      "total_price": 21.00,
      "discount_price": 0.00,
      "origem": 0,
      "indicador_total": 1,
      "category_id": "TF00001",
      "nItemPed": 1
    },
    {
      "codigo": "PROD002",
      "name": "Salgadinho 100g",
      "ncm": "19053100",
      "count": 1,
      "unit": "UN",
      "unit_price": 8.00,
      "total_price": 8.00,
      "origem": 0,
      "indicador_total": 1,
      "impostos": {
        "icms": {
          "codigo_cfop": "5102",
          "situacao_tributaria": "102",
          "industria": "",
          "tipo_pessoa": "juridica"
        },
        "pis": {
          "situacao_tributaria": "99",
          "aliquota": "0.00",
          "tipo_pessoa": "juridica"
        },
        "cofins": {
          "situacao_tributaria": "99",
          "aliquota": "0.00",
          "tipo_pessoa": "juridica"
        },
        "ibs_cbs": {
          "situacao_tributaria": "000",
          "tipo_pessoa": "juridica",
          "classificacao_tributaria": "000001"
        }
      }
    }
  ],
  "pag_info": [
    {
      "payment_indicator": "0",
      "payment_method": "03",
      "amount": 24.00,
      "card_info": {
        "integration_type": "1",
        "brand_code": "01",
        "acquirer_cnpj": "01234567000189",
        "authorization_code": "AUTH123456"
      }
    }
  ]
}

Resposta

        {
          "success": true,
          "data": {
            "uuid": "abc123...",
            "chave": "35..."
          }
        }
POST /api/nfce/cancel
Cancelar NFC-e

Cancela uma NFC-e já autorizada. Diferente da NFe, aqui o motivo do cancelamento é enviado pelo cliente e repassado à SEFAZ. A janela de cancelamento na SEFAZ é curta (geralmente 15-30 minutos após a autorização).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
chave *stringChave de 44 dígitos da NFC-e (atenção: aqui é chave, não uuid como em outros endpoints)
motivo *stringJustificativa do cancelamento (mín. 15 caracteres por exigência SEFAZ)

* Campo obrigatório.

Exemplo de payload

        {
          "chave": "35210112345678901234650010000000051234567890",
          "motivo": "Cancelamento por erro de operacao do caixa"
        }
GET /api/nfce/get_detail
Consultar detalhes da NFC-e

Retorna os detalhes de uma NFC-e específica pelo UUID. Inclui URLs do XML e do DANFE (cupom térmico), além de dados do cliente quando informado.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5 (path inclui a query string)
timestampstringUnix timestamp em segundos

Query string

ParâmetroTipoDescrição
uuid *stringUUID da NFC-e

* Campo obrigatório.

Exemplo de chamada

GET /api/nfce/get_detail?uuid=65f8b9a1c2d3e4f5a6b7c8d9

Resposta

        {
          "success": true,
          "data": {
            "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
            "chave": "35210112345678901234650010000000051234567890",
            "serie": 1,
            "number": 5,
            "status": "Authorized",
            "modelo": "nfce",
            "total_price": 145.90,
            "nprot": "135210000123456",
            "motivo": "",
            "xml": "https://oss.example.com/.../chave.xml",
            "danfe": "https://oss.example.com/.../chave_nfce.pdf",
            "client_cpf": "12345678909",
            "client_cnpj": "",
            "client_name": "Cliente",
            "create": "2024-01-10T10:30:00Z",
            "issue_time": "2024-01-10T10:31:00Z"
          }
        }
POST /api/nfce/get_danfe
Gerar/obter DANFE NFC-e (cupom térmico)

Retorna a URL do DANFE NFC-e (cupom fiscal eletrônico) em PDF, com QR Code para consulta na SEFAZ. Geração sob demanda com cache por hash (chave + status); chamadas repetidas retornam a URL existente.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
uuid *stringUUID da NFC-e (atenção: aqui é uuid, diferente do cancel que usa chave)

* Campo obrigatório.

Exemplo de payload

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
        }

Resposta

        {
          "success": true,
          "data": {
            "danfe": "https://oss.example.com/.../chave_nfce.pdf"
          }
        }

code Exemplos Completos NFC-e

Exemplo 1 — Venda Presencial (sem destinatário)

{
  "nature_of_operation": "Venda de mercadoria",
  "ambiente": "2",
  "ind_pres": "1",
  "products": [
    {
      "codigo": "001",
      "name": "Refrigerante 350ml",
      "ncm": "22021000",
      "count": 3,
      "unit": "UN",
      "unit_price": 5.50,
      "total_price": 16.50,
      "category_id": "BEBIDAS_PADRAO",
      "origem": "0",
      "indicador_total": "1",
      "cfop": "5102"
    }
  ],
  "pag_info": [
    { "payment_indicator": "0", "payment_method": "17" }
  ]
}

Exemplo 2 — Entrega a Domicílio (com destinatário)

{
  "nature_of_operation": "Venda de mercadoria",
  "ambiente": "2",
  "ind_pres": "4",
  "client": {
    "cpf": "12345678900",
    "name": "Maria Silva",
    "endereco": "Rua das Flores",
    "number": "456",
    "bairro": "Jardim Primavera",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "04567000"
  },
  "products": [
    {
      "codigo": "PIZZA01",
      "name": "Pizza Grande Marguerita",
      "ncm": "19059090",
      "count": 1,
      "unit": "UN",
      "unit_price": 45.90,
      "total_price": 45.90,
      "category_id": "ALIMENTOS",
      "origem": "0",
      "indicador_total": "1",
      "cfop": "5102"
    }
  ],
  "pag_info": [
    { "payment_indicator": "0", "payment_method": "03" }
  ],
  "frete": 8.00,
  "informacoes_complementares": "Entrega em até 40 minutos"
}

tune NFe Ajuste / Complementar

A NFe Complementar e a NFe de Ajuste são notas fiscais emitidas para corrigir valores fiscais de uma nota já autorizada. Diferente da CC-e, que corrige apenas dados cadastrais, essas notas permitem alterar valores de impostos, quantidades e preços.

NFe Complementar (finalidade = 2):
  • Usada para acrescentar valores que foram informados a menor na nota original
  • Complemento de preço, quantidade ou valor do imposto
  • Exemplo: emitiu nota com ICMS de 12% mas o correto era 18% — emite complementar com a diferença
NFe de Ajuste (finalidade = 3):
  • Usada para ajustes fiscais diversos previstos na legislação
  • Ajuste de estoque, transferência de crédito, regularização fiscal
  • Exemplo: ajuste de ICMS por apuração, transferência de crédito entre filiais
Importante:
  • Ambas são notas fiscais novas — geram nova chave de acesso e novo número
  • Devem referenciar a nota original pelo campo ref_nfe_chave (chave de 44 dígitos)
  • A nota original precisa estar autorizada
  • Consomem 1 crédito cada (como uma emissão normal)

Autenticação

Utiliza o mesmo endpoint e autenticação da emissão de NFe:

HeaderTipoDescrição
token string Token da empresa (obtido no cadastro)
sign string Assinatura MD5: MD5(token + path + body + timestamp)
timestamp string Unix timestamp em segundos (janela de 5 minutos)

description NFS-e - Nota Fiscal de Servicos Eletronica

A API de NFS-e permite emitir, cancelar e consultar Notas Fiscais de Servico Eletronicas. O sistema detecta automaticamente o municipio da empresa e roteia para a API correta:

  • Sao Paulo (SP) - Emissao via Nota Fiscal Paulistana (SOAP)
  • Demais municipios - Emissao via API Nacional (ADN/SEFIN)

O integrador nao precisa se preocupar com qual API usar - basta enviar os dados e o sistema faz o roteamento automaticamente pelo codigo IBGE do municipio cadastrado na empresa.

EndpointMetodoDescricao
/api/nfse/createPOSTEmitir NFS-e
/api/nfse/cancelPOSTCancelar NFS-e
/api/nfse/get_danfsePOSTObter DANFSE (PDF)
/api/nfse/get_xmlPOSTDownload do XML
POST /api/nfs/company/create
Cadastrar empresa para emissão de NFS-e

Cadastra (ou atualiza) uma empresa para emissão de NFS-e. Se o CNPJ já existir para o usuário, apenas os campos NFS-e e o certificado são atualizados; caso contrário, uma nova empresa é criada e um token dedicado é retornado. Atenção ao path: /api/nfs/... (sem o "e"), diferente dos demais endpoints NFS-e.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken B2B do integrador
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
cnpj *stringCNPJ da empresa (apenas dígitos)
name *stringRazão social
cep *stringCEP (apenas dígitos)
address *stringLogradouro
house_number *stringNúmero do endereço
town *stringBairro
city *stringCidade
state *stringUF (2 dígitos, ex.: "SP")
cert_file *stringURL do certificado digital A1 (.pfx)
cert_pwd *stringSenha do certificado digital
im *stringInscrição Municipal
codigo_municipio_nfse *stringCódigo IBGE do município emissor
codigo_servico_nfse *stringCódigo do serviço padrão (LC 116)
aliasstringNome fantasia
iestringInscrição estadual
invoice_typestringRegime tributário
unitstringUnidade / filial
emailstringE-mail de contato
telefonestringTelefone
complementostringComplemento do endereço
cnae_nfsestringCNAE da atividade padrão
serie_nfseintSérie inicial da NFS-e
number_nfseintNúmero inicial da NFS-e
regime_especial_tributacaointCódigo do regime especial de tributação
optante_simples_nacionalboolOptante pelo Simples Nacional

* Campo obrigatório.

Exemplo de payload

        {
          "cnpj": "43649380000100",
          "name": "EMPRESA EXEMPLO LTDA",
          "alias": "Exemplo",
          "ie": "ISENTO",
          "invoice_type": "simples_nacional",
          "email": "contato@empresa.com",
          "telefone": "11999999999",
          "cep": "03027020",
          "address": "Rua Exemplo",
          "house_number": "86",
          "complemento": "Andar 2",
          "town": "Centro",
          "city": "São Paulo",
          "state": "SP",
          "cert_file": "https://storage.exemplo.com/cert.pfx",
          "cert_pwd": "senha-do-certificado",
          "im": "12345678",
          "codigo_municipio_nfse": "3550308",
          "codigo_servico_nfse": "07498",
          "cnae_nfse": "6201501",
          "serie_nfse": 1,
          "number_nfse": 1,
          "regime_especial_tributacao": 0,
          "optante_simples_nacional": true
        }

Resposta

        {
          "success": true,
          "message": "Empresa cadastrada para NFS-e",
          "data": {
            "company_id": 12345,
            "token": "token-dedicado-da-empresa"
          }
        }

Nota: O token retornado deve ser usado nas demais chamadas NFS-e (/api/nfse/create, /cancel, /get_danfse, /get_xml). Se a empresa já existir, a mensagem será "Empresa atualizada para NFS-e" e o token retornado é o token existente.

POST /api/nfse/create
Emitir NFS-e

Headers obrigatorios

HeaderTipoDescricao
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "ambiente": "1",
  "id": "REF-001",
  "descricao_servico": "Desenvolvimento de sistemas",
  "valor_servico": 10000.00,
  "aliquota_iss": 2.90,
  "iss_retido": false,
  "codigo_servico": "",
  "cnae": "",
  "valor_deducoes": 0,
  "desconto_incondicionado": 0,
  "desconto_condicionado": 0,
  "valor_iss": 0,
  "valor_pis": 0,
  "valor_cofins": 0,
  "valor_inss": 0,
  "valor_ir": 0,
  "valor_csll": 0,
  "tomador": {
    "cnpj": "43649380000100",
    "cpf": "",
    "name": "EMPRESA TOMADORA LTDA",
    "email": "contato@empresa.com",
    "telefone": "11999999999",
    "inscricao_municipal": "",
    "cep": "03027020",
    "endereco": "Rua Exemplo",
    "numero": "86",
    "complemento": "Andar 2",
    "bairro": "Centro",
    "city": "Sao Paulo",
    "uf": "SP",
    "codigo_municipio": "3550308"
  }
}

Campos Principais

CampoTipoDescricao
ambientestring"1" = Producao, "2" = Homologacao
idstringID de referencia externa (opcional)
descricao_servicostringDescricao do servico prestado (obrigatorio)
valor_servicodecimalValor total do servico em R$ (obrigatorio)
aliquota_issdecimalAliquota ISS em % (ex: 2.90)
iss_retidobooleanfalse = Nao retido, true = Retido pelo tomador
valor_issdecimalOverride do valor do ISS. Se maior que 0, sobrepoe o calculo automatico (base_calculo x aliquota_iss div 100). Default: calculado automaticamente
codigo_servicostringCodigo do servico. Se vazio, usa o padrao da empresa
cnaestringCNAE. Se vazio, usa o padrao da empresa
tomadorobjectDados do tomador do servico (obrigatorio)

Tomador - Campos

CampoTipoDescricao
cnpjstringCNPJ do tomador (somente numeros)
cpfstringCPF do tomador (usar cnpj OU cpf)
namestringNome/Razao Social (obrigatorio)
emailstringEmail do tomador
telefonestringTelefone
cepstringCEP (obrigatorio)
enderecostringLogradouro (obrigatorio)
numerostringNumero (obrigatorio)
complementostringComplemento
bairrostringBairro (obrigatorio)
citystringCidade
ufstringUF (2 digitos)
codigo_municipiostringCodigo IBGE do municipio

Resposta de Sucesso

{
  "success": true,
  "data": {
    "_id": "661234abcdef...",
    "uuid": "guid-unico",
    "status": "autorizada",
    "nfse": "48",
    "serie": 1,
    "chave": "Z685RI9C",
    "codigoVerificacao": "Z685RI9C",
    "modelo": "nfse",
    "tipoEmissao": "paulistana",
    "danfse": "https://nfe.prefeitura.sp.gov.br/contribuinte/notaprintpdf.aspx?..."
  }
}
POST /api/nfse/cancel
Cancelar NFS-e

Headers obrigatorios

HeaderTipoDescricao
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Payload

{
  "chave": "Z685RI9C",
  "motivo": "Cancelamento da NFS-e por erro na emissao"
}

Campos

CampoTipoDescricao
chavestringCodigo de verificacao da NFS-e (obrigatorio)
motivostringMotivo do cancelamento (obrigatório)

Resposta de Sucesso

{
  "success": true,
  "message": "Nota de servico cancelada com sucesso"
}
POST /api/nfse/get_danfse
Obter DANFSE (PDF)

Headers obrigatorios

HeaderTipoDescricao
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Payload

{
  "chave": "Z685RI9C"
}

Campos

CampoTipoDescricao
chavestringCodigo de verificacao da NFS-e (obrigatorio)

Resposta

{
  "success": true,
  "data": {
    "danfse": "https://nfe.prefeitura.sp.gov.br/contribuinte/notaprintpdf.aspx?..."
  }
}

Nota: Para Paulistana (SP), retorna a URL direta do PDF da prefeitura. Para API Nacional, retorna o PDF em base64.

POST /api/nfse/get_xml
Download XML da NFS-e

Headers obrigatorios

HeaderTipoDescricao
tokenstringToken da empresa
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Payload

{
  "chave": "Z685RI9C"
}

Campos

CampoTipoDescricao
chavestringCodigo de verificacao da NFS-e (obrigatorio)

Resposta

{
  "success": true,
  "data": {
    "dpsXml": "<PedidoEnvioRPS>...</PedidoEnvioRPS>",
    "nfseXml": "<RetornoEnvioRPS>...</RetornoEnvioRPS>"
  }
}

dpsXml: XML enviado para a prefeitura/ADN. nfseXml: XML de retorno com o resultado da emissao.

POST /api/invoice/create
Emitir NFe Complementar (finalidade = 2)

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "finalidade": "2",
  "ref_nfe_chave": "CHAVE_NFE_AQUI",
  "nature_of_operation": "Complemento de preço",
  "transaction_type": "1",
  "model": "55",
  "issuance_type": "1",
  "ambiente": "1",
  "ind_final": "1",
  "ind_pres": "2",
  "cliente": {
    "cpf": "264.438.800-72",
    "name": "Nome do Destinatário",
    "endereco": "Rua Example",
    "number": "100",
    "bairro": "Centro",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "01310100",
    "indIEDest": "9"
  },
  "products": [
    {
      "codigo": "001",
      "name": "Complemento de valor - Produto X",
      "ncm": "82100090",
      "count": 1,
      "unit": "UN",
      "unit_price": 5.00,
      "total_price": 5.00,
      "category_id": "SEU_CATEGORY_ID",
      "origem": "0",
      "indicador_total": "1",
      "cfop": "5102"
    }
  ],
  "pag_info": [
    {
      "payment_method": "90",
      "payment_indicator": "0"
    }
  ]
}

Campos específicos

CampoTipoDescrição
finalidadestring"2" para Complementar (obrigatório)
ref_nfe_chavestringChave de acesso da nota original — 44 dígitos (obrigatório)
Nota: Os demais campos seguem o mesmo padrão do endpoint /api/invoice/create para emissão normal. Consulte a documentação de emissão de NFe para detalhes de todos os campos.
Pagamento: Em notas complementares, o pagamento geralmente é "90" (Sem Pagamento) pois trata-se apenas de complemento de valores fiscais.

Resposta de Sucesso

{
  "success": true,
  "data": {
    "uuid": "a1b2c3d4-e5f6-...",
    "chave": "35260312345678000195550010000004051234567890",
    "status": "Success",
    "motivo": "Autorizado o uso da NF-e",
    "nfe": 405,
    "serie": 1,
    "danfe": "https://storage.../danfe.pdf",
    "xml": "https://storage.../xml.xml"
  }
}
POST /api/invoice/create
Emitir NFe de Ajuste (finalidade = 3)

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "finalidade": "3",
  "ref_nfe_chave": "CHAVE_NFE_AQUI",
  "nature_of_operation": "Ajuste fiscal",
  "transaction_type": "1",
  "model": "55",
  "issuance_type": "1",
  "ambiente": "1",
  "ind_final": "1",
  "ind_pres": "2",
  "cliente": {
    "cpf": "264.438.800-72",
    "name": "Nome do Destinatário",
    "endereco": "Rua Example",
    "number": "100",
    "bairro": "Centro",
    "city": "São Paulo",
    "uf": "SP",
    "cep": "01310100",
    "indIEDest": "9"
  },
  "products": [
    {
      "codigo": "001",
      "name": "Ajuste fiscal - Regularização",
      "ncm": "82100090",
      "count": 1,
      "unit": "UN",
      "unit_price": 0.01,
      "total_price": 0.01,
      "category_id": "SEU_CATEGORY_ID",
      "origem": "0",
      "indicador_total": "1",
      "cfop": "5949"
    }
  ],
  "pag_info": [
    {
      "payment_method": "90",
      "payment_indicator": "0"
    }
  ]
}

Campos específicos

CampoTipoDescrição
finalidadestring"3" para Ajuste (obrigatório)
ref_nfe_chavestringChave de acesso da nota original — 44 dígitos (obrigatório)
Valores de finalidade disponíveis:
ValorDescrição
1Normal (padrão)
2Complementar
3Ajuste
4Devolução
Diferença entre Complementar e Ajuste:
  • Complementar (2): Complementa valores da nota original (preço, imposto, quantidade informados a menor)
  • Ajuste (3): Ajustes fiscais previstos na legislação (regularização, transferência de crédito, ajuste de estoque)

edit_note CC-e — Carta de Correção Eletrônica

A CC-e (Carta de Correção Eletrônica) é um evento vinculado à NF-e que permite corrigir informações da nota fiscal já autorizada, sem alterar valores fiscais. Regulamentada pelo Ajuste SINIEF 01/07.

O que pode ser corrigido via CC-e:
  • Endereço do destinatário ou do emitente
  • Razão social do destinatário (sem alterar CNPJ/CPF)
  • Código fiscal de operação (CFOP), desde que não mude a natureza dos impostos
  • Descrição da mercadoria
  • Dados adicionais e informações complementares
O que NÃO pode ser corrigido via CC-e:
  • Valores fiscais (base de cálculo, alíquota, valor do imposto)
  • Quantidade e valor da mercadoria
  • CNPJ/CPF do emitente ou destinatário
  • Dados que alterem o cálculo dos impostos
Regras:
  • Somente notas com status autorizada (Success) podem receber CC-e
  • Texto da correção deve ter entre 15 e 1000 caracteres
  • É possível emitir até 20 CC-e para a mesma nota fiscal
  • Cada CC-e consome 1 crédito

Autenticação

Todos os endpoints CC-e utilizam a mesma autenticação da API principal:

HeaderTipoDescrição
token string Token da empresa (obtido no cadastro)
sign string Assinatura MD5: MD5(token + path + body + timestamp)
timestamp string Unix timestamp em segundos (janela de 5 minutos)
POST /api/invoice/cce/send
Enviar Carta de Correção (CC-e)

Envia uma CC-e (evento 110110) à SEFAZ para corrigir dados de uma NF-e já autorizada. A sequência (nSeqEvento) é calculada automaticamente — não envie. Apenas dados não-fiscais podem ser corrigidos (não corrige valores, CNPJ, IE, etc.).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
uuidstringUUID da NF-e (obrigatório se chave ausente)
chavestringChave de 44 dígitos da NF-e (obrigatório se uuid ausente)
correcao *stringTexto da correção (limite SEFAZ: 15–1000 caracteres)

* Campo obrigatório. Pelo menos um entre uuid e chave também é obrigatório.

Exemplo de payload

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
          "correcao": "Corrigir nome do destinatario para Empresa XYZ LTDA"
        }

Resposta

        {
          "success": true,
          "data": {
            "nProt": "135210000123456",
            "nSeqEvento": 1,
            "xml": "https://oss.example.com/.../cce.xml"
          }
        }
POST /api/invoice/cce/get_list
Listar CC-e de uma NF-e

Retorna todas as CC-e (Cartas de Correção) emitidas para uma NF-e específica, ordenadas da mais recente para a mais antiga.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
uuidstringUUID da NF-e (obrigatório se chave ausente)
chavestringChave de 44 dígitos da NF-e (obrigatório se uuid ausente)

Pelo menos um entre uuid e chave é obrigatório.

Exemplo de payload

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
        }

Resposta

        {
          "success": true,
          "data": {
            "items": [
              {
                "id": "65fa1b2c3d4e5f6a7b8c9d0e",
                "detail": "Corrigir nome do destinatario para Empresa XYZ LTDA",
                "nProt": "135210000123456",
                "nSeqEvento": 1,
                "date": "15/01/2024 14:30:00",
                "pdfUrl": "https://oss.example.com/.../cce_seq1.pdf",
                "xmlUrl": "https://oss.example.com/.../cce.xml"
              }
            ],
            "total": 1
          }
        }
POST /api/invoice/cce/download_pdf
Baixar PDF da CC-e

Retorna a URL do PDF da CC-e. O PDF é gerado sob demanda na primeira chamada (renderizando a partir do XML da nota + XML da CC-e) e armazenado no OSS; chamadas subsequentes retornam a URL existente.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
cce_id *stringID da CC-e (ObjectId) retornado por /api/invoice/cce/get_list no campo id

* Campo obrigatório.

Exemplo de payload

        {
          "cce_id": "65fa1b2c3d4e5f6a7b8c9d0e"
        }

Resposta

        {
          "success": true,
          "data": {
            "url": "https://oss.example.com/.../cce_seq1.pdf"
          }
        }
POST /api/invoice/cce/download_xml
Baixar XML da CC-e

Retorna a URL do XML assinado da CC-e (já armazenado no OSS após o envio à SEFAZ).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
cce_id *stringID da CC-e (ObjectId) retornado por /api/invoice/cce/get_list no campo id

* Campo obrigatório.

Exemplo de payload

        {
          "cce_id": "65fa1b2c3d4e5f6a7b8c9d0e"
        }

Resposta

        {
          "success": true,
          "data": {
            "url": "https://oss.example.com/.../cce.xml"
          }
        }

how_to_reg Manifestação do Destinatário

A Manifestação do Destinatário permite que o destinatário de uma NF-e se posicione formalmente sobre uma nota fiscal emitida contra seu CNPJ. São 4 tipos de eventos previstos pela SEFAZ, todos com base legal definida.

Tipos de Evento

CódigoNomeSignificadoJustificativa
210210 Ciência da Operação O destinatário tomou conhecimento da NF-e, mas ainda não confirmou nem rejeitou. Geralmente o primeiro evento dado, requisito para baixar o XML completo via DistDFe. Não obrigatória
210200 Confirmação da Operação O destinatário confirma que a operação aconteceu e a mercadoria/serviço foi recebida. Evento final, comprova recebimento. Não obrigatória
210220 Desconhecimento da Operação O destinatário declara que NÃO reconhece a operação (suspeita de fraude, uso indevido do CNPJ, etc). Obrigatória (15-255 chars)
210240 Operação Não Realizada O destinatário reconhece a operação mas declara que ela NÃO se concretizou (devolução, recusa de recebimento, etc). Obrigatória (15-255 chars)
Regra de sequência: Após dar Ciência (210210), pode-se enviar Confirmação (210200) OU Desconhecimento (210220) OU Não Realizada (210240). Confirmação/Desconhecimento/Não Realizada são estados finais — não podem ser sobrepostos.
Atenção: O CNPJ enviado no campo cnpj deve ser o do destinatário da NF-e (quem está manifestando) e deve estar cadastrado no sistema vinculado ao token usado. Caso contrário a SEFAZ retorna a rejeição "O autor do evento diverge do destinatário da NF-e".

Códigos cStat de Retorno

cStatSignificado
135✅ Evento registrado com sucesso
573✅ Duplicidade de evento — já registrado anteriormente (tratado como sucesso)
236❌ Chave de acesso inválida
491❌ Manifestação já registrada — não pode sobrescrever estado final
596❌ CNPJ destinatário diverge do informado
656❌ Consumo indevido (rate limit)
POST /api/invoice/manifest
Enviar evento de manifestação do destinatário

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "chave": "35260514200166000187550010000000011000000018",
  "cnpj": "14200166000187",
  "tipo_evento": 210210,
  "justificativa": "Operação reconhecida pelo destinatário"
}

Campos

CampoTipoObrigatórioDescrição
chavestringSimChave de acesso da NF-e — 44 dígitos
cnpjstringSimCNPJ do destinatário (quem manifesta) — 14 dígitos, sem formatação. Deve estar cadastrado no sistema
tipo_eventointSimCódigo do evento: 210200, 210210, 210220 ou 210240
justificativastringCondicionalObrigatória para 210220 e 210240. Deve ter entre 15 e 255 caracteres. Ignorada para 210200 e 210210
Sequência (nSeqEvento): calculada automaticamente. Para a mesma combinação (cnpj + chave + tipo_evento) é incrementada a cada chamada — assim duplicatas retornam cStat: 573 e são gravadas sem erro.

Resposta de Sucesso

{
  "success": true,
  "message": "data",
  "data": {
    "id": "67341a8f5d4e1f2a3b4c5d6e",
    "chave": "35260514200166000187550010000000011000000018",
    "cnpj": "14200166000187",
    "tipo_evento": 210210,
    "desc_evento": "Ciencia da Operacao",
    "nProt": "135260000123456",
    "cStat": 135,
    "xMotivo": "Evento registrado e vinculado a NF-e",
    "nSeqEvento": 1,
    "xml_url": "https://storage.../manifestacao/13-05-2026/352605...210210_1.xml"
  }
}

Campos da Resposta

CampoTipoDescrição
idstringObjectId interno do registro da manifestação (usado em /get_xml)
chavestringChave de acesso da NF-e manifestada
cnpjstringCNPJ do destinatário que manifestou
tipo_eventointCódigo do evento enviado (210200/210210/210220/210240)
desc_eventostringDescrição textual do evento
nProtstringNúmero do protocolo SEFAZ — comprovante do evento
cStatintCódigo de status SEFAZ. 135 = registrado, 573 = duplicidade (também aceito)
xMotivostringMensagem descritiva do retorno SEFAZ
nSeqEventointSequência do evento atribuída automaticamente
xml_urlstringURL pública do XML do procEvento (assinado e protocolado) armazenado no OSS

Exemplo — Desconhecimento (210220) com justificativa

{
  "chave": "35260514200166000187550010000000011000000018",
  "cnpj": "14200166000187",
  "tipo_evento": 210220,
  "justificativa": "Operação desconhecida pelo destinatário, sem pedido vinculado ao fornecedor informado"
}
POST /api/invoice/manifest/list
Listar manifestações enviadas (histórico)

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "cnpj": "14200166000187",
  "chave": "",
  "start_create_time": "01/05/2026",
  "end_create_time": "31/05/2026",
  "page": 1,
  "page_size": 20
}

Campos

CampoTipoObrigatórioDescrição
cnpjstringNãoFiltra por CNPJ do destinatário. Se omitido, lista de todos os CNPJs do usuário
chavestringNãoFiltra por chave NF-e específica (44 dígitos)
start_create_timestring/longNãoData inicial da criação. Aceita formatos: "dd/MM/yyyy", "yyyy-MM-dd", "dd/MM/yyyy HH:mm:ss" ou Unix timestamp em segundos. Considera 00:00:00 UTC se só data
end_create_timestring/longNãoData final da criação. Mesmo formato. Se só data, considera 23:59:59.999 UTC
pageintNãoNúmero da página (default 1)
page_sizeintNãoItens por página (default 20, máximo 100)

Resposta de Sucesso

{
  "success": true,
  "message": "成功",
  "data": {
    "total": 2,
    "page": 1,
    "page_size": 20,
    "list": [
      {
        "id": "67341a8f5d4e1f2a3b4c5d6e",
        "chave": "35260514200166000187550010000000011000000018",
        "cnpj": "14200166000187",
        "tipo_evento": 210210,
        "desc_evento": "Ciencia da Operacao",
        "justificativa": "Operação reconhecida pelo destinatário",
        "nProt": "135260000123456",
        "nSeqEvento": 1,
        "cStat": 135,
        "xMotivo": "Evento registrado e vinculado a NF-e",
        "xml_url": "https://storage.../...210210_1.xml",
        "create": "2026-05-13 14:25:33"
      }
    ]
  }
}

Campos da Resposta

CampoTipoDescrição
totalintTotal de registros que atendem aos filtros (independente de paginação)
pageintPágina atual retornada
page_sizeintTamanho da página retornada
list[].idstringObjectId interno do registro
list[].chavestringChave de acesso da NF-e manifestada
list[].cnpjstringCNPJ destinatário que manifestou
list[].tipo_eventointCódigo do evento (210200/210210/210220/210240)
list[].desc_eventostringDescrição textual do evento
list[].justificativastringJustificativa enviada (preenchido apenas para 210220/210240)
list[].nProtstringProtocolo SEFAZ do evento
list[].nSeqEventointSequência do evento
list[].cStatintCódigo de status SEFAZ
list[].xMotivostringMensagem descritiva do retorno SEFAZ
list[].xml_urlstringURL pública do XML do procEvento no OSS
list[].createstringData/hora UTC do registro (formato yyyy-MM-dd HH:mm:ss)
Ordenação: registros são retornados do mais recente para o mais antigo (por create decrescente).
POST /api/invoice/manifest/get_xml
Obter URL do XML de uma manifestação específica

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "id": "67341a8f5d4e1f2a3b4c5d6e"
}

Campos

CampoTipoObrigatórioDescrição
idstringSimObjectId da manifestação — retornado em /manifest ou /manifest/list

Resposta de Sucesso

{
  "success": true,
  "message": "data",
  "data": {
    "id": "67341a8f5d4e1f2a3b4c5d6e",
    "chave": "35260514200166000187550010000000011000000018",
    "tipo_evento": 210210,
    "xml_url": "https://storage.../manifestacao/13-05-2026/352605...210210_1.xml"
  }
}

Erros Comuns

MensagemCausa
id inválidoValor não é um ObjectId válido
manifestação não encontradaObjectId existe mas não pertence ao usuário do token, ou foi excluído

cloud_download Captura DistDFe — NFes Recebidas

Permite consultar e baixar NFes e eventos destinados ao seu CNPJ via o serviço NFeDistribuicaoDFe da SEFAZ (Ambiente Nacional). A captura é incremental por NSU (Número Sequencial Único) — cada chamada baixa apenas o que ainda não foi capturado anteriormente.

Tipos de Documento Retornados

doc_typeO que éConteúdo
resNFe Resumo de NFe Metadados básicos (chave, valor, emitente, situação). Vem ANTES da Ciência ser dada — não contém produtos/impostos
procNFe NFe completa autorizada XML completo da NFe (com produtos, impostos, transporte, etc). Só vem APÓS o destinatário dar Ciência (210210) na chave
resEvento Resumo de evento Metadados de evento (chave, tipo, sequência, motivo)
procEvento Evento completo XML completo do evento (CCe, cancelamento, manifestações de outros destinatários sobre suas notas)
Fluxo recomendado:
  1. Chame /received/sync — baixa todos os documentos novos
  2. Liste com /received/list filtrando por doc_type: "resNFe" para ver notas sem Ciência
  3. Para cada chave de interesse, chame /invoice/manifest com tipo_evento: 210210
  4. Chame /received/sync novamente — agora o SEFAZ devolve os procNFe (XML completo) das chaves manifestadas
  5. Use /received/get_xml para obter a URL do XML e baixar/processar
Rate limit do SEFAZ: a SEFAZ permite no máximo 1 chamada DistDFe por hora por CNPJ. Se exceder, retorna cStat: 656 (Consumo Indevido). Em ambiente de homologação a regra é mais permissiva.

Códigos cStat de Retorno do DistDFe

cStatSignificado
137✅ Nenhum documento localizado (fim normal do loop)
138✅ Documentos localizados — loop continua
656❌ Consumo indevido — aguardar 1h e tentar novamente
252❌ Ambiente diferente do informado (produção vs homologação)
280❌ Certificado expirado ou inválido
POST /api/invoice/received/sync
Sincronizar — baixar NFes/eventos novos do SEFAZ via DistDFe

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "cnpj": "26638419000167",
  "max_iterations": 50
}

Campos

CampoTipoObrigatórioDescrição
cnpjstringSimCNPJ da empresa destinatária — 14 dígitos, sem formatação. Deve estar cadastrado no sistema vinculado ao token
max_iterationsintNãoNúmero máximo de chamadas SEFAZ por execução. Cada chamada baixa até 50 documentos. Default 50 (≈2500 docs), máximo 200
Como funciona:
  • Lê o último ultNSU persistido para esse (uid + cnpj)
  • Faz loop chamando o SEFAZ até cStat ≠ 138 ou atingir max_iterations
  • Descomprime os XMLs (gzip) retornados
  • Persiste cada documento em w_invoice_received com upload do XML no OSS
  • Atualiza ultNSU e maxNSU em w_invoice_received_sync
  • Deduplica por (uid + cnpj + nsu) — chamadas repetidas não duplicam

Resposta de Sucesso

{
  "success": true,
  "message": "data",
  "data": {
    "cnpj": "26638419000167",
    "uf": "SP",
    "initial_nsu": 0,
    "ult_nsu": 2323,
    "max_nsu": 2323,
    "pending": 0,
    "iterations": 8,
    "last_cstat": 137,
    "last_motivo": "Nenhum documento localizado",
    "stats": {
      "resNFe": 3,
      "procNFe": 4,
      "resEvento": 336,
      "procEvento": 5,
      "skipped": 0
    }
  }
}

Campos da Resposta

CampoTipoDescrição
cnpjstringCNPJ destinatário consultado
ufstringUF do destinatário usada na consulta
initial_nsulongNSU de partida — o último processado antes dessa execução
ult_nsulongNovo último NSU após a sincronização
max_nsulongMaior NSU disponível no SEFAZ AN no momento da consulta
pendinglongDocumentos ainda pendentes (max_nsu - ult_nsu). Se > 0, chame /sync novamente para baixar o restante
iterationsintQuantas chamadas SEFAZ foram feitas nessa execução
last_cstatintÚltimo cStat retornado pelo SEFAZ. 137 é fim normal, 656 é rate limit
last_motivostringMensagem descritiva do último retorno SEFAZ
stats.resNFeintQuantidade de resumos de NFe baixados nessa execução
stats.procNFeintQuantidade de NFes completas baixadas
stats.resEventointQuantidade de resumos de evento baixados
stats.procEventointQuantidade de eventos completos baixados
stats.skippedintDocumentos ignorados (duplicados ou erro de parsing isolado)
Volume inicial: empresas que nunca sincronizaram podem ter centenas a milhares de documentos históricos. A primeira execução pode demorar mais e ser interrompida pelo max_iterations. Verifique pending na resposta — se > 0, chame de novo (respeitando o rate limit).
POST /api/invoice/received/list
Listar documentos (NFes e eventos) capturados

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "cnpj": "26638419000167",
  "doc_type": "resNFe",
  "chave": "",
  "emitente_cnpj": "",
  "start_create_time": "01/05/2026",
  "end_create_time": "31/05/2026",
  "page": 1,
  "page_size": 20
}

Campos

CampoTipoObrigatórioDescrição
cnpjstringNãoFiltra por CNPJ destinatário (o seu CNPJ). Se omitido, lista de todos do usuário
doc_typestringNãoFiltra por tipo de documento: resNFe, procNFe, resEvento ou procEvento
chavestringNãoFiltra por chave de acesso (44 dígitos)
emitente_cnpjstringNãoFiltra por CNPJ do emitente da NFe (fornecedor)
start_create_timestring/longNãoData inicial. Aceita "dd/MM/yyyy", ISO ou Unix timestamp
end_create_timestring/longNãoData final. Mesmo formato
pageintNãoNúmero da página (default 1)
page_sizeintNãoItens por página (default 20, máximo 100)

Resposta de Sucesso

{
  "success": true,
  "message": "成功",
  "data": {
    "total": 3,
    "page": 1,
    "page_size": 20,
    "list": [
      {
        "id": "6a04a70d3201b5a62f3ac2f8",
        "nsu": 2318,
        "doc_type": "resNFe",
        "schema": "resNFe_v1.01.xsd",
        "chave": "35260563845920000120550020000085471156822656",
        "cnpj_destinatario": "26638419000167",
        "emitente_cnpj": "63845920000120",
        "emitente_nome": "MEGA ONLINE LTDA",
        "valor": 1.00,
        "dh_emi": "2026-05-13 14:05:35",
        "serie": 0,
        "number": 0,
        "tp_nf": 1,
        "c_sit_nfe": 3,
        "tp_evento": 0,
        "desc_evento": "",
        "n_seq_evento": 0,
        "dh_evento": null,
        "xml_url": "https://storage.../received/13-05-2026/...resNFe_2318.xml",
        "create": "2026-05-13 16:30:05"
      }
    ]
  }
}

Campos da Resposta

CampoTipoDescrição
totalintTotal de registros que atendem aos filtros
pageintPágina atual
page_sizeintTamanho da página
list[].idstringObjectId interno (use em /received/get_xml)
list[].nsulongNSU atribuído pela SEFAZ a este documento
list[].doc_typestringTipo do documento: resNFe, procNFe, resEvento, procEvento
list[].schemastringSchema do documento (ex: resNFe_v1.01.xsd)
list[].chavestringChave de acesso da NF-e (44 dígitos)
list[].cnpj_destinatariostringCNPJ destinatário (o seu CNPJ)
list[].emitente_cnpjstringCNPJ do emitente da NFe (fornecedor)
list[].emitente_nomestringRazão social do emitente
list[].valordecimalValor total da NFe (vNF)
list[].dh_emistringData/hora de emissão da NFe
list[].serieintSérie da NFe (preenchido apenas em procNFe)
list[].numberlongNúmero da NFe (preenchido apenas em procNFe)
list[].tp_nfintTipo da operação: 0=Entrada, 1=Saída (na ótica do emitente)
list[].c_sit_nfeintSituação da NFe (preenchido em resNFe): 1=Autorizada, 2=Denegada, 3=Cancelada
list[].tp_eventointCódigo do evento (preenchido em resEvento/procEvento). Ex: 110110=CCe, 110111=Cancelamento, 210210=Ciência
list[].desc_eventostringDescrição textual do evento
list[].n_seq_eventointSequência do evento
list[].dh_eventostringData/hora do evento (eventos)
list[].xml_urlstringURL pública do XML do documento no OSS
list[].createstringData/hora UTC da captura
Ordenação: registros são retornados por NSU decrescente (mais recente primeiro).
POST /api/invoice/received/get_xml
Obter URL do XML de um documento recebido específico

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "id": "6a04a70d3201b5a62f3ac2f8"
}

Campos

CampoTipoObrigatórioDescrição
idstringSimObjectId do documento — retornado em /received/list

Resposta de Sucesso

{
  "success": true,
  "message": "data",
  "data": {
    "id": "6a04a70d3201b5a62f3ac2f8",
    "nsu": 2318,
    "doc_type": "resNFe",
    "chave": "35260563845920000120550020000085471156822656",
    "xml_url": "https://storage.../received/13-05-2026/...resNFe_2318.xml"
  }
}
Sobre o XML retornado:
  • resNFe — XML é apenas o resumo, NÃO contém produtos/impostos. Use para auditoria/triagem antes de manifestar Ciência
  • procNFe — XML completo e assinado, equivalente ao gerado pela emissão. Pronto para importar no ERP do cliente
  • procEvento — XML do evento completo com assinatura e protocolo

Erros Comuns

MensagemCausa
id inválidoValor não é um ObjectId válido
documento recebido não encontradoObjectId existe mas não pertence ao usuário do token
POST /api/invoice/received/get_sync_status
Consultar estado atual da sincronização DistDFe (sem chamar SEFAZ)

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Payload

{
  "cnpj": "26638419000167"
}

Campos

CampoTipoObrigatórioDescrição
cnpjstringSimCNPJ da empresa destinatária — 14 dígitos, sem formatação

Resposta — Empresa já sincronizada

{
  "success": true,
  "message": "成功",
  "data": {
    "cnpj": "26638419000167",
    "uf": "SP",
    "ult_nsu": 2323,
    "max_nsu": 2323,
    "pending": 0,
    "last_sync": "2026-05-13 16:30:05"
  }
}

Resposta — Empresa nunca sincronizou

{
  "success": true,
  "message": "成功",
  "data": {
    "cnpj": "26638419000167",
    "ult_nsu": 0,
    "max_nsu": 0,
    "pending": 0,
    "last_sync": null
  }
}

Campos da Resposta

CampoTipoDescrição
cnpjstringCNPJ consultado
ufstringUF do destinatário usada na última sincronização (ausente se nunca sincronizou)
ult_nsulongÚltimo NSU processado. 0 = nunca sincronizou
max_nsulongMaior NSU disponível no SEFAZ na última sincronização
pendinglongDocumentos pendentes (max_nsu - ult_nsu). Se > 0, há novos documentos no SEFAZ
last_syncstringData/hora UTC da última sincronização bem-sucedida. null se nunca sincronizou
Uso típico: chame esse endpoint antes de /received/sync para decidir se precisa chamar o SEFAZ. Esse endpoint não consome o rate limit do SEFAZ — só lê o estado local do MongoDB.

local_shipping MDF-e — Manifesto Eletrônico de Documentos Fiscais

A API de MDF-e (modelo 58, layout PL-MDFe 3.00) permite emitir, consultar, cancelar e encerrar manifestos de transporte. O MDF-e agrega NF-es e/ou CT-es vinculados a uma operação de transporte, suportando 4 modais: rodoviário, aéreo, aquaviário e ferroviário. Toda informação operacional (condutor, veículo, contratante, CIOT, vale-pedágio, pagamento) vai no corpo do /create — não há eventos de inclusão/alteração após a emissão.

EndpointMétodoDescrição
/api/mdfe/createPOSTEmitir MDF-e
/api/mdfe/consultPOSTConsultar situação do MDF-e
/api/mdfe/cancelPOSTCancelar MDF-e (até 24h após autorização)
/api/mdfe/closePOSTEncerrar MDF-e (após finalizar viagem)
POST /api/mdfe/create
Emitir MDF-e

Emite um MDF-e a partir do corpo enviado. Os campos serie, nMDF, cMDF, cDV, cUF, dhEmi, mod, tpEmis, procEmi, verProc são calculados automaticamente pelo servidor. O cliente envia apenas os campos de negócio.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body — raiz

CampoTipoDescrição
ide *objectIdentificação do MDF-e
emit *objectDados do emitente
infModal *objectInformações do modal (apenas UM dos quatro: rodo, aereo, aquav, ferrov)
infDoc *objectDocumentos fiscais vinculados
tot *objectTotalizadores da carga
prodPredobjectProduto predominante da carga
segarrayInformações de seguro
lacresarrayLacres do MDF-e
autXMLarrayCNPJs/CPFs autorizados a acessar o XML
infAdicobjectInformações adicionais (fisco e contribuinte)
infRespTecobjectResponsável técnico (CNPJ, contato, email, etc.)

ide — Identificação

CampoTipoDescrição
tpAmb *intAmbiente: 1=produção, 2=homologação
tpEmit *intTipo do emitente: 1=transportador, 2=carga própria, 3=prestador de serviço de transporte
modal *stringModal: "1"=rodoviário, "2"=aéreo, "3"=aquaviário, "4"=ferroviário
UFIni *stringUF de início da viagem (2 letras)
UFFim *stringUF de fim da viagem
infMunCarrega[] *arrayMunicípios de carregamento: [{ cMunCarrega, xMunCarrega }]
infPercurso[]arrayUFs do percurso: [{ UFPer }]
tpTranspstringTipo de transportador (rodoviário)
dhIniViagemstringData/hora de início da viagem (ISO 8601)
indCanalVerdestringIndicador de canal verde
indCarregaPosteriorstringIndicador de carregamento posterior

emit — Emitente

CampoTipoDescrição
CNPJ ⚠stringCNPJ do emitente (14 dígitos)
CPF ⚠stringCPF do emitente (11 dígitos)
IEstringInscrição Estadual
xNome *stringRazão social
xFantstringNome fantasia
enderEmitobjectEndereço: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone, email }

infModal — Modal Rodoviário (modal="1")

CampoTipoDescrição
rodo.veicTracao *objectVeículo de tração: { placa, tara, RENAVAM, capKG, capM3, tpRod, tpCar, UF, condutor[], prop }
rodo.veicTracao.condutor[] *arrayCondutores: [{ xNome, CPF }] — mínimo 1
rodo.veicReboque[]arrayVeículos de reboque (mesma estrutura de veicTracao sem condutor)
rodo.infANTTobjectInformações da ANTT: { RNTRC, infCIOT[], valePed, infContratante[], infPag[] }
rodo.codAgPortostringCódigo de agendamento no porto
rodo.lacRodo[]arrayLacres do modal: [{ nLacre }]

infModal — Modal Aéreo (modal="2")

CampoTipoDescrição
aereo.nac *stringMarca de nacionalidade da aeronave
aereo.matr *stringMatrícula da aeronave
aereo.nVoo *stringNúmero do voo
aereo.cAerEmb *stringCódigo IATA do aeroporto de embarque
aereo.cAerDes *stringCódigo IATA do aeroporto de destino
aereo.dVoo *stringData do voo (AAAA-MM-DD)

infModal — Modal Aquaviário (modal="3")

CampoTipoDescrição
aquav.irin *stringIRIN da embarcação
aquav.tpEmb *stringTipo de embarcação (2 dígitos). Use valores ≥ 10 para evitar truncamento do byte interno do Zeus (ex.: "10", "11")
aquav.cEmbar *stringCódigo da embarcação
aquav.xEmbar *stringNome da embarcação
aquav.nViag *stringNúmero da viagem. Não pode começar com zero (validação do schema) — use "1", "100", etc.
aquav.cPrtEmb *stringCódigo do porto de embarque
aquav.cPrtDest *stringCódigo do porto de destino
aquav.prtTransstringPorto de transbordo
aquav.tpNavstringTipo de navegação
aquav.infTermCarreg[]arrayTerminais de carregamento: [{ cTermCarreg, xTermCarreg }]
aquav.infTermDescarreg[]arrayTerminais de descarregamento
aquav.infEmbComb[]arrayEmbarcações de comboio: [{ cEmbComb, xBalsa }]
aquav.infUnidCargaVazia[]arrayUnidades de carga vazias
aquav.infUnidTranspVazia[]arrayUnidades de transporte vazias

infModal — Modal Ferroviário (modal="4")

CampoTipoDescrição
ferrov.trem *objectDados do trem: { xPref, dhTrem, xOri, xDest, qVag }
ferrov.vag[] *arrayVagões: [{ pesoBC, pesoR, tpVag, serie, nVag, nSeq, TU }] — mínimo 1. Restrições do Zeus/SEFAZ: serie deve ter exatamente 3 dígitos (use 100+, ex.: "100"); nVag só aceita dígitos (long internamente, ex.: "100001"); nSeq opcional 1-3 dígitos.

infDoc — Documentos vinculados

CampoTipoDescrição
infMunDescarga[] *arrayMunicípios de descarga — mínimo 1
infMunDescarga[].cMunDescarga *stringCódigo IBGE do município
infMunDescarga[].xMunDescarga *stringNome do município
infMunDescarga[].infNFe[]arrayNF-es vinculadas: [{ chNFe, SegCodBarras, indReentrega, infUnidTransp[], peri[] }]
infMunDescarga[].infCTe[]arrayCT-es vinculados
infMunDescarga[].infMDFeTransp[]arrayMDF-es de transporte (subcontratação)

prodPred — Produto predominante

CampoTipoDescrição
tpCarga *stringTipo de carga: "01"=granel sólido, "02"=granel líquido, "03"=frigorificada, "04"=conteinerizada, "05"=carga geral, "06"=neogranel, "07"=perigosa, "08"=granel pressurizado
xProd *stringDescrição do produto predominante
cEANstringGTIN/EAN
NCMstringNCM
infLotacaoobjectLotação: { infLocalCarrega{CEP,latitude,longitude}, infLocalDescarrega{...} }

tot — Totalizadores

CampoTipoDescrição
vCarga *decimalValor total da carga (> 0)
cUnid *stringCódigo da unidade: "01"=KG, "02"=TON
qCarga *decimalQuantidade total da carga (> 0)
qCTeintQuantidade de CT-es vinculados
qNFeintQuantidade de NF-es vinculadas
qMDFeintQuantidade de MDF-es vinculados

* Campo obrigatório. ⚠ Pelo menos um de CNPJ ou CPF é obrigatório.

Exemplo simplificado — Modal Rodoviário

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "modal": "1",
            "UFIni": "SP",
            "UFFim": "ES",
            "infMunCarrega": [
              { "cMunCarrega": "3550308", "xMunCarrega": "SAO PAULO" }
            ],
            "infPercurso": [
              { "UFPer": "MG" }
            ]
          },
          "emit": {
            "CNPJ": "12345678000199",
            "IE": "123456789012",
            "xNome": "TRANSPORTADORA EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "RUA EXEMPLO",
              "nro": "100",
              "xBairro": "CENTRO",
              "cMun": "3550308",
              "xMun": "SAO PAULO",
              "UF": "SP"
            }
          },
          "infModal": {
            "versaoModal": "3.00",
            "rodo": {
              "veicTracao": {
                "placa": "ABC1D23",
                "tara": 8000,
                "condutor": [
                  { "xNome": "João da Silva", "CPF": "12345678909" }
                ],
                "tpRod": "01",
                "tpCar": "01"
              }
            }
          },
          "infDoc": {
            "infMunDescarga": [
              {
                "cMunDescarga": "3205200",
                "xMunDescarga": "Vila Velha",
                "infNFe": [
                  { "chNFe": "35260512345678000199550010000000011000000018" }
                ]
              }
            ]
          },
          "prodPred": {
            "tpCarga": "05",
            "xProd": "CARGA GERAL"
          },
          "tot": {
            "vCarga": 50000.00,
            "cUnid": "01",
            "qCarga": 1500.00
          }
        }

Exemplo simplificado — Modal Aéreo

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "modal": "2",
            "UFIni": "SP",
            "UFFim": "RJ",
            "infMunCarrega": [
              { "cMunCarrega": "3550308", "xMunCarrega": "SAO PAULO" }
            ]
          },
          "emit": {
            "CNPJ": "12345678000199",
            "IE": "123456789012",
            "xNome": "TRANSPORTADORA AEREA EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "AV AEROPORTO",
              "nro": "5000",
              "xBairro": "CUMBICA",
              "cMun": "3550308",
              "xMun": "SAO PAULO",
              "UF": "SP"
            }
          },
          "infModal": {
            "versaoModal": "3.00",
            "aereo": {
              "nac": "PT",
              "matr": "ABC1234",
              "nVoo": "AB1234",
              "cAerEmb": "GRU",
              "cAerDes": "GIG",
              "dVoo": "2026-05-21"
            }
          },
          "infDoc": {
            "infMunDescarga": [
              {
                "cMunDescarga": "3304557",
                "xMunDescarga": "Rio de Janeiro",
                "infNFe": [
                  { "chNFe": "35260512345678000199550010000000011000000018" }
                ]
              }
            ]
          },
          "prodPred": {
            "tpCarga": "05",
            "xProd": "CARGA GERAL"
          },
          "tot": {
            "vCarga": 25000.00,
            "cUnid": "01",
            "qCarga": 500.00
          }
        }

Exemplo simplificado — Modal Aquaviário

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "modal": "3",
            "UFIni": "SP",
            "UFFim": "PA",
            "infMunCarrega": [
              { "cMunCarrega": "3548500", "xMunCarrega": "SANTOS" }
            ]
          },
          "emit": {
            "CNPJ": "12345678000199",
            "IE": "123456789012",
            "xNome": "NAVEGACAO EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "AV PORTUARIA",
              "nro": "200",
              "xBairro": "PORTO",
              "cMun": "3548500",
              "xMun": "SANTOS",
              "UF": "SP"
            }
          },
          "infModal": {
            "versaoModal": "3.00",
            "aquav": {
              "irin": "1234567",
              "tpEmb": "10",
              "cEmbar": "1234",
              "xEmbar": "EMBARCACAO EXEMPLO",
              "nViag": "1",
              "cPrtEmb": "BRSSZ",
              "cPrtDest": "BRBEL"
            }
          },
          "infDoc": {
            "infMunDescarga": [
              {
                "cMunDescarga": "1501402",
                "xMunDescarga": "Belém",
                "infNFe": [
                  { "chNFe": "35260512345678000199550010000000011000000018" }
                ]
              }
            ]
          },
          "prodPred": {
            "tpCarga": "01",
            "xProd": "GRAOS DE SOJA"
          },
          "tot": {
            "vCarga": 500000.00,
            "cUnid": "02",
            "qCarga": 50.00
          }
        }

Exemplo simplificado — Modal Ferroviário

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "modal": "4",
            "UFIni": "MG",
            "UFFim": "SP",
            "infMunCarrega": [
              { "cMunCarrega": "3106200", "xMunCarrega": "BELO HORIZONTE" }
            ]
          },
          "emit": {
            "CNPJ": "12345678000199",
            "IE": "123456789012",
            "xNome": "FERROVIA EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "AV FERROVIARIA",
              "nro": "300",
              "xBairro": "INDUSTRIAL",
              "cMun": "3106200",
              "xMun": "BELO HORIZONTE",
              "UF": "MG"
            }
          },
          "infModal": {
            "versaoModal": "3.00",
            "ferrov": {
              "trem": {
                "xPref": "F123",
                "dhTrem": "2026-05-21T08:00:00-03:00",
                "xOri": "BELO HORIZONTE",
                "xDest": "SANTOS",
                "qVag": 2
              },
              "vag": [
                {
                  "pesoBC": 30.000,
                  "pesoR": 30.000,
                  "tpVag": "Gôndola",
                  "serie": "100",
                  "nVag": "100001",
                  "nSeq": "1",
                  "TU": 28.000
                },
                {
                  "pesoBC": 30.000,
                  "pesoR": 30.000,
                  "tpVag": "Gôndola",
                  "serie": "101",
                  "nVag": "100002",
                  "nSeq": "2",
                  "TU": 28.000
                }
              ]
            }
          },
          "infDoc": {
            "infMunDescarga": [
              {
                "cMunDescarga": "3548500",
                "xMunDescarga": "Santos",
                "infNFe": [
                  { "chNFe": "35260512345678000199550010000000011000000018" }
                ]
              }
            ]
          },
          "prodPred": {
            "tpCarga": "01",
            "xProd": "MINERIO DE FERRO"
          },
          "tot": {
            "vCarga": 800000.00,
            "cUnid": "02",
            "qCarga": 56.00
          }
        }

Exemplo completo (todos os campos) — Modal Rodoviário

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "tpTransp": "1",
            "modal": "1",
            "UFIni": "SP",
            "UFFim": "ES",
            "infMunCarrega": [
              { "cMunCarrega": "3550308", "xMunCarrega": "SAO PAULO" }
            ],
            "infPercurso": [
              { "UFPer": "MG" }
            ],
            "dhIniViagem": "2026-05-21T08:00:00-03:00",
            "indCanalVerde": "1",
            "indCarregaPosterior": "0"
          },
          "emit": {
            "CNPJ": "12345678000199",
            "IE": "123456789012",
            "xNome": "TRANSPORTADORA EXEMPLO LTDA",
            "xFant": "Exemplo Transportes",
            "enderEmit": {
              "xLgr": "RUA EXEMPLO",
              "nro": "100",
              "xCpl": "GALPAO A",
              "xBairro": "CENTRO",
              "cMun": "3550308",
              "xMun": "SAO PAULO",
              "CEP": "01001000",
              "UF": "SP",
              "fone": "1133334444",
              "email": "contato@exemplo.com"
            }
          },
          "infModal": {
            "versaoModal": "3.00",
            "rodo": {
              "infANTT": {
                "RNTRC": "12345678",
                "infCIOT": [
                  { "CIOT": "1234567890", "CNPJ": "12345678000199" }
                ],
                "valePed": {
                  "categCombVeic": "01",
                  "disp": [
                    {
                      "CNPJForn": "98765432000111",
                      "CNPJPg": "12345678000199",
                      "nCompra": "VP001",
                      "vValePed": 250.00,
                      "tpValePed": "01"
                    }
                  ]
                },
                "infContratante": [
                  {
                    "xNome": "EMPRESA CONTRATANTE LTDA",
                    "CNPJ": "11222333000144"
                  }
                ],
                "infPag": [
                  {
                    "xNome": "João da Silva",
                    "CPF": "12345678909",
                    "Comp": [
                      { "tpComp": "01", "vComp": 5000.00, "xComp": "Frete contratado" }
                    ],
                    "vContrato": 5000.00,
                    "indAltoDesemp": "1",
                    "indPag": "0",
                    "infBanc": {
                      "codBanco": "001",
                      "codAgencia": "1234",
                      "PIX": "12345678909"
                    }
                  }
                ]
              },
              "veicTracao": {
                "cInt": "VT001",
                "placa": "ABC1D23",
                "RENAVAM": "12345678901",
                "tara": 8000,
                "capKG": 25000,
                "capM3": 80,
                "prop": {
                  "CNPJ": "12345678000199",
                  "RNTRC": "12345678",
                  "xNome": "TRANSPORTADORA EXEMPLO LTDA",
                  "IE": "123456789012",
                  "UF": "SP",
                  "tpProp": "0"
                },
                "condutor": [
                  { "xNome": "João da Silva", "CPF": "12345678909" },
                  { "xNome": "Maria Souza", "CPF": "98765432100" }
                ],
                "tpRod": "01",
                "tpCar": "01",
                "UF": "SP"
              },
              "veicReboque": [
                {
                  "cInt": "VR001",
                  "placa": "DEF4G56",
                  "RENAVAM": "98765432109",
                  "tara": 3500,
                  "capKG": 30000,
                  "capM3": 90,
                  "tpCar": "02",
                  "UF": "SP"
                }
              ],
              "lacRodo": [
                { "nLacre": "LACRE001" },
                { "nLacre": "LACRE002" }
              ]
            }
          },
          "infDoc": {
            "infMunDescarga": [
              {
                "cMunDescarga": "3205200",
                "xMunDescarga": "Vila Velha",
                "infNFe": [
                  {
                    "chNFe": "35260512345678000199550010000000011000000018",
                    "SegCodBarras": "",
                    "indReentrega": "0",
                    "infUnidTransp": [
                      {
                        "tpUnidTransp": "1",
                        "idUnidTransp": "UT001",
                        "qtdRat": 100.000,
                        "lacUnidTransp": [{ "nLacre": "LACRE-UT-001" }],
                        "infUnidCarga": [
                          {
                            "tpUnidCarga": "1",
                            "idUnidCarga": "UC001",
                            "qtdRat": 100.000,
                            "lacUnidCarga": [{ "nLacre": "LACRE-UC-001" }]
                          }
                        ]
                      }
                    ],
                    "peri": []
                  }
                ]
              }
            ]
          },
          "seg": [
            {
              "infResp": {
                "respSeg": "1",
                "CNPJ": "12345678000199"
              },
              "infSeg": {
                "xSeg": "SEGURADORA EXEMPLO SA",
                "CNPJ": "55666777000188"
              },
              "nApol": "APOL-2026-001",
              "nAver": ["AV001", "AV002"]
            }
          ],
          "prodPred": {
            "tpCarga": "05",
            "xProd": "CARGA GERAL",
            "cEAN": "7891234567890",
            "NCM": "84713012",
            "infLotacao": {
              "infLocalCarrega": {
                "CEP": "01001000",
                "latitude": "-23.5505",
                "longitude": "-46.6333"
              },
              "infLocalDescarrega": {
                "CEP": "29100000",
                "latitude": "-20.3297",
                "longitude": "-40.2925"
              }
            }
          },
          "tot": {
            "qCTe": 0,
            "qNFe": 1,
            "qMDFe": 0,
            "vCarga": 50000.00,
            "cUnid": "01",
            "qCarga": 1500.00
          },
          "lacres": [
            { "nLacre": "LACRE-GERAL-001" }
          ],
          "autXML": [
            { "CNPJ": "11222333000144" }
          ],
          "infAdic": {
            "infAdFisco": "Documento emitido em conformidade com a legislação vigente",
            "infCpl": "Transporte com escolta armada"
          },
          "infRespTec": {
            "CNPJ": "12345678000199",
            "xContato": "Suporte Técnico",
            "email": "suporte@exemplo.com",
            "fone": "1133334444"
          }
        }

Resposta de sucesso

        {
          "success": true,
          "data": {
            "chMDFe": "35260512345678000199580010000000011000000018",
            "nMDF": 1,
            "serie": 1,
            "protocolo": "135260000123456",
            "xml": "https://storage.../mdfe/2026-05-21/35260512345678000199580010000000011000000018.xml"
          }
        }
POST /api/mdfe/consult
Consultar situação do MDF-e

Consulta a situação do MDF-e diretamente na SEFAZ a partir da chave de acesso.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
chMDFe *stringChave de acesso do MDF-e (44 dígitos)

* Campo obrigatório.

Exemplo de payload

        {
          "chMDFe": "35260512345678000199580010000000011000000018"
        }

Resposta

        {
          "success": true,
          "data": {
            "chMDFe": "35260512345678000199580010000000011000000018",
            "cStat": 100,
            "xMotivo": "Autorizado o uso do MDF-e",
            "protocolo": "135260000123456",
            "dhRecbto": "2026-05-21T10:30:00-03:00",
            "encerrado": false,
            "cancelado": false
          }
        }
POST /api/mdfe/cancel
Cancelar MDF-e

Cancela um MDF-e autorizado. Janela: até 24 horas após a autorização. Não permitido se o MDF-e já tiver sido encerrado.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
chMDFe *stringChave de acesso do MDF-e (44 dígitos)
xJust *stringJustificativa do cancelamento (mínimo 15 caracteres por exigência SEFAZ)

* Campo obrigatório.

Exemplo de payload

        {
          "chMDFe": "35260512345678000199580010000000011000000018",
          "xJust": "Cancelamento por erro no preenchimento dos dados do veiculo"
        }

Resposta

        {
          "success": true,
          "data": {
            "chMDFe": "35260512345678000199580010000000011000000018",
            "cStat": 135,
            "xMotivo": "Evento registrado e vinculado a MDF-e",
            "nProt": "135260000123457",
            "dhRegEvento": "2026-05-21T11:00:00-03:00"
          }
        }
POST /api/mdfe/close
Encerrar MDF-e

Encerra um MDF-e ao final da viagem. Após o encerramento, não é mais possível cancelar. Os campos dtEnc, cUF e cMun são opcionais — quando omitidos, o sistema infere a partir do MDF-e original (data atual, UF e município do emitente).

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa emissora
signstringAssinatura MD5
timestampstringUnix timestamp em segundos

Body

CampoTipoDescrição
chMDFe *stringChave de acesso do MDF-e (44 dígitos)
dtEncstringData do encerramento (AAAA-MM-DD). Default: data atual
cUFintCódigo IBGE da UF onde ocorreu o encerramento. Default: UF do emitente
cMunstringCódigo IBGE do município onde ocorreu o encerramento. Default: município do emitente

* Campo obrigatório.

Exemplo de payload

        {
          "chMDFe": "35260512345678000199580010000000011000000018",
          "dtEnc": "2026-05-22",
          "cUF": 32,
          "cMun": "3205200"
        }

Resposta

        {
          "success": true,
          "data": {
            "chMDFe": "35260512345678000199580010000000011000000018",
            "cStat": 135,
            "xMotivo": "Evento registrado e vinculado a MDF-e",
            "nProt": "135260000123458",
            "dhRegEvento": "2026-05-22T18:00:00-03:00"
          }
        }

vpn_key SSO — Login Automático via Token

Base URL (Produção)
https://api.tffiscal.com
Autenticação
Headers: sign, timestamp, token
Validade do Ticket
60 segundos — uso único

O SSO (Single Sign-On) permite que seu ERP gere um link de acesso direto ao TFiscal para o usuário, já autenticado na empresa correspondente e no idioma desejado — sem que ele precise digitar credenciais.

Como funciona:
  • O ERP chama POST /api/sso/create_ticket enviando o token da empresa.
  • A TFiscal devolve um redirectUrl contendo um ticket opaco de uso único.
  • O ERP redireciona o navegador do usuário para essa URL.
  • A página consome o ticket e o usuário entra logado no painel da empresa.
⚠️ Segurança: o token real da empresa nunca aparece na URL. Apenas o ticket efêmero (válido por 60 segundos e de uso único) transita pelo navegador.
POST /api/sso/create_ticket
Gerar link de login automático

Gera um ticket de uso único que pode ser usado em até 60 segundos para logar automaticamente o usuário no painel da empresa correspondente ao token.

Headers obrigatórios

HeaderTipoDescrição
token string Token da empresa (o mesmo usado para emitir NF-e)
sign string Assinatura MD5: MD5(token + path + body + timestamp)
timestamp string Unix timestamp em segundos (janela de 5 minutos)

Payload

{
  "token": "TOKEN_DA_EMPRESA",
  "language": "br",
  "page": "emitir_nfe"
}

Campos

CampoObrigatórioTipoDescrição
token Sim string Token da empresa (w_company.token) — o mesmo usado em /api/invoice/create
language Não string Idioma da interface: br, en, zh, es, ja, ko. Default: br
page Não string Página de destino após o login. Valores aceitos: emitir_nfe. Vazio ou ausente abre o painel padrão (/company/kanban).

Resposta de sucesso

{
  "success": true,
  "message": "ticket",
  "ticket": "nXk9sz6I6KHOt_OM72ZmfyU5p1eOet5k5Bd3AFZtspg",
  "redirectUrl": "https://www.tffiscal.com/sso#ticket=nXk9sz6I6KHOt_OM72ZmfyU5p1eOet5k5Bd3AFZtspg",
  "expiresInSeconds": 60,
  "expiresAt": "2026-04-24T18:34:56.0000000Z"
}

Campos da Resposta

CampoTipoDescrição
success boolean true quando o ticket foi gerado com sucesso
ticket string Ticket opaco (aleatório, 32 bytes base64url)
redirectUrl string URL completa para onde o ERP deve redirecionar o navegador do usuário
expiresInSeconds number Tempo de validade em segundos (sempre 60)
expiresAt string Data/hora UTC de expiração (ISO 8601)

Respostas de erro

MensagemCausa
Token é obrigatório Campo token não foi enviado no body
Token inválido Token não corresponde a nenhuma empresa cadastrada
Este token está vinculado a múltiplas empresas. Envie o token da empresa que deseja acessar. Token de integrador com mais de uma empresa — envie o token específico da empresa desejada
Rate limit exceeded Mais de 30 chamadas por minuto para o mesmo token
POST /api/sso/consume_ticket
Consumir ticket e receber o JWT de sessão

Troca o ticket gerado por /api/sso/create_ticket pelo JWT de sessão da TFiscal. Endpoint chamado pelo frontend (rota /sso) e não requer headers sign/timestamp — o próprio ticket opaco é a credencial. Cada ticket pode ser consumido apenas uma vez e expira em 60 segundos.

Body

CampoTipoDescrição
ticket *stringTicket retornado por create_ticket

* Campo obrigatório.

Exemplo de payload

        {
          "ticket": "nXk9sz6I6KHOt_OM72ZmfyU5p1eOet5k5Bd3AFZtspg"
        }

Resposta de sucesso

        {
          "success": true,
          "message": "Login succeeded",
          "access_token": "eyJhbGciOi...",
          "type": "user",
          "uid": 1234,
          "company_id": 5678,
          "language": "br",
          "page": "emitir_nfe"
        }

Campos da Resposta

CampoTipoDescrição
access_tokenstringJWT de sessão (validade de 365 dias). Use no header Authorization das chamadas TFiscal
typestringTipo do usuário (user, admin, etc.)
uidintID interno do usuário
company_idintID da empresa selecionada no create_ticket
languagestringIdioma escolhido no create_ticket (sempre normalizado)
pagestringPágina de destino (ou string vazia se não definida)

Respostas de erro

MensagemCausa
Ticket inválidoBody sem campo ticket
Ticket inválido ou expiradoTicket não existe, já foi consumido ou passou dos 60 segundos
Rate limit exceededMais de 60 consumos por minuto a partir do mesmo IP
Sessão inválidaUsuário vinculado ao ticket não existe mais

lock Restrições e Segurança

Características do ticket

CaracterísticaValor
Validade 60 segundos após geração
Uso Único — após consumido, não pode ser reutilizado
Rate limit 30 tickets/minuto por token · 60 consumos/minuto por IP
Armazenamento MongoDB com TTL automático — tickets expirados são removidos

Restrições de navegação

Usuários autenticados via SSO têm acesso apenas às telas da empresa correspondente (/invoice/company/*). Tentativas de acessar outras áreas (painéis de revendedor, relatórios gerais, administração) são redirecionadas automaticamente para o painel da empresa.

Sessão após o login

Após a troca do ticket por JWT, o usuário possui uma sessão normal na TFiscal (JWT com validade de 365 dias, igual ao login tradicional). Os 60 segundos são apenas a janela entre gerar o ticket e abrir o link — depois disso o usuário fica logado normalmente até sair.

⚠️ Importante: o create_ticket deve ser chamado exclusivamente server-side pelo ERP. Nunca chame esse endpoint diretamente do navegador — isso exporia o token da empresa no front-end.

badge Contador (Accountant)

API para consulta dos dados de cadastro de contadores vinculados a uma empresa. Útil para sistemas contábeis externos que precisam buscar dados completos do contador responsável por uma determinada empresa.

POST /api/accountant/get_info
Obter informações do contador vinculado à empresa

Retorna os dados completos de cadastro do contador vinculado à empresa informada. O contador precisa estar previamente vinculado à empresa (mesmo CNPJ) e o e-mail informado deve coincidir com o cadastro.

Headers obrigatórios

HeaderTipoDescrição
tokenstringToken da empresa ou token B2B do integrador
signstringAssinatura MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp em segundos (janela de 5 minutos)

Body

CampoTipoDescrição
companyId *intID da empresa vinculada ao token
accountantId *stringObjectId do contador (24 hex)
email *stringE-mail do contador (deve coincidir com o cadastro)

* Campo obrigatório.

Exemplo de payload

        {
          "companyId": 12345,
          "accountantId": "5f3a8b9c1d2e4f5a6b7c8d9e",
          "email": "contador@escritorio.com"
        }

Resposta de sucesso

        {
          "success": true,
          "data": {
            "email": "contador@escritorio.com",
            "officeDocumentType": "CNPJ",
            "officeDocument": "12345678000199",
            "officeName": "Escritório Contábil LTDA",
            "responsibleName": "João da Silva",
            "crc": "SP123456/O-7",
            "accountantCpf": "12345678909",
            "workAddress": "Rua Exemplo, 100 - Centro - São Paulo/SP",
            "site": "https://escritorio.com",
            "landline": "1133334444",
            "mobile": "11999998888",
            "assistantName": "Maria Souza",
            "assistantEmail": "maria@escritorio.com",
            "assistantPhone": "11988887777",
            "observations": "Atendimento de segunda a sexta, 9h às 18h"
          }
        }

Campos da Resposta

CampoTipoDescrição
emailstringE-mail principal do contador
officeDocumentTypestringTipo do documento do escritório: "CNPJ" ou "CPF"
officeDocumentstringDocumento do escritório (apenas dígitos)
officeNamestringRazão social / nome do escritório
responsibleNamestringNome do contador responsável
crcstringNúmero do CRC (Conselho Regional de Contabilidade)
accountantCpfstringCPF do contador (apenas dígitos)
workAddressstringEndereço comercial
sitestringSite do escritório
landlinestringTelefone fixo
mobilestringCelular
assistantNamestringNome do assistente
assistantEmailstringE-mail do assistente
assistantPhonestringTelefone do assistente
observationsstringObservações livres do cadastro

Respostas de erro

MensagemCausa
会计师ID参数异常或不存在accountantId ausente ou não é um ObjectId válido
该会计师邮箱异常或不存在email inválido ou não cadastrado
发票账号{companyId}异常或不存在companyId não pertence ao usuário do token
该会计师未绑定该发票账号O contador não está vinculado à empresa informada