REST API v2.5 SYSTEM OPERATIONAL

Documentación NFE API

Bienvenido a la documentación de NFE API. API completa para emisión, consulta y cancelación de Facturas Electrónicas (NF-e) en Brasil. Soporta cálculo automático de impuestos (ICMS, IPI, PIS/COFINS), generación de XML, autorización SEFAZ e integración con sistemas de gestión.

list_alt

Campos Importantes de la API

Interpretación de Campos Críticos

Esta sección explica los campos más importantes de NFE API que son esenciales para el correcto funcionamiento de la emisión de facturas.

⚠️ ATENCIÓN: La configuración correcta de estos campos es fundamental para la emisión válida de facturas. Consulte siempre la legislación tributaria vigente.
Campo Descripción Valores Posibles Importancia
invoice_type Tipo de empresa (persona jurídica/física) juridica, fisica Alta - Define el régimen tributario
nature_of_operation Naturaleza de la operación (venta, devolución, etc.) Ej: VENDA, DEVOLUCAO Alta - Determina el CFOP
transaction_type Tipo de transacción (entrada/salida) ENTRADA, SAIDA Alta - Dirige el flujo fiscal
model Modelo de la factura nfe, nfce Alta - Modelo del documento
issuance_type Tipo de emisión (normal, contingencia) NORMAL, CONTINGENCIA Media - Modo de emisión
ambiente Ambiente de procesamiento PRODUCAO, HOMOLOGACAO Alta - Define SEFAZ destino
cliente Tipo de cliente/comprador CONSUMIDOR, CONTRIBUINTE Alta - Impacta en los impuestos
products.origem Origen del producto (nacional/importado) 0 a 8 Alta - Determina tributación
products.indicador_total Si el producto entra en el total de la NF true, false Media - Para ítems de muestra
💡 CONSEJO: Para productos, el campo origem es crítico: 0-Nacional, 1-Extranjera importación directa, 2-Extranjera adquirida en el mercado interno, etc. Consulte la tabla completa de origen de mercancías.
sync_alt

Flujo del Proceso de Emisión

Diagrama completo de la emisión de NF-e

El flujo completo de emisión de factura electrónica en Brasil, desde la creación de la empresa hasta la generación de los archivos finales.

business

1. Crear Empresa

Crear información fiscal de la empresa local en Brasil

send

2. Push de Información

Datos del pedido (usuario, dirección, impuestos del producto)

receipt

3. Emitir Factura

Procesar y enviar para autorización SEFAZ

assignment_returned

4. Retornar Resultado

Estado de la emisión y datos de la NF-e

description

5. Generar Archivos

XML y PDF de la factura

published_with_changes

Verificación Fiscal

Validación con SEFAZ

check_circle

Éxito

error

Fallo

Configuración Inicial
Procesamiento de Datos
Emisión Fiscal
Resultados Positivos
📊 Flujo Detallado: El proceso sigue una secuencia lógica: (1) Configuración de la empresa → (2) Recepción de los datos del pedido → (3) Procesamiento y emisión de la NF-e → (4) Retorno del estado → (5) Generación de los archivos. El punto de decisión (Verificación Fiscal) determina si la emisión fue autorizada por la SEFAZ.
flash_on

Referencia Rápida de Endpoints

Todos los endpoints de NFE API

Visión general completa de todos los endpoints disponibles en la API. Use esta tabla como referencia rápida para navegar en la documentación.

URL Base
https://api.tffiscal.com
Path Método HTTP Función
business Gestión de Empresas
/api/company/create POST Crear 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 Crear empresa (simplificado)
/api/company/get_cep_detail GET Consultar CEP
/api/company/get_export_invoice_month_files GET Archivos exportados mensuales
category Gestión de Categorías/Impuestos
/api/category/get_list GET Listar categorías de impuestos
/api/category/create POST Crear categoría de impuestos
/api/category/get_detail GET Consultar detalles de la categoría
/api/category/edit POST Editar categoría de impuestos
/api/category/delete POST Eliminar categoría de impuestos
receipt Gestión de Facturas
/api/invoice/create POST Emitir factura
/api/invoice/get_list GET Listar facturas
/api/invoice/get_detail GET Consultar detalles de la factura
/api/invoice/refresh POST Actualizar estado de la factura
/api/invoice/cancel POST Cancelar factura
/api/invoice/invalid POST Invalidar número de la factura
/api/invoice/return POST Devolución de factura
/api/invoice/get_xml POST Exportar XML de la factura
receipt NFC-e (Factura de Consumidor)
/api/nfce/company/create POST Registrar empresa NFC-e
/api/nfce/company/update POST Actualizar 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 Obtener DANFE NFC-e
/api/nfce/get_list GET Listar NFC-e (paginado)
description NFS-e (Nota de Servicio)
/api/nfse/create POST Emitir NFS-e
/api/nfse/cancel POST Cancelar NFS-e
/api/nfse/get_danfse POST Obtener DANFSE (PDF)
/api/nfse/get_xml POST Descargar XML NFS-e
/api/nfse/get_list GET Listar NFS-e (paginado)
/api/nfs/company/create POST Registrar empresa para emisión de NFS-e
receipt_long NF-e — Eventos y Consultas
/api/invoice/get_danfe POST Obtener DANFE (PDF) de la NF-e
/api/invoice/consultar_status POST Consultar estado de la NF-e/NFC-e en la SEFAZ
/api/invoice/validar_cpf_cnpj POST Validar CPF/CNPJ en la base de la Receita Federal
/api/invoice/cce/send POST Enviar Carta de Corrección (CC-e)
/api/invoice/cce/get_list POST Listar CC-e de una NF-e
/api/invoice/cce/download_pdf POST Descargar PDF de la CC-e
/api/invoice/cce/download_xml POST Descargar XML de la CC-e
mark_email_read NF-e — Manifestación y Notas Recibidas
/api/invoice/manifest POST Enviar evento de manifestación del destinatario
/api/invoice/manifest/list POST Listar manifestaciones enviadas
/api/invoice/manifest/get_xml POST Obtener XML de una manifestación
/api/invoice/received/sync POST Sincronizar NF-es/eventos recibidos (DistDFe)
/api/invoice/received/list POST Listar documentos recibidos
/api/invoice/received/get_xml POST Obtener XML de documento recibido
/api/invoice/received/get_sync_status POST Consultar estado de la sincronización DistDFe
category NFC-e — Categorías Fiscales
/api/nfce/category/create POST Crear categoría fiscal NFC-e
/api/nfce/category/edit POST Editar categoría fiscal NFC-e
/api/nfce/category/delete POST Eliminar categoría fiscal NFC-e
/api/nfce/category/get_detail GET Obtener detalles de la categoría NFC-e
/api/nfce/category/get_list GET Listar categorías fiscales NFC-e
local_shipping MDF-e (Manifiesto Electrónico de Documentos Fiscales)
/api/mdfe/create POST Emitir MDF-e
/api/mdfe/consult POST Consultar situación del MDF-e
/api/mdfe/cancel POST Cancelar MDF-e
/api/mdfe/close POST Cerrar MDF-e
/api/mdfe/get_list GET Listar MDF-e (paginado)
inventory_2 DC-e (Declaración de Contenido Electrónica)
/api/dce/create POST Emitir DC-e
/api/dce/consult POST Consultar situación de la DC-e
/api/dce/cancel POST Cancelar DC-e
/api/dce/pdf POST Obtener DACE (PDF) de la DC-e
/api/dce/get_list GET Listar DC-e (paginado)
local_shipping CT-e (Conocimiento de Transporte Electrónico)
/api/cte/create POST Emitir CT-e
/api/cte/cancel POST Cancelar CT-e
/api/cte/cce POST Carta de Corrección (CC-e)
/api/cte/desacordo POST Prestación en Desacuerdo
/api/cte/consult POST Consultar situación del CT-e
/api/cte/inutilize POST Inutilizar rango de numeración
/api/cte/get_list GET Listar CT-e (paginado)
vpn_key SSO (Inicio Automático)
/api/sso/create_ticket POST Generar enlace de inicio de sesión automático
/api/sso/consume_ticket POST Consumir ticket y recibir el JWT de sesión
account_balance Contador
/api/accountant/get_info POST Obtener información del contador vinculado a la empresa
📋 Notas Importantes:
  • Todos los endpoints requieren autenticación via headers: sign, timestamp, token
  • Para crear empresa y listar empresas, use el token del distribuidor (b2b_token)
  • El Content-Type debe ser siempre application/json;charset=utf-8
  • Las respuestas siguen el patrón JSON con campos success, message y data
200

Éxito

Petición procesada con éxito

400

Error del Cliente

Datos inválidos o faltantes

500

Error del Servidor

Error interno en el servidor

account_balance

NFE API

Factura Electrónica Brasileña (NF-e)

API completa para emisión, consulta y cancelación de Facturas Electrónicas (NF-e) en Brasil. Soporta cálculo automático de impuestos (ICMS, IPI, PIS/COFINS), generación de XML, autorización SEFAZ e integración con sistemas de gestión. Actualmente soporta emisión de facturas para productos en todo territorio brasileño.

Base URL (Producción)
https://api.tffiscal.com/v1
Autenticación
Headers: sign, timestamp, token
Requisitos
Certificado Digital A1 válido

sync_alt Flujo del Sistema

input Datos de Entrada
  • Información del Cliente
  • Datos de los Productos
  • Información Fiscal
  • Datos de Transporte
settings Procesamiento
  • Validación de los datos
  • Cálculo de impuestos
  • Generación del XML
  • Autorización SEFAZ
download Salida
  • XML de la factura
  • PDF de la factura
  • DANFE (Documento Auxiliar)
  • Estado de autorización

Endpoints Principales

POST /api/company/create
Registrar nueva empresa emisora

Registra una empresa emisora vinculada a una cuenta de distribuidor (b2b). Use este endpoint cuando los datos de la empresa ya estén disponibles. Para extracción automática desde el certificado digital, use /api/company/v2/create.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken del distribuidor (b2b — la cuenta debe tener isb2b=true)
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
Identificación
cnpj *stringCNPJ de la empresa emisora
name *stringRazón social
ie *stringInscripción Estatal (Inscrição Estadual)
invoice_type *stringRégimen tributario (ej.: "simples_nacional", "normal")
unit *stringTipo de unidad
emailstringCorreo electrónico de la empresa
Dirección
cep *stringCódigo postal
address *stringDirección (calle)
house_number *stringNúmero de dirección
town *stringBarrio
city *stringCiudad
state *stringUF (sigla del estado)
Certificado digital
cert_file *stringURL HTTPS del certificado digital A1 (.pfx o .p12)
cert_pwd *stringContraseña del certificado
Numeración y configuración
serie *intSerie de la NF-e
number *intNúmero inicial de la numeración
Transporte (MDF-e / CT-e / DC-e)
serie_mdfeintSerie del MDF-e
number_mdfeintNúmero inicial del MDF-e (donde empieza la numeración)
serie_cteintSerie del CT-e
number_cteintNúmero inicial del CT-e (donde empieza la numeración)
serie_dceintSerie de la DC-e
number_dceintNúmero inicial de la DC-e (donde empieza la numeración)
is_create_category_templatebooleanCrea categorías fiscales por defecto automáticamente. Default: true

* Campo obligatorio.

Ejemplo de carga útil

        {
          "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,
          "serie_mdfe": 2,
          "number_mdfe": 1,
          "serie_cte": 3,
          "number_cte": 1,
          "serie_dce": 4,
          "number_dce": 1
        }

Respuesta

        {
          "success": true,
          "data": {
            "company_id": "comp_789012",
            "token": "eyJhbGciOiJIUzI1NiIs..."
          }
        }
POST /api/company/v2/create
Registrar empresa con autocompletado mediante certificado

Versión simplificada de /api/company/create: la API valida el certificado digital y extrae automáticamente razón social, IE, dirección y otros datos mediante consulta interna. Solo cnpj, cert_file y cert_pwd son obligatorios.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken del distribuidor (b2b — la cuenta debe tener isb2b=true)
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
cnpj *stringCNPJ de la empresa emisora
cert_file *stringURL HTTPS del certificado digital A1 (.pfx o .p12)
cert_pwd *stringContraseña del certificado
is_create_category_templatebooleanCrea categorías fiscales por defecto automáticamente. Default: true

* Campo obligatorio.

Ejemplo de carga útil

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

Respuesta

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

Actualiza los datos de la empresa emisora. Envíe solo los campos que desea modificar — todos excepto company_id son opcionales. El CNPJ es inmutable: enviarlo devuelve error. Al actualizar cep, el sistema resuelve automáticamente stateCode e ibge. Cuando cert_file y cert_pwd vienen juntos, el certificado se valida antes de guardar.

La empresa se crea con la configuración de NF-e (vía /api/company/create). Para habilitar los demás documentos, complete el registro por aquí: este endpoint también acepta los campos de NFC-e, NFS-e, MDF-e, CT-e y DC-e (ver secciones más abajo). Envíe solo los campos del/de los documento(s) que la empresa va a emitir.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
company_id *stringID de la empresa a editar
namestringRazón social
invoice_typestringRégimen tributario
iestringInscripción Estatal
unitstringTipo de unidad
emailstringCorreo electrónico
cepstringCódigo postal (actualiza automáticamente stateCode e ibge)
addressstringDirección
house_numberstringNúmero
townstringBarrio
citystringCiudad
statestringUF
cert_filestringURL HTTPS del nuevo certificado (.pfx o .p12). Si se envía junto con cert_pwd, se valida antes de guardar
cert_pwdstringNueva contraseña del certificado
serieintNueva serie de la NF-e
numberintNuevo número inicial
aliasstringNombre comercial
telefonestringTeléfono
complementostringComplemento del domicilio
NFC-e
csc_idstringID del CSC (Código de Seguridad del Contribuyente) en SEFAZ
cscstringToken CSC (secreto compartido con SEFAZ)
serie_nfceintSerie de la NFC-e
number_nfceintNúmero inicial de NFC-e
NFS-e
imstringInscripción Municipal
codigo_municipio_nfsestringCódigo IBGE del municipio emisor
codigo_servico_nfsestringCódigo de servicio por defecto (LC 116)
cnae_nfsestringCNAE de la actividad por defecto
serie_nfseintSerie inicial de la NFS-e
number_nfseintNúmero inicial de la NFS-e
regime_especial_tributacaointCódigo del régimen especial de tributación
optante_simples_nacionalboolOptante por Simples Nacional
Transporte (MDF-e / CT-e / DC-e)
serie_mdfeintSerie del MDF-e
number_mdfeintNúmero inicial del MDF-e (donde empieza la numeración)
serie_cteintSerie del CT-e
number_cteintNúmero inicial del CT-e (donde empieza la numeración)
serie_dceintSerie de la DC-e
number_dceintNúmero inicial de la DC-e (donde empieza la numeración)

* Campo obligatorio. Enviar cnpj devuelve error. Todos los demás campos son opcionales — envíe solo los que desea modificar.

Ejemplo de carga útil

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

Ejemplo — habilitar NFC-e y CT-e en la empresa

        {
          "company_id": "comp_789012",
          "csc_id": "000001",
          "csc": "ABCDEF0123456789",
          "serie_nfce": 1,
          "number_nfce": 1,
          "serie_cte": 1,
          "number_cte": 1
        }

Respuesta

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

Lista, con paginación, las empresas emisoras vinculadas a la cuenta de distribuidor (b2b). Parámetros vía query string.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken del distribuidor (b2b — la cuenta debe tener isb2b=true)
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–20)

* Campo obligatorio.

Ejemplo de llamada

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

Respuesta

        {
          "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
Detalles de la empresa autenticada

Devuelve los datos completos de la empresa identificada por el header token, incluida la lista de categorías fiscales registradas. No acepta body ni query string.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Ejemplo de llamada

GET /api/company/get_detail

Respuesta

        {
          "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 dirección por CEP

Resuelve un CEP brasileño devolviendo UF, código IBGE del municipio y datos de la dirección. Útil para rellenar direcciones de empresas y clientes. Requiere cuenta de distribuidor (b2b).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken del distribuidor (b2b — la cuenta debe tener isb2b=true)
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
cep *stringCEP brasileño (8 dígitos, con o sin guion)

* Campo obligatorio.

Ejemplo de llamada

GET /api/company/get_cep_detail?cep=01001000

Respuesta

        {
          "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 archivos de exportación mensual ya generados

Devuelve la lista de archivos de exportación mensual ya generados para la empresa en el año actual (timezone America/Sao_Paulo). Cada mes puede tener hasta 4 archivos: 1 planilla Excel (solo estado Success) + 3 XMLs (por estado Success, Canceled y Voided). Solo aparecen los archivos efectivamente exportados — use /api/invoice/get_xml para generar nuevos.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Ejemplo de llamada

GET /api/company/get_export_invoice_month_files

Respuesta

CampoTipoDescripción
files[]arrayLista de archivos disponibles
files[].urlstringURL del archivo en OSS
files[].yearintAño del periodo
files[].monthstringMes (1–12)
files[].typestringTipo de archivo: "xlsx" o "xml"
files[].statusstringEstado de las facturas en el archivo: "Success", "Canceled" o "Voided"
files[].createdatetimeCuándo se generó el archivo

Ejemplo de respuesta

        {
          "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 categorías de productos

Retorna todas las categorías disponibles para clasificación fiscal.

POST /api/invoice/create
Emitir nueva factura

Emite una NF-e (modelo 55). La empresa emisora se identifica mediante el header token; no envíe company_id en el cuerpo.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body — campos de nivel superior

CampoTipoDescripción
Identificación y operación
idstringID único del cliente para idempotencia (compone la clave de deduplicación)
nature_of_operation *stringNaturaleza de la operación (ej.: "Venta de mercancía")
transaction_type *stringTipo: "0"=entrada, "1"=salida, "2"=importación, "3"=exportación
model *stringModelo del documento: "55"=NF-e
issuance_type *stringTipo de emisión ("1"=normal, "9"=contingencia, etc.)
ambiente *string"1"=producción, "2"=homologación
finalidadestringFinalidad: "1"=normal, "2"=complementaria, "3"=ajuste, "4"=devolución
ref_nfe_chavestringClave de acceso de 44 dígitos de la NF-e referenciada (complementaria/ajuste/devolución)
is_reopenbooleanReabrir/sobrescribir una NF-e ya emitida
dh_sai_entstringFecha/hora de salida o entrada (ISO 8601). Por defecto: timestamp actual
Importes y descuentos
total_discount_amountdecimalDescuento total de la factura
trocodecimalVuelto (típico en NFC-e)
segurodecimalImporte de seguro (prorrateado entre productos como vSeg en XML)
outras_despesasdecimalOtros gastos (prorrateados entre productos como vOutro en XML)
Indicadores e información adicional
ind_finalstringConsumidor final: "0"=B2B, "1"=B2C
ind_presstringIndicador de presencia: "1"=presencial, "2"=internet, "3"=tele-atención, etc.
informacoes_complementaresstringInformación complementaria (escrita en infAdic.infCpl)
informacoes_fiscostringInformación para el fisco (escrita en infAdic.infAdFisco)

Body — cliente (objeto, obligatorio)

Para operaciones nacionales (transaction_type 0 o 1): cpf o cnpj, name, endereco, bairro (mín. 2 caracteres), city, uf y cep son obligatorios. Para importación/exportación (transaction_type 2 o 3): solo name es obligatorio.
CampoTipoDescripción
cpfstringCPF del cliente (alternativa a cnpj)
cnpjstringCNPJ del cliente (alternativa a cpf)
iestringInscripción Estatal (Inscrição Estadual)
name *stringRazón social / nombre del cliente
enderecostringDirección (calle)
complementostringComplemento de dirección
numerostringNúmero de dirección
bairrostringBarrio (mínimo 2 caracteres en operaciones nacionales)
citystringCiudad
ufstringEstado (UF) — se sobrescribe con el UF resuelto desde el CEP
cepstringCódigo postal (valida UF y ciudad)
telefonestringTeléfono
emailstringCorreo electrónico
id_estrangeirostringID extranjero (uso en importación/exportación)
c_paisintCódigo BACEN del país. Por defecto: 1058 (Brasil)
x_paisstringNombre del país. Por defecto: "BRASIL"

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

Cada producto requiere tributación: o bien category_id (referencia a una categoría fiscal pre-registrada), o el objeto impostos/tax_info con la configuración en línea.
CampoTipoDescripción
codigostringCódigo interno del producto
name *stringDescripción del producto (los caracteres CJK se eliminan)
ncm *stringNCM con 8 dígitos
ceststringCódigo CEST (obligatorio cuando aplica ICMS-ST)
gtinstringGTIN / código de barras
gtin_tributavelstringGTIN de la unidad tributable
count *decimalCantidad
unit *stringUnidad comercial (ej.: "UN", "KG", "MT")
unit_price *decimalPrecio unitario
total_price *decimalValor total del ítem
discount_pricedecimalDescuento aplicado al ítem
origem *intOrigen de la mercancía (0=Nacional, 1=Extranjera — importación directa, etc.)
indicador_total *intCompone el total de la NF-e: 0=no, 1=sí
category_idstringID de categoría fiscal pre-registrada (obligatorio si no envía impostos/tax_info)
impostosobjectConfiguración de tributos en línea (alternativa a category_id). Vea la estructura abajo
tax_infoobjectAlias de impostos (misma estructura)
disable_difalbooleanDesactiva el cálculo de DIFAL para este ítem
desconta_icms_pis_cofinsbooleanDescuenta el ICMS de la base de PIS/COFINS solo para este ítem (anula la categoría)
iiobjectImpuesto de Importación — obligatorio para CFOP 3.xxx. Vea la estructura abajo
import_declarationsarrayDeclaraciones de Importación (DI) — obligatorio cuando transaction_type="2". Vea la estructura abajo
nItemPedintÍtem del Pedido de Compra (I61). Número secuencial del ítem dentro del pedido referenciado en xPed (viene de id de raíz). Valores válidos: 1–999999. Default: omitido.

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

CampoTipoDescripción
industriastringIndustria/alícuota base (alias: aliquota)
icms
icms.codigo_cfopstringCFOP
icms.situacao_tributariastringCST/CSOSN del ICMS
icms.industriastringIndustria ICMS
icms.tipo_pessoastringTipo de persona (PF/PJ)
icms.codigo_beneficio_fiscalstringcBenef (código de beneficio fiscal)
ipi
ipi.codigo_enquadramentostringCódigo de encuadre legal del IPI
ipi.situacao_tributariastringCST IPI
ipi.aliquotastringAlícuota IPI
ipi.tipo_pessoastringTipo de persona
pis
pis.situacao_tributariastringCST PIS
pis.aliquotastringAlícuota PIS
pis.tipo_pessoastringTipo de persona
cofins
cofins.situacao_tributariastringCST COFINS
cofins.aliquotastringAlícuota COFINS
cofins.tipo_pessoastringTipo de persona
is (Impuesto Selectivo)
is.cenariostringEscenario IS
is.situacao_tributariastringCST IS
is.aliquotastringAlícuota IS
is.tipo_pessoastringTipo de persona
ibs_cbs (Reforma Tributaria)
ibs_cbs.situacao_tributariastringCST IBS/CBS
ibs_cbs.tipo_pessoastringTipo de persona
ibs_cbs.classificacao_tributariastringClasificación tributaria IBS/CBS
difal
difal.disable_difalbooleanDesactiva DIFAL para el ítem (alternativa al disable_difal en el producto)

Body — products[].ii (Impuesto de Importación)

CampoTipoDescripción
vBCdecimalBase de cálculo del II
vDespAdudecimalGastos aduaneros
vIIdecimalValor del II
vIOFdecimalValor del IOF

Body — products[].import_declarations[]

CampoTipoDescripción
nDIstringNúmero de DI
dDIstring (date)Fecha de DI
xLocDesembstringLugar de desaduanaje
UFDesembstringUF de desaduanaje
dDesembstring (date)Fecha de desaduanaje
cExportadorstringCódigo del exportador
tpViaTranspintVía de transporte internacional
tpIntermediointTipo de intermediación
vAFRMMdecimalValor del AFRMM
additionsarrayAdiciones de DI (campos: nAdicao, nSeqAdic, cFabricante, vDescDI, nDraw)

Body — shipping_address / delivery_address (objetos, opcionales)

shipping_address es el lugar de recogida (origen físico, si difiere del emisor). delivery_address es el lugar de entrega (destino físico, si difiere del cliente). Cuando están presentes, ambos requieren: cpf o cnpj, name, endereco, bairro (mín. 2 caracteres), city, uf y cep. Ambos objetos tienen la misma estructura.
CampoTipoDescripción
cpfstringCPF (alternativa a cnpj)
cnpjstringCNPJ (alternativa a cpf)
iestringInscripción Estatal
name *stringRazón social / nombre
endereco *stringDirección
complementostringComplemento
numberstringNúmero (atención: el campo es number, no numero)
bairro *stringBarrio
city *stringCiudad
uf *stringEstado
cep *stringCódigo postal
telefonestringTeléfono
emailstringCorreo electrónico

Body — transportation (objeto, opcional)

Si transportation se omite, el sistema asume transport_mode="9" (sin flete).
CampoTipoDescripción
transport_modestringModalidad del flete: "0"=por cuenta del emisor, "1"=por cuenta del destinatario, "2"=por cuenta de terceros, "3"=transporte propio del remitente, "4"=transporte propio del destinatario, "9"=sin flete
freight_amountdecimalValor total del flete
carrier_info — transportista
carrier_info.cpfstringCPF del transportista (alternativa a cnpj)
carrier_info.cnpjstringCNPJ del transportista (alternativa a cpf)
carrier_info.iestringInscripción Estatal
carrier_info.namestringRazón social
carrier_info.enderecostringDirección
carrier_info.citystringCiudad
carrier_info.ufstringEstado
carrier_info.cepstringCódigo postal
vehicle_info — vehículo
vehicle_info.platestringPlaca
vehicle_info.ufstringUF de la placa
vehicle_info.rntcstringRNTC (Registro Nacional de Transportistas de Carga)
trailer_info — remolque (misma estructura que vehicle_info)
trailer_info.platestringPlaca del remolque
trailer_info.ufstringUF
trailer_info.rntcstringRNTC
packages[] — volúmenes
packages[].qtyintCantidad
packages[].gross_weightdecimalPeso bruto
packages[].net_weightdecimalPeso neto
packages[].packaging_typestringEspecie
packages[].numberstringNumeración
packages[].markstringMarca
packages[].sealsarray<string>Precintos
transport_tax_retention_info — retención de ICMS sobre flete
transport_tax_retention_info.freight_service_amountdecimalValor del servicio de transporte
transport_tax_retention_info.tax_basedecimalBase de cálculo de la retención
transport_tax_retention_info.tax_ratedecimalAlícuota de la retención
transport_tax_retention_info.cfopstringCFOP
transport_tax_retention_info.cepstringCódigo postal

Body — pag_info[] (array, opcional)

Si se omite, el sistema asume [{ "payment_method": "01", "payment_indicator": "0" }] (efectivo, al contado).
CampoTipoDescripción
payment_method *stringForma de pago: "01"=efectivo, "02"=cheque, "03"=tarjeta de crédito, "04"=tarjeta de débito, "05"=crédito tienda, "10"=vale alimentación, "11"=vale comida, "15"=boleto, "17"=PIX, "90"=sin pago, "99"=otros
payment_indicator *stringIndicador: "0"=al contado, "1"=a plazo
payment_valuedecimalImporte pagado
card_info — datos de la tarjeta (para payment_method 03/04)
card_info.integration_type *stringTipo de integración de la terminal (obligatorio si card_info está presente)
card_info.brand_code *stringMarca de la tarjeta (obligatorio si card_info está presente)
card_info.acquirer_cnpjstringCNPJ de la adquirente
card_info.authorization_codestringCódigo de autorización

* Campo obligatorio.

Ejemplo 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 }
          ]
        }

Ejemplo completo (todos los 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 (paginado)

Lista las NF-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizada), "Canceled" (cancelada), "Voided" (inutilizada), "Processing" (en proceso), "InvoicingFailed" (fallo en la emisión), "Failed" (falló), "Contingencia" (contingencia offline), "Unknown" (desconocida)

* Campo obligatorio.

Ejemplo de llamada

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

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                "chave": "35210112345678901234567890123456789012345678",
                "status": "Success",
                "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 detalles de la NF-e

Devuelve los detalles de una NF-e específica por UUID o por clave de acceso. Incluye URL del XML, URLs del DANFE (completo, simplificado y de etiqueta) y metadatos.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
uuidstringUUID de la NF-e
chavestringClave de acceso de la NF-e (44 dígitos)

Informe uuid o chave (al menos uno). Si se envían ambos, uuid tiene prioridad.

Ejemplo de llamada

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

Respuesta

        {
          "success": true,
          "data": {
            "id": "pedido-2024-0001",
            "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
            "chave": "35210112345678901234567890123456789012345678",
            "serie": 1,
            "number": 100,
            "status": "Success",
            "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
Actualizar estado de la factura

Consulta el estado actual de la NF-e en SEFAZ y actualiza el registro local. Útil cuando la emisión quedó en procesamiento o contingencia.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
uuid *stringUUID de la NF-e a consultar

* Campo obligatorio.

Ejemplo de carga útil

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

Cancela una NF-e ya autorizada. La justificación enviada a SEFAZ es fija: "Erro no preenchimento da nota fiscal." — no se puede configurar mediante el payload.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
uuid *stringUUID de la NF-e a cancelar (identificador interno devuelto por /api/invoice/create)

* Campo obligatorio.

Ejemplo de carga útil

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
        }
POST /api/invoice/invalid
Inutilizar rango de numeración

Inutiliza un rango continuo de numeración de NF-e que nunca fue autorizado (no confundir con cancelación — la cancelación se aplica a facturas ya autorizadas). La operación queda registrada en SEFAZ y es irreversible.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
modelo *stringModelo del documento: "55"=NF-e, "65"=NFC-e. (Atención: el campo es modelo, no model)
ambiente *string"1"=producción, "2"=homologación
serie *intSerie de la numeración a inutilizar
start_number *intNúmero inicial del rango
end_number *intNúmero final del rango
motivo *stringJustificación de la inutilización (mínimo 15 caracteres por exigencia de SEFAZ)

* Campo obligatorio.

Ejemplo de carga útil

        {
          "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
Obtener DANFE (PDF) de la NF-e

Devuelve tres URLs del DANFE de una NF-e: el DANFE completo (PDF), el DANFE simplificado en PDF (formato cupón) y el DANFE simplificado en PNG (etiqueta/imagen). Los PDFs se generan bajo demanda a partir del XML autorizado y se cachean en OSS. En llamadas posteriores, si el estado de la factura no cambió, devuelve el caché existente; si el estado cambió (ej.: factura cancelada), los PDFs se regeneran.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body

CampoTipoDescripción
uuid ⚠stringUUID interno de la NF-e (devuelto por /api/invoice/create)
chave ⚠stringClave de acceso de la NF-e (44 dígitos)

uuid o chave, uno de los dos es obligatorio.

Ejemplo de payload

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

Respuesta

                {
                  "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 de la respuesta

CampoTipoDescripción
danfestringURL del PDF del DANFE completo (formato A4)
danfe_simplesstringURL del PDF del DANFE simplificado (formato cupón)
danfe_simples_pngstringURL del PNG del DANFE simplificado (etiqueta/imagen)

Respuestas de error

MensajeCausa
uuid/chave不能为空Ni uuid ni chave fueron enviados
发票不存在Factura no encontrada para el usuario del token, o XML autorizado faltante
发票详情不存在Detalle de la factura (con protocolo) no encontrado
获取PDF失败:<motivo>Fallo al generar el PDF a partir del XML
POST /api/invoice/get_xml
Exportar XML/Excel en lote (asíncrono)

Inicia una tarea asíncrona de exportación en lote de las facturas del usuario, filtrando por período y estado. Puede generar una hoja Excel (solo metadatos) o un paquete ZIP con los XMLs. La primera llamada crea la tarea y devuelve status: "Processing"; llamadas posteriores con los mismos parámetros devuelven el progreso hasta status: "Success", cuando el campo url contiene el enlace de descarga.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
type *stringFormato de salida: "excel" (hoja de metadatos) o cualquier otro valor (ej.: "xml") para ZIP con XMLs
statusstringFiltra por estado de la factura (ej.: "Success", "Canceled", "Voided"). Para type=excel, se convierte a minúsculas
monthintMes (1–12). Si se informa, sustituye start_create_time/end_create_time; usa zona horaria America/Sao_Paulo y año actual (o anterior si el mes es futuro)
start_create_timelongInicio del período (Unix timestamp en milisegundos)
end_create_timelongFin del período (Unix timestamp en milisegundos)

* Campo obligatorio.

Ejemplo de payload

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

Respuesta — procesando

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

Respuesta — concluido

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

Campos de la respuesta

CampoTipoDescripción
statusstring"Processing" mientras se ejecuta, "Success" cuando el archivo está listo
progress_countintCantidad de facturas ya procesadas
total_countintTotal de facturas a procesar
urlstringURL de descarga del archivo final (vacío mientras status = Processing)
Idempotencia: las tareas se deduplican por hash de los parámetros (uid + token + período + status + type). Llamadas repetidas con los mismos parámetros devuelven el progreso de la misma tarea, sin disparar nuevas ejecuciones.

Respuestas de error

MensajeCausa
发票类型字段不能为空type ausente
POST /api/invoice/consultar_status
Consultar estado de la NF-e/NFC-e en SEFAZ

Consulta el estado actual de una NF-e o NFC-e directamente en SEFAZ usando la clave de acceso (44 dígitos), vía el servicio NfeConsultaProtocolo4. Funciona tanto para facturas propias (emitidas por la empresa del token) como para facturas de terceros (ej.: capturadas vía DistDFe). El modelo (NF-e/NFC-e) se detecta automáticamente desde las posiciones 20-21 de la clave.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa (cuyo certificado se usará en la consulta)
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body

CampoTipoDescripción
chave *stringClave de acceso (44 dígitos numéricos). UF del emisor se extrae de las posiciones 0-1; modelo de las posiciones 20-21 (55=NF-e, 65=NFC-e).

* Campo obligatorio.

Ejemplo de carga útil

        {
          "chave": "35260512345678000199550010000000011000000018"
        }

Respuesta

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

Campos de la respuesta

CampoTipoDescripción
chavestringClave de acceso consultada
statusstringEstado normalizado (ver tabla abajo)
cstatintCódigo cStat bruto de SEFAZ
motivostringMensaje xMotivo bruto de SEFAZ

Mapeo de estados

statuscStat de SEFAZSignificado
autorizada100, 150NF-e autorizada para uso
cancelada101, 151Cancelada (también devuelto si hay un evento de cancelación vinculado, incluso con cStat=100)
denegada110, 301, 302Uso denegado por SEFAZ
inutilizada102Número inutilizado (rango de numeración)
nao_encontrada217NF-e no consta en la base de SEFAZ
desconhecidootroscStat no mapeado — consulte cstat y motivo brutos

Respuestas de error

MensajeCausa
chave inválida: deve ter 44 dígitosClave ausente, con tamaño diferente de 44 o conteniendo caracteres no numéricos
empresa não possui certificado configuradoLa empresa del token no tiene cert_file registrado
SEFAZ retornou resposta vaziaSEFAZ no devolvió respuesta (timeout, fuera del aire)
erro ao consultar SEFAZ: <detalle>Excepción al llamar al servicio (XML inválido, timeout, certificado expirado, etc.)
POST /api/category/create
Crear categoría fiscal

Crea una nueva categoría fiscal (plantilla de impuestos) vinculada a la empresa autenticada. Cada categoría agrega escenarios de ICMS, IPI, PIS, COFINS, y opcionalmente IBS/CBS e IS. Para editar una existente, use /api/category/edit.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body — nivel superior

CampoTipoDescripción
descricao *stringDescripción de la categoría fiscal
category_idstringID personalizado. Si se omite, se genera automáticamente como "TF" + número incremental
disable_difalbooleanDesactiva el cálculo de DIFAL para esta categoría. Default: false
desconta_icms_pis_cofinsbooleanDescuenta el ICMS de la base de cálculo de PIS/COFINS (base = vProd − vICMS). Default: false
icms[] *arrayEscenarios ICMS (estructura abajo)
ipi[] *arrayEscenarios IPI (estructura abajo)
pis[] *arrayEscenarios PIS (estructura abajo)
cofins[] *arrayEscenarios COFINS (estructura abajo)
ibs_cbs[]arrayEscenarios IBS/CBS — reforma tributaria (estructura abajo)
is[]arrayEscenarios IS — Impuesto Selectivo (estructura abajo)

Body — icms[]

CampoTipoDescripción
tipo_tributacao *stringTipo de tributación ICMS
cenario *stringEscenario (ej.: "saida_dentro_estado", "saida_fora_estado", "padrao")
tipo_pessoa *string"fisica" o "juridica"
codigo_cfop *stringCFOP
situacao_tributaria *stringCST/CSOSN del ICMS
nao_contribuintebooleanCliente no-contribuyente
aliquota_importacaostringAlícuota de importación
aliquota_creditodecimalAlícuota de crédito (% para Simples Nacional)
aliquota_diferimentodecimalPorcentaje de diferimiento
aliquota_diferimentoFcpstringDiferimiento de FCP (atención: el campo usa camelCase diferimentoFcp)
aliquota_reducaodecimalPorcentaje de reducción de base ICMS
aliquota_reducaoStdecimalPorcentaje de reducción de base ICMS-ST (atención: reducaoSt camelCase)
motivo_desoneracaostringCódigo del motivo de exoneración ICMS
motivo_desoneracaoStstringCódigo del motivo de exoneración ICMS-ST (atención: camelCase)
Alícuotas por estado — opcional
aliquota_mva[]arrayMVA por UF — ítems: { estado, aliquota }
aliquota_icms[]arrayAlícuota ICMS por UF — ítems: { estado, aliquota }
aliquota_icms_st[]arrayAlícuota ICMS-ST por UF — ítems: { estado, aliquota }
aliquota_fcp[]arrayAlícuota FCP por UF — ítems: { estado, aliquota }
aliquota_fcp_st[]arrayAlícuota FCP-ST por UF — ítems: { estado, aliquota }
beneficio_fiscal[]arrayCódigo de beneficio fiscal por UF — ítems: { estado, codigo }

Body — ipi[]

CampoTipoDescripción
cenario *stringEscenario
tipo_pessoa *string"fisica" o "juridica"
situacao_tributaria *stringCST IPI
codigo_enquadramento *stringCódigo de encuadre legal
aliquota *stringAlícuota IPI

Body — pis[] y cofins[] (misma estructura)

CampoTipoDescripción
cenario *stringEscenario
tipo_pessoa *string"fisica" o "juridica"
situacao_tributaria *stringCST PIS/COFINS
aliquota *stringAlícuota

Body — ibs_cbs[] (Reforma Tributaria)

CampoTipoDescripción
cenario *stringEscenario
tipo_pessoa *string"fisica" o "juridica"
situacao_tributaria *stringCST IBS/CBS
classificacao_tributaria *stringClasificación tributaria

Body — is[] (Impuesto Selectivo)

CampoTipoDescripción
cenario *stringEscenario
tipo_pessoa *string"fisica" o "juridica"
situacao_tributaria *stringCST IS
aliquota *stringAlícuota IS

* Campo obligatorio.

Ejemplo 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" }],
          "ibs_cbs":[{ "cenario": "padrao", "tipo_pessoa": "juridica", "situacao_tributaria": "000", "classificacao_tributaria": "000001" }]
        }

Respuesta

        {
          "success": true,
          "data": {
            "category_id": "TF123"
          }
        }
GET /api/category/get_detail
Detalles de la categoría fiscal

Devuelve la configuración completa de una categoría fiscal: todos los escenarios de ICMS, IPI, PIS, COFINS, IBS/CBS, incluidas las matrices por UF (MVA, alícuotas, beneficios fiscales).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
category_id *stringID de la categoría fiscal

* Campo obligatorio.

Ejemplo de llamada

GET /api/category/get_detail?category_id=TF123

Respuesta

        {
          "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 categorías fiscales

Lista las categorías fiscales de la empresa autenticada con paginación. Devuelve solo category_id y descricao de cada una — use /api/category/get_detail para la configuración completa.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)

* Campo obligatorio.

Ejemplo de llamada

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

Respuesta

        {
          "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 categoría fiscal

Edita una categoría fiscal existente. El cuerpo es idéntico al de /api/category/create, con la única diferencia de que category_id es obligatorio y debe corresponder a una categoría existente. El upsert reemplaza completamente las matrices icms, ipi, pis, cofins, ibs_cbs, is — envíe todos los escenarios actualizados (no hay merge por escenario).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

La estructura completa del body está documentada en /api/category/create. Solo category_id tiene un tratamiento diferente aquí:

CampoTipoDescripción
category_id *stringID de la categoría a editar (debe existir; en caso contrario devuelve error)
descricao *stringDescripción
icms[] *arrayEscenarios ICMS (reemplaza completamente)
ipi[] *arrayEscenarios IPI
pis[] *arrayEscenarios PIS
cofins[] *arrayEscenarios COFINS
ibs_cbs[]arrayEscenarios IBS/CBS (opcional)
is[]arrayEscenarios IS (opcional)
disable_difalbooleanDefault: false
desconta_icms_pis_cofinsbooleanDefault: false

* Campo obligatorio. Para los campos internos de cada array (icms[].codigo_cfop etc.), vea /api/category/create.

Respuesta

        {
          "success": true,
          "data": {
            "category_id": "TF123"
          }
        }
POST /api/category/delete
Eliminar categoría fiscal

Elimina una categoría fiscal de la empresa. Operación irreversible. Los productos vinculados a esta categoría seguirán referenciando el category_id eliminado, por lo que la emisión de NFe fallará — actualice los productos antes de eliminar.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
category_id *stringID de la categoría a eliminar

* Campo obligatorio.

Ejemplo de carga útil

        {
          "category_id": "TF123"
        }

Respuesta

        {
          "success": true
        }
POST /api/invoice/return
Emitir NF-e de devolución

Emite una NF-e de devolución (modelo 55, finalidad 4) a partir de una NF-e original. Se admiten dos modos: devolución total (referencia la factura original mediante uuid o chave — la devolución es un clon integral de la NF-e original) o devolución parcial/personalizada (envía chave + los campos completos de la factura en el propio body, misma estructura que /api/invoice/create).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body — campos de nivel superior

CampoTipoDescripción
uuidstringUUID de la NF-e original (devolución total; obligatorio si chave está ausente). Si se envía, la devolución es siempre total — los campos de la devolución parcial se ignoran
chavestringClave de 44 dígitos de la NF-e original (obligatoria en la devolución parcial; alternativa a uuid en la devolución total)
cfop *stringCFOP de la devolución (ej.: "1202", "1411", "2202", "5202", "5411", "6202")
natureza_operacaostringNaturaleza de la operación (ej.: "Devolução de venda"). Alias aceptado: nature_of_operation
transaction_typestringTipo de operación: "0"=entrada, "1"=salida (obligatorio en la devolución parcial). La devolución siempre se emite como entrada (tpNF=0)
modelstringModelo del documento: "55" (obligatorio en la devolución parcial)
issuance_typestringTipo de emisión: "1"=normal (obligatorio en la devolución parcial)
ambientestringAmbiente: "1"=producción, "2"=homologación (obligatorio en la devolución parcial)
clienteobjectDatos del destinatario, misma estructura que /api/invoice/create (obligatorio en la devolución parcial). Particularidad: el campo del número de dirección es number (en inglés), no numero. Sin number, la dirección sale con nro "S/N"; el código IBGE, la ciudad y la UF se resuelven por el cep
productsarrayÍtems devueltos, misma estructura que /api/invoice/create (obligatorio en la devolución parcial). codigo es opcional — si falta, el cProd usa el name

* Campo obligatorio. uuid O chave también es obligatorio (exactamente uno).

Automático en la devolución: el pago sale como 90 (Sin Pago) — pag_info se ignora; natureza_operacao vacía usa "Devolução de Mercadoria"; la tributación de los ítems (CST/CSOSN, PIS/COFINS, IPI, IBS/CBS) proviene de la categoría fiscal del category_id, según tipo de persona y escenario.

Ejemplo — devolución total

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

Ejemplo — devolución parcial (campos completos en el body)

        {
          "chave": "35210112345678901234567890123456789012345678",
          "cfop": "5202",
          "natureza_operacao": "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
            }
          ]
        }

code Ejemplos Completos de Emisión de Factura

Ejemplo Completo con Transporte

        {
          "nature_of_operation": "Venda de mercadoria",
          "transaction_type": "1",
          "model": "55",
          "issuance_type": "1",
          "ambiente": "2",
          "ind_final": "0",
          "ind_pres": "1",
          "cliente": {
            "cnpj": "12345678000199",
            "ie": "123456789",
            "name": "Empresa Cliente Ltda",
            "endereco": "Rua Exemplo",
            "number": "123",
            "complemento": "Sala 45",
            "bairro": "Centro",
            "city": "São Paulo",
            "uf": "SP",
            "cep": "01234567",
            "telefone": "11999999999",
            "email": "contato@empresa.com"
          },
          "products": [
            {
              "codigo": "PROD001",
              "name": "Smartphone XYZ",
              "ncm": "85171210",
              "cest": "2804000",
              "count": 2,
              "unit": "UN",
              "unit_price": 1500.00,
              "total_price": 3000.00,
              "category_id": "YOUR_CATEGORY_ID",
              "origem": "0",
              "indicador_total": "1"
            }
          ],
          "transportation": {
            "transport_mode": "0",
            "freight_amount": 30.00,
            "carrier_info": {
              "cnpj": "12345678000188",
              "name": "Transportadora Expressa",
              "endereco": "Rua da Transportadora",
              "city": "São Paulo",
              "uf": "SP"
            },
            "vehicle_info": {
              "plate": "ABC1234",
              "uf": "SP",
              "rntc": "123456"
            },
            "packages": [
              {
                "qty": 1,
                "packaging_type": "CX",
                "gross_weight": 2.500,
                "net_weight": 2.000
              }
            ]
          },
          "shipping_address": {
            "cnpj": "12345678000199",
            "name": "Remetente Ltda",
            "endereco": "Rua do Remetente",
            "number": "100",
            "bairro": "Centro",
            "city": "São Paulo",
            "uf": "SP",
            "cep": "01001000"
          },
          "delivery_address": {
            "cnpj": "98765432000111",
            "name": "Destinatário Ltda",
            "endereco": "Rua do Destinatário",
            "number": "200",
            "bairro": "Centro",
            "city": "Rio de Janeiro",
            "uf": "RJ",
            "cep": "20040020"
          },
          "pag_info": [
            {
              "payment_method": "03",
              "payment_indicator": "0",
              "card_info": {
                "integration_type": "1",
                "brand_code": "01"
              }
            }
          ],
          "informacoes_complementares": "Sem informações adicionais",
          "informacoes_fisco": "ICMS recolhido conforme legislação"
        }
💡 INFORMACIÓN: Este ejemplo incluye todos los campos importantes, incluyendo transporte, información fiscal detallada y pago. Adapte los valores según su necesidad específica.

Ejemplo Completo Importación

        {
          "id": "PED-IMP-001",
          "nature_of_operation": "Importacao para revenda",
          "transaction_type": "2",
          "model": "55",
          "issuance_type": "1",
          "ambiente": "1",
          "finalidade": "1",
          "ind_final": "0",
          "ind_pres": "9",
          "cliente": {
            "name": "EXPORTADOR EXTERIOR CO LTD",
            "endereco": "Pudong District",
            "numero": "456",
            "city": "Shanghai",
            "id_estrangeiro": "CN-EXP-001",
            "c_pais": 1600,
            "x_pais": "CHINA"
          },
          "products": [
            {
              "name": "Fonte chaveada 12V 2A Quickfitting",
              "codigo": "123450000888",
              "ncm": "85044090",
              "count": 2,
              "unit": "PC",
              "unit_price": 0.25,
              "total_price": 0.50,
              "origem": 1,
              "indicador_total": "1",
              "category_id": "YOUR_CATEGORY_ID",
              "import_declarations": [
                {
                  "nDI": "2312345678",
                  "dDI": "2026-04-12",
                  "xLocDesemb": "PORTO DE SANTOS",
                  "UFDesemb": "SP",
                  "dDesemb": "2026-04-15",
                  "tpViaTransp": 1,
                  "vAFRMM": 0.01,
                  "tpIntermedio": 1,
                  "cExportador": "EXP-CN-001",
                  "additions": [
                    {
                      "nAdicao": 1,
                      "nSeqAdic": 1,
                      "cFabricante": "FAB-CN-001",
                      "vDescDI": 0,
                      "nDraw": ""
                    }
                  ]
                }
              ]
            },
            {
              "name": "Quick fitting MA",
              "codigo": "123450000157",
              "ncm": "85044090",
              "count": 2,
              "unit": "PC",
              "unit_price": 0.25,
              "total_price": 0.50,
              "origem": 1,
              "indicador_total": "1",
              "category_id": "YOUR_CATEGORY_ID",
              "ii": {
                "vBC": 0.50,
                "vDespAdu": 0.00,
                "vII": 0.00,
                "vIOF": 0.00
              },
              "import_declarations": [
                {
                  "nDI": "2312345678",
                  "dDI": "2026-04-12",
                  "xLocDesemb": "PORTO DE SANTOS",
                  "UFDesemb": "SP",
                  "dDesemb": "2026-04-15",
                  "tpViaTransp": 1,
                  "vAFRMM": 1.00,
                  "tpIntermedio": 1,
                  "cExportador": "EXP-CN-001",
                  "additions": [
                    {
                      "nAdicao": 1,
                      "nSeqAdic": 2,
                      "cFabricante": "FAB-CN-001",
                      "vDescDI": 0,
                      "nDraw": ""
                    }
                  ]
                }
              ]
            }
          ],
          "pag_info": [
            {
              "payment_method": "90",
              "payment_indicator": "0"
            }
          ]
        }
💡 INFORMACIÓN: Ejemplo para NFe de Importación (CFOP 3.xxx). Diferencias respecto a una NFe nacional:
  • transaction_type: "2" — operación de entrada (importación).
  • cliente sin cnpj/cpf/uf/cep; usa id_estrangeiro, c_pais (tabla BACEN — China = 1600) y x_pais.
  • category_id debe apuntar a una categoría fiscal con CFOP 3.xxx y CST/CSOSN compatibles con importación.
  • origem del producto = 1 (extranjera — importación directa) o 2 (extranjera — adquirida en el mercado interno).
  • El bloque ii (Impuesto de Importación) es obligatorio cuando el CFOP es 3.xxx. Los valores provienen de la DI emitida por el despachante aduanero (vBC, vDespAdu, vII, vIOF). Puede ser cero en pruebas.
  • El bloque import_declarations (Declaración de Importación) contiene datos del despacho aduanero: nDI, dDI, lugar/UF/fecha de despacho, vía de transporte, intermediario, exportador y adiciones.
  • vAFRMM es obligatorio cuando tpViaTransp = 1 (Marítima).

percent Parámetros Tributarios Detallados

scale_balance Parámetros ICMS
Escenario de Tributación
padrao saida_fora_estado saida_dentro_estado entrada_fora_estado entrada_dentro_estado
Situación Tributaria (CST)
00: Tributada integralmente
02: Tributada exenta
10: Tributada con cobro del ICMS
20: Con reducción de base de cálculo
30: Exenta o no tributada
40: Exenta
41: No tributada
50: Suspensión
51: Diferimiento
60: ICMS cobrado anteriormente
70: Reducción y cobro
90: Otras
pie_chart Parámetros PIS/COFINS
Escenario de Tributación
padrao saida_fora_estado saida_dentro_estado entrada_fora_estado entrada_dentro_estado
Situación Tributaria (CST)
01: Operación Tributable (alícuota normal)
02: Operación Tributable (alícuota diferenciada)
03: Operación Tributable (exenta)
04: Operación Tributable (suspensión)
05: Operación Tributable (ST)
06: Operación Tributable (alícuota cero)
07: Operación Exenta de la Contribución
08: Operación sin Incidencia de la Contribución
09: Operación con Suspensión de la Contribución
49: Otras Operaciones de Salida
50: Derecho a crédito (operaciones propias)
51: Derecho a crédito (adquisiciones)
52: Asiento a crédito
53: Asiento a débito
54: Asiento a crédito (extemporáneo)
55: Asiento a débito (extemporáneo)
56: Crédito Presunto
60: Crédito Presunto (adquisiciones)
61: Crédito Presunto (importación)
62: Crédito Presunto (actividad rural)
63: Crédito Presunto (otras)
64: Crédito Presunto (no generador)
65: Crédito Presunto (sustitución)
66: Crédito Presunto (sustitución)
67: Crédito Presunto (exportación)
70: Operación de Adquisición sin Derecho a Crédito
71: Operación de Adquisición con Exención
72: Operación de Adquisición con Suspensión
73: Operación de Adquisición a Alícuota Cero
74: Operación de Adquisición sin Incidencia
75: Operación de Adquisición por Sustitución
98: Otras Operaciones de Entrada
99: Otras Operaciones
💡 INFORMACIÓN: Los campos tipo_pessoa aceptan valores fisica (persona física) o juridica (persona jurídica). Para PIS/COFINS, el campo aliquota debe ser formateado como string con dos decimales (ej: "1.65").

credit_card Parámetros de Pago

Indicador de Pago
0 Al contado
1 A plazos
Métodos de Pago
01 Efectivo
02 Cheque
03 Tarjeta de Crédito
04 Tarjeta de Débito
05 Crédito Tienda
10 Vale Alimentación
11 Vale Comida
12 Vale Regalo
13 Vale Combustible
15 Boleto Bancario
90 Sin Pago
99 Otros
Banderas de Tarjeta
01 Visa
02 Mastercard
03 American Express
04 Sorocred
05 Diners Club
06 Elo
07 Hipercard
08 Aura
09 Cabal
99 Otros

bug_report Solución de Problemas con XML

warning Rechazo 225 - Fallo en el Schema XML

Ocurre cuando intenta cancelar, descargar XML, inutilizar número o hacer manifestación de una NF-e que no fue registrada con éxito en la base de datos de la SEFAZ.

1
Verificar si la NF-e fue autorizada (estado "Autorizada")
2
Reemitir la NF-e si no fue autorizada
3
Inutilizar número si no fue utilizado
lightbulb Validación Online de la SEFAZ

Use el validador oficial para identificar problemas en el XML:

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

Problemas comunes: Dirección incompleta, NCM inválido, formato de valores incorrecto, campos obligatorios ausentes.

error Códigos de Error de la SEFAZ

Código Descripción Solución
217 Fecha de emisión muy atrasada Emitir en contingencia o regularizar
404 CNPJ/CPF del destinatario inválido Verificar documento del cliente
563 CFOP no permitido para la operación Revisar CFOP de la operación
POST /api/nfce/company/create
Registrar empresa para NFC-e

Registra (o actualiza) una empresa para la emisión de NFC-e. Razón social, IE, dirección y otros datos se extraen automáticamente vía SintegraWS a partir del CNPJ. Si el CNPJ ya existe para el usuario, se actualizan los campos NFC-e y se devuelve la empresa existente.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken del distribuidor (b2b)
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
cnpj *stringCNPJ de la empresa emisora
cert_file *stringURL HTTPS del certificado digital A1 (.pfx o .p12)
cert_pwd *stringContraseña del certificado
csc_id *stringID del CSC (Código de Seguridad del Contribuyente) en SEFAZ
csc *stringToken CSC (secreto compartido con SEFAZ)
serie_nfceintSerie de la NFC-e
number_nfceintNúmero inicial de NFC-e
telefonestringTeléfono de la empresa

* Campo obligatorio. Los demás datos (nombre, IE, dirección, etc.) se extraen automáticamente vía SintegraWS desde el CNPJ.

Ejemplo de carga útil

        {
          "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"
        }

Respuesta

        {
          "success": true,
          "message": "Empresa cadastrada para NFC-e",
          "data": {
            "company_id": "comp_789012",
            "token": "eyJhbGciOiJIUzI1NiIs..."
          }
        }
POST /api/nfce/company/update
Actualizar datos de la empresa NFC-e

Actualiza la empresa NFC-e identificada por el header token. Todos los campos del body son opcionales — envíe solo los que desee modificar. Al actualizar cep, el sistema resuelve automáticamente stateCode e ibge. Cuando cert_file y cert_pwd vienen juntos, el certificado se valida antes de guardar.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body (todos los campos opcionales — envíe ≥ 1)

CampoTipoDescripción
Identificación
namestringRazón social
aliasstringNombre comercial
iestringInscripción Estatal
invoice_typestringRégimen tributario
emailstringCorreo electrónico
telefonestringTeléfono
Dirección
cepstringCódigo postal (actualiza automáticamente stateCode e ibge)
addressstringDirección
house_numberstringNúmero
complementostringComplemento
townstringBarrio
citystringCiudad
statestringUF
NFC-e
csc_idstringID del CSC
cscstringToken CSC
serie_nfceintSerie
number_nfceintPróximo número
cert_filestringURL HTTPS del nuevo certificado A1 (.pfx o .p12)
cert_pwdstringContraseña del certificado

Al menos 1 campo en el body es obligatorio. CNPJ es inmutable.

Ejemplo de carga útil

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

Respuesta

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

Devuelve los datos de la empresa NFC-e identificada por el header token. Atención: el método es POST pero no hay campos en el body — la empresa se resuelve solo por el token.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

Vacío. Puede enviarse {}.

Respuesta

        {
          "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
          }
        }

Gestión de Categorías Fiscales NFC-e

Las categorías fiscales definen las reglas tributarias aplicadas a los productos al emitir NFC-e. A diferencia de la NFe, la NFC-e solo opera con ventas intraestatales, por lo que la estructura es simplificada: un solo objeto por impuesto, sin necesidad de múltiples escenarios.

Nota: Las categorías NFC-e se almacenan por separado de las categorías NFe. Cada categoría incluye configuraciones de ICMS, PIS, COFINS e IBS/CBS. Todos los endpoints de esta sección requieren los headers token, sign y timestamp.
POST /api/nfce/category/create
Crear categoría fiscal NFC-e

Crea una categoría fiscal NFC-e. Cada categoría tiene un único escenario (salida interna) y usa objetos planos para ICMS, PIS, COFINS e IBS/CBS (sin array, ya que NFC-e no permite múltiples escenarios por categoría). No incluye IPI.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body (raíz)

CampoTipoDescripción
descricao *stringDescripción de la categoría
codigo_cfop *stringCódigo CFOP (ej.: 5102, 5405)
icms *objectConfiguración de ICMS (objeto plano)
pis *objectConfiguración de PIS (objeto plano)
cofins *objectConfiguración de COFINS (objeto plano)
ibs_cbsobjectConfiguración de IBS/CBS (Reforma Tributaria, opcional)

icms

CampoTipoDescripción
situacao_tributaria *stringCST/CSOSN (ej.: 102, 500)
aliquota_reducaodecimalPorcentaje de reducción de base
motivo_desoneracaostringCódigo del motivo de exoneración
aliquota_icmsarrayAlícuotas por estado: [{ "estado": "SP", "aliquota": 18.00 }]
aliquota_fcparrayFCP por estado: [{ "estado": "SP", "aliquota": 0.00 }]
beneficio_fiscalarrayBeneficio fiscal por estado: [{ "estado": "SP", "codigo": "SP800001" }]

pis / cofins

CampoTipoDescripción
situacao_tributaria *stringCST PIS/COFINS
aliquota *stringAlícuota porcentual (ej.: "0.00", "1.65", "7.60")

ibs_cbs (opcional)

CampoTipoDescripción
situacao_tributaria *stringCST IBS/CBS
classificacao_tributaria *stringCódigo de clasificación tributaria

* Campo obligatorio.

Ejemplo 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"
          }
        }

Respuesta

        {
          "success": true,
          "data": {
            "category_id": "TF00001"
          }
        }
GET /api/nfce/category/get_detail
Obtener detalles de la categoría fiscal NFC-e

Devuelve los datos completos de una categoría fiscal NFC-e (descripción, CFOP, ICMS, PIS, COFINS y IBS/CBS).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Query string

CampoTipoDescripción
category_id *stringID de la categoría NFC-e

* Campo obligatorio.

Ejemplo de solicitud

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

Respuesta

        {
          "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 categorías fiscales NFC-e

Devuelve una lista paginada de categorías fiscales NFC-e registradas para la empresa autenticada.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Query string

CampoTipoDescripción
page *intNúmero de página (mínimo 1)
page_size *intÍtems por página (1 a 50)

* Campo obligatorio.

Ejemplo de solicitud

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

Respuesta

        {
          "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 categoría fiscal NFC-e
Nota: Misma estructura que el endpoint /api/nfce/category/create, con el campo adicional obligatorio category_id. Los campos icms, pis, cofins y ibs_cbs se reemplazan íntegramente (no se fusionan).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Campo adicional

CampoTipoDescripción
category_id *stringID de la categoría a editar

* Campo obligatorio.

Ejemplo 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"
          }
        }

Respuesta

        {
          "success": true,
          "data": {
            "category_id": "TF00001"
          }
        }
POST /api/nfce/category/delete
Eliminar categoría fiscal NFC-e

Elimina una categoría fiscal NFC-e. Operación irreversible. Los productos vinculados a esta categoría seguirán referenciando el category_id eliminado — actualícelos primero.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
category_id *stringID de la categoría NFC-e a eliminar

* Campo obligatorio.

Ejemplo de carga útil

        {
          "category_id": "TF123"
        }

Respuesta

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

Emite una NFC-e (modelo 65, siempre salida interna al estado, sin flete). Diferencias clave respecto al endpoint de NFe: el objeto del consumidor se llama client (no cliente); el número del domicilio es client.number; el consumidor es opcional; no existen impostos.ipi, shipping_address, delivery_address ni transportation. El campo de valor en pag_info se llama amount.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa NFC-e
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body (raíz)

CampoTipoDescripción
nature_of_operation *stringNaturaleza de la operación (ej.: "Venta de mercadería")
issuance_type *stringTipo de emisión: "1" (normal), "9" (contingencia off-line NFC-e)
ambiente *string"1" producción, "2" homologación
products *arrayLista de productos (ver detalles abajo)
idstringIdentificador externo
ind_presstringPresencia del comprador: "1" presencial (default), "4" entrega a domicilio, "5" presencial fuera del establecimiento, "9" no aplica
ind_intermedstring"0" sin intermediario, "1" marketplace. Obligatorio cuando ind_pres = 2, 3 o 4
total_discount_amountdecimalDescuento total de la factura
trocodecimalValor del vuelto
segurodecimalValor del seguro
outras_despesasdecimalOtros gastos accesorios
informacoes_complementaresstringInformación complementaria al consumidor
informacoes_fiscostringInformación de interés fiscal
clientobjectDatos del consumidor (opcional — ver tabla)
pag_infoarrayPagos (default: dinero al contado — ver tabla)

client (opcional)

Complete solo si el consumidor está identificado. CPF o CNPJ deben enviarse solo con dígitos.

CampoTipoDescripción
cpfstringCPF (define persona física)
cnpjstringCNPJ (persona jurídica)
iestringInscripción estatal
namestringNombre / razón social
enderecostringDirección
numberstringNúmero del domicilio (atención: distinto de la NFe, que usa numero)
complementostringComplemento
bairrostringBarrio
citystringCiudad
ufstringUF (validada por el CEP, si se informa)
cepstringCódigo postal (solo dígitos)
telefonestringTeléfono
emailstringE-mail

products[] (cada ítem)

CampoTipoDescripción
name *stringNombre del producto (caracteres CJK se eliminan)
ncm *stringNCM (8 dígitos)
count *decimalCantidad
unit *stringUnidad comercial (ej.: "UN", "KG")
unit_price *decimalPrecio unitario
total_price *decimalValor total del ítem
origem *intOrigen de la mercadería (0..8)
indicador_total *int1 = compone el total de la factura; 0 = no compone
category_id ⚠stringID de categoría fiscal NFC-e (obligatorio si no envía impostos)
impostos ⚠objectImpuestos manuales (alternativa a category_id; sin IPI)
tax_info ⚠objectAlias de impostos (misma estructura). Solo se usa si impostos está ausente
codigostringCódigo interno del producto
ceststringCEST
gtinstringGTIN/EAN comercial
gtin_tributavelstringGTIN tributable
discount_pricedecimalDescuento del ítem
nItemPedintÍtem del Pedido de Compra (I61). Número secuencial del ítem dentro del pedido referenciado en xPed (viene de id de raíz). Valores válidos: 1–999999. Default: omitido.

pag_info[] (cada ítem)

CampoTipoDescripción
payment_indicator *string"0" contado, "1" a crédito
payment_method *stringForma de pago (01=efectivo, 03=tarjeta crédito, 04=tarjeta débito, 17=PIX, 99=otros, etc.)
amountdecimalMonto pagado en esta forma
card_info.integration_typestring"1" integrado, "2" no integrado (obligatorio para tarjeta 03/04)
card_info.brand_codestringMarca de la tarjeta (obligatorio para tarjeta 03/04)
card_info.acquirer_cnpjstringCNPJ del adquirente
card_info.authorization_codestringCódigo de autorización

* Campo obligatorio. ⚠ category_id, impostos o tax_info, uno de los tres es obligatorio.

Ejemplo 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
            }
          ]
        }

Ejemplo completo (todos los 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"
              }
            }
          ]
        }

Respuesta

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

Cancela una NFC-e ya autorizada. A diferencia de la NFe, aquí el motivo de la cancelación lo proporciona el cliente y se envía a SEFAZ. La ventana de cancelación en SEFAZ es corta (normalmente 15-30 minutos tras la autorización).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chave *stringClave de 44 dígitos de la NFC-e (atención: aquí es chave, no uuid como en otros endpoints)
motivo *stringJustificación de la cancelación (mínimo 15 caracteres por exigencia SEFAZ)

* Campo obligatorio.

Ejemplo de carga útil

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

Devuelve los detalles de una NFC-e específica por UUID. Incluye URLs del XML y del DANFE (cupón térmico), además de los datos del cliente cuando se proporcionan.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
uuid *stringUUID de la NFC-e

* Campo obligatorio.

Ejemplo de llamada

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

Respuesta

        {
          "success": true,
          "data": {
            "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
            "chave": "35210112345678901234650010000000051234567890",
            "serie": 1,
            "number": 5,
            "status": "Success",
            "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
Generar / obtener DANFE NFC-e (cupón térmico)

Devuelve la URL del DANFE NFC-e (cupón fiscal electrónico) en PDF, con código QR para consulta en SEFAZ. Generación bajo demanda con caché por hash (clave + estado); las llamadas repetidas devuelven la URL existente.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
uuid *stringUUID de la NFC-e (atención: aquí es uuid, a diferencia de cancel que usa chave)

* Campo obligatorio.

Ejemplo de carga útil

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
        }

Respuesta

        {
          "success": true,
          "data": {
            "danfe": "https://oss.example.com/.../chave_nfce.pdf"
          }
        }
GET /api/nfce/get_list
Listar NFC-e (paginado)

Lista las NFC-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizada), "Canceled" (cancelada), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocida)

* Campo obligatorio.

Ejemplo de llamada

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

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                "chave": "35260112345678000190650010000000011000000017",
                "serie": 1,
                "number": 1,
                "status": "Success",
                "create": "2026-01-10T10:30:00Z",
                "issue_time": "2026-01-10T10:31:00Z"
              }
            ],
            "page": 1,
            "total": 142,
            "total_pages": 8
          }
        }

codeEjemplos Completos NFC-e

Ejemplo 1 — Venta Presencial (sin destinatario)

        {
          "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" }
          ]
        }

Ejemplo 2 — Entrega a Domicilio (con destinatario)

        {
          "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 / Complementaria

La NFe Complementaria y la NFe de Ajuste son facturas fiscales emitidas para corregir valores fiscales de una factura ya autorizada. A diferencia de la CC-e, que solo corrige datos de registro, estas facturas permiten alterar valores de impuestos, cantidades y precios.

NFe Complementaria (finalidade = 2):
  • Utilizada para agregar valores que fueron informados de menos en la factura original
  • Complemento de precio, cantidad o valor del impuesto
  • Ejemplo: se emitio factura con ICMS del 12% pero lo correcto era 18% — se emite complementaria con la diferencia
NFe de Ajuste (finalidade = 3):
  • Utilizada para ajustes fiscales diversos previstos en la legislacion
  • Ajuste de inventario, transferencia de credito, regularizacion fiscal
  • Ejemplo: ajuste de ICMS por liquidacion, transferencia de credito entre sucursales
Importante:
  • Ambas son facturas fiscales nuevas — generan nueva clave de acceso y nuevo numero
  • Deben referenciar la factura original por el campo ref_nfe_chave (clave de 44 digitos)
  • La factura original necesita estar autorizada
  • Consumen 1 credito cada una (como una emision normal)

Autenticacion

Utiliza el mismo endpoint y autenticacion de la emision de NFe:

HeaderTipoDescripcion
token string Token de la empresa (obtenido en el registro)
sign string Firma MD5: MD5(token + path + body + timestamp)
timestamp string Unix timestamp en segundos (ventana de 5 minutos)

description NFS-e - Factura Electronica de Servicios

La API de NFS-e permite emitir, cancelar y consultar Facturas Electronicas de Servicio. El sistema detecta automaticamente el municipio de la empresa y enruta a la API correcta:

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

El integrador no necesita preocuparse por cual API usar - solo envie los datos y el sistema enruta automaticamente por el codigo IBGE del municipio registrado en la empresa.

EndpointMetodoDescripcion
/api/nfse/createPOSTEmitir NFS-e
/api/nfse/cancelPOSTCancelar NFS-e
/api/nfse/get_danfsePOSTObtener DANFSE (PDF)
/api/nfse/get_xmlPOSTDescargar XML
POST /api/nfs/company/create
Registrar empresa para emisión de NFS-e

Registra (o actualiza) una empresa para emisión de NFS-e. Si el CNPJ ya existe para el usuario, solo los campos NFS-e y el certificado se actualizan; de lo contrario, se crea una nueva empresa y se devuelve un token dedicado. Atención al path: /api/nfs/... (sin la "e"), distinto de los demás endpoints NFS-e.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken B2B del integrador
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
cnpj *stringCNPJ de la empresa (solo dígitos)
name *stringRazón social
cep *stringCódigo postal (solo dígitos)
address *stringDirección
house_number *stringNúmero del domicilio
town *stringBarrio
city *stringCiudad
state *stringUF (2 dígitos, ej.: "SP")
cert_file *stringURL del certificado digital A1 (.pfx)
cert_pwd *stringContraseña del certificado digital
im *stringInscripción Municipal
codigo_municipio_nfse *stringCódigo IBGE del municipio emisor
codigo_servico_nfse *stringCódigo de servicio por defecto (LC 116)
aliasstringNombre comercial
iestringInscripción estatal
invoice_typestringRégimen tributario
unitstringUnidad / sucursal
emailstringE-mail de contacto
telefonestringTeléfono
complementostringComplemento del domicilio
cnae_nfsestringCNAE de la actividad por defecto
serie_nfseintSerie inicial de la NFS-e
number_nfseintNúmero inicial de la NFS-e
regime_especial_tributacaointCódigo del régimen especial de tributación
optante_simples_nacionalboolOptante por Simples Nacional

* Campo obligatorio.

Ejemplo 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
        }

Respuesta

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

Nota: El token devuelto debe usarse en las demás llamadas NFS-e (/api/nfse/create, /cancel, /get_danfse, /get_xml). Si la empresa ya existe, el mensaje será "Empresa atualizada para NFS-e" y el token devuelto es el existente.

POST /api/nfse/create
Emitir NFS-e

Headers obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana 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 Principales

CampoTipoDescripcion
ambientestring"1" = Produccion, "2" = Homologacion
idstringID de referencia externa (opcional)
descricao_servicostringDescripcion del servicio prestado (obligatorio)
valor_servicodecimalValor total del servicio en R$ (obligatorio)
aliquota_issdecimalAlicuota ISS en % (ej: 2.90)
iss_retidobooleanfalse = No retenido, true = Retenido por el tomador
valor_issdecimalOverride del valor del ISS. Si mayor que 0, sustituye el calculo automatico (base_calculo x aliquota_iss div 100). Default: calculado automaticamente
codigo_servicostringCodigo del servicio. Si vacio, usa el predeterminado de la empresa
cnaestringCNAE. Si vacio, usa el predeterminado de la empresa
tomadorobjectDatos del tomador del servicio (obligatorio)

Tomador - Campos

CampoTipoDescripcion
cnpjstringCNPJ del tomador (solo numeros)
cpfstringCPF del tomador (usar cnpj O cpf)
namestringNombre/Razon Social (obligatorio)
emailstringEmail del tomador
telefonestringTelefono
cepstringCodigo postal (obligatorio)
enderecostringDireccion (obligatorio)
numerostringNumero (obligatorio)
complementostringComplemento
bairrostringBarrio (obligatorio)
citystringCiudad
ufstringEstado (2 digitos)
codigo_municipiostringCodigo IBGE del municipio

Respuesta Exitosa

        {
          "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 obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Payload

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

Campos

CampoTipoDescripcion
chavestringCodigo de verificacion de la NFS-e (obligatorio)
motivostringMotivo de la cancelación (obligatorio)

Respuesta Exitosa

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

Headers obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Payload

        {
          "chave": "Z685RI9C"
        }

Campos

CampoTipoDescripcion
chavestringCodigo de verificacion de la NFS-e (obligatorio)

Respuesta

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

Nota: Para Paulistana (SP), retorna la URL directa del PDF de la prefectura. Para API Nacional, retorna el PDF en base64.

POST /api/nfse/get_xml
Descargar XML de NFS-e

Headers obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5
timestampstringUnix timestamp en segundos

Payload

        {
          "chave": "Z685RI9C"
        }

Campos

CampoTipoDescripcion
chavestringCodigo de verificacion de la NFS-e (obligatorio)

Respuesta

        {
          "success": true,
          "data": {
            "dpsXml": "https://tffiscal-file.tffiscal.com/123/12345678000190/nfse/Z685RI9C_dps.xml",
            "nfseXml": "https://tffiscal-file.tffiscal.com/123/12345678000190/nfse/Z685RI9C_nfse.xml"
          }
        }

dpsXml: Enlace (URL en OSS) al XML enviado a la prefectura/ADN. nfseXml: Enlace al XML de retorno con el resultado de la emision. Los XML se suben al OSS en la primera consulta y la URL queda en cache.

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

Headers obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana 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 especificos

CampoTipoDescripcion
finalidadestring"2" para Complementaria (obligatorio)
ref_nfe_chavestringClave de acceso de la factura original — 44 digitos (obligatorio)
Nota: Los demas campos siguen el mismo patron del endpoint /api/invoice/create para emision normal. Consulte la documentacion de emision de NFe para detalles de todos los campos.
Pago: En facturas complementarias, el pago generalmente es "90" (Sin Pago) pues se trata solo de complemento de valores fiscales.

Respuesta Exitosa

        {
          "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 obligatorios

HeaderTipoDescripcion
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana 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 especificos

CampoTipoDescripcion
finalidadestring"3" para Ajuste (obligatorio)
ref_nfe_chavestringClave de acceso de la factura original — 44 digitos (obligatorio)
Valores de finalidade disponibles:
ValorDescripcion
1Normal (predeterminado)
2Complementaria
3Ajuste
4Devolucion
Diferencia entre Complementaria y Ajuste:
  • Complementaria (2): Complementa valores de la factura original (precio, impuesto, cantidad informados de menos)
  • Ajuste (3): Ajustes fiscales previstos en la legislacion (regularizacion, transferencia de credito, ajuste de inventario)

edit_note CC-e — Carta de Correccion Electronica

La CC-e (Carta de Correccion Electronica) es un evento vinculado a la NF-e que permite corregir informacion de la factura fiscal ya autorizada, sin alterar valores fiscales. Regulada por el Ajuste SINIEF 01/07.

Que se puede corregir via CC-e:
  • Direccion del destinatario o del emisor
  • Razon social del destinatario (sin alterar CNPJ/CPF)
  • Codigo fiscal de operacion (CFOP), siempre que no cambie la naturaleza de los impuestos
  • Descripcion de la mercancia
  • Datos adicionales e informaciones complementarias
Que NO se puede corregir via CC-e:
  • Valores fiscales (base de calculo, alicuota, valor del impuesto)
  • Cantidad y valor de la mercancia
  • CNPJ/CPF del emisor o destinatario
  • Datos que alteren el calculo de los impuestos
Reglas:
  • Solo facturas con estado autorizada (Success) pueden recibir CC-e
  • El texto de correccion debe tener entre 15 y 1000 caracteres
  • Es posible emitir hasta 20 CC-e para la misma factura fiscal
  • Cada CC-e consume 1 credito

Autenticacion

Todos los endpoints CC-e utilizan la misma autenticacion de la API principal:

HeaderTipoDescripcion
token string Token de la empresa (obtenido en el registro)
sign string Firma MD5: MD5(token + path + body + timestamp)
timestamp string Unix timestamp en segundos (ventana de 5 minutos)
POST /api/invoice/cce/send
Enviar Carta de Corrección (CC-e)

Envía una CC-e (evento 110110) a SEFAZ para corregir datos de una NF-e ya autorizada. La secuencia (nSeqEvento) se calcula automáticamente — no la envíe. Solo se pueden corregir datos no fiscales (no corrige importes, CNPJ, IE, etc.).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
uuidstringUUID de la NF-e (obligatorio si chave está ausente)
chavestringClave de 44 dígitos de la NF-e (obligatorio si uuid está ausente)
correcao *stringTexto de la corrección (límite SEFAZ: 15–1000 caracteres)

* Campo obligatorio. Al menos uno entre uuid y chave también es obligatorio.

Ejemplo de carga útil

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

Respuesta

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

Devuelve todas las CC-e (Cartas de Corrección) emitidas para una NF-e específica, ordenadas de la más reciente a la más antigua.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
uuidstringUUID de la NF-e (obligatorio si chave está ausente)
chavestringClave de 44 dígitos de la NF-e (obligatorio si uuid está ausente)

Al menos uno entre uuid y chave es obligatorio.

Ejemplo de carga útil

        {
          "uuid": "65f8b9a1c2d3e4f5a6b7c8d9"
        }

Respuesta

        {
          "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
Descargar PDF de la CC-e

Devuelve la URL del PDF de la CC-e. El PDF se genera bajo demanda en la primera llamada (renderizado desde el XML de la factura + XML de la CC-e) y se almacena en OSS; las llamadas posteriores devuelven la URL existente.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
cce_id *stringID de la CC-e (ObjectId) devuelto por /api/invoice/cce/get_list en el campo id

* Campo obligatorio.

Ejemplo de carga útil

        {
          "cce_id": "65fa1b2c3d4e5f6a7b8c9d0e"
        }

Respuesta

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

Devuelve la URL del XML firmado de la CC-e (ya almacenado en OSS tras el envío a SEFAZ).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
cce_id *stringID de la CC-e (ObjectId) devuelto por /api/invoice/cce/get_list en el campo id

* Campo obligatorio.

Ejemplo de carga útil

        {
          "cce_id": "65fa1b2c3d4e5f6a7b8c9d0e"
        }

Respuesta

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

how_to_reg Manifestación del Destinatario

La Manifestación del Destinatario permite que el destinatario de una NF-e se posicione formalmente sobre una factura emitida contra su CNPJ. Hay 4 tipos de eventos previstos por SEFAZ, cada uno con su propio significado legal.

Tipos de Evento

CódigoNombreSignificadoJustificación
210210 Conocimiento de la Operación El destinatario toma conocimiento de la NF-e, pero aún no la ha confirmado ni rechazado. Generalmente es el primer evento enviado, y es requisito para descargar el XML completo vía DistDFe. No obligatoria
210200 Confirmación de la Operación El destinatario confirma que la operación ocurrió y la mercancía/servicio fue recibido. Evento final, comprueba la recepción. No obligatoria
210220 Desconocimiento de la Operación El destinatario declara que NO reconoce la operación (sospecha de fraude, uso indebido del CNPJ, etc.). Obligatoria (15-255 caracteres)
210240 Operación No Realizada El destinatario reconoce la operación pero declara que NO se concretó (devolución, rechazo de recepción, etc.). Obligatoria (15-255 caracteres)
Regla de secuencia: Tras enviar Conocimiento (210210), se puede enviar Confirmación (210200) O Desconocimiento (210220) U Operación No Realizada (210240). Confirmación/Desconocimiento/No Realizada son estados finales — no pueden sobreescribirse.
Atención: El CNPJ enviado en el campo cnpj debe ser el del destinatario de la NF-e (quien manifiesta) y debe estar registrado en el sistema vinculado al token utilizado. De lo contrario SEFAZ devolverá el rechazo "El autor del evento difiere del destinatario de la NF-e".

Códigos cStat de Retorno

cStatSignificado
135✅ Evento registrado con éxito
573✅ Duplicidad de evento — ya registrado anteriormente (tratado como éxito)
236❌ Clave de acceso inválida
491❌ Manifestación ya registrada — no se puede sobrescribir estado final
596❌ CNPJ del destinatario difiere del informado
656❌ Consumo indebido (rate limit)
POST /api/invoice/manifest
Enviar evento de manifestación del destinatario

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

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

Campos

CampoTipoObligatorioDescripción
chavestringClave de acceso de la NF-e — 44 dígitos
cnpjstringCNPJ del destinatario (quien manifiesta) — 14 dígitos, sin formato. Debe estar registrado en el sistema
tipo_eventointCódigo del evento: 210200, 210210, 210220 o 210240
justificativastringCondicionalObligatoria para 210220 y 210240. Entre 15 y 255 caracteres. Ignorada para 210200 y 210210
Secuencia (nSeqEvento): calculada automáticamente. Para la misma combinación (cnpj + chave + tipo_evento) se incrementa en cada llamada — así los duplicados devuelven cStat: 573 y se graban sin error.

Respuesta de Éxito

        {
          "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 de la Respuesta

CampoTipoDescripción
idstringObjectId interno del registro de manifestación (usado en /get_xml)
chavestringClave de acceso de la NF-e manifestada
cnpjstringCNPJ del destinatario que manifestó
tipo_eventointCódigo del evento enviado (210200/210210/210220/210240)
desc_eventostringDescripción textual del evento (texto original SEFAZ)
nProtstringNúmero de protocolo SEFAZ — comprobante del evento
cStatintCódigo de estado SEFAZ. 135 = registrado, 573 = duplicidad (también aceptado)
xMotivostringMensaje descriptivo del retorno SEFAZ
nSeqEventointSecuencia del evento asignada automáticamente
xml_urlstringURL pública del XML del procEvento (firmado y protocolizado) almacenado en OSS

Ejemplo — Desconocimiento (210220) con justificación

        {
          "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 manifestaciones enviadas (historial)

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana 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

CampoTipoObligatorioDescripción
cnpjstringNoFiltrar por CNPJ del destinatario. Si se omite, lista de todos los CNPJ del usuario
chavestringNoFiltrar por clave NF-e específica (44 dígitos)
start_create_timestring/longNoFecha inicial. Acepta: "dd/MM/yyyy", "yyyy-MM-dd", "dd/MM/yyyy HH:mm:ss" o Unix timestamp en segundos. Considera 00:00:00 UTC si solo es fecha
end_create_timestring/longNoFecha final. Mismo formato. Si solo es fecha, considera 23:59:59.999 UTC
pageintNoNúmero de página (por defecto 1)
page_sizeintNoItems por página (por defecto 20, máximo 100)

Respuesta de Éxito

        {
          "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 de la Respuesta

CampoTipoDescripción
totalintTotal de registros que cumplen los filtros (sin importar la paginación)
pageintPágina actual devuelta
page_sizeintTamaño de página devuelto
list[].idstringObjectId interno del registro
list[].chavestringClave de acceso de la NF-e manifestada
list[].cnpjstringCNPJ del destinatario que manifestó
list[].tipo_eventointCódigo del evento (210200/210210/210220/210240)
list[].desc_eventostringDescripción textual del evento
list[].justificativastringJustificación enviada (solo para 210220/210240)
list[].nProtstringProtocolo SEFAZ del evento
list[].nSeqEventointSecuencia del evento
list[].cStatintCódigo de estado SEFAZ
list[].xMotivostringMensaje descriptivo del retorno SEFAZ
list[].xml_urlstringURL pública del XML del procEvento en OSS
list[].createstringFecha/hora UTC del registro (formato yyyy-MM-dd HH:mm:ss)
Orden: los registros se devuelven del más reciente al más antiguo (por create descendente).
POST /api/invoice/manifest/get_xml
Obtener URL del XML de una manifestación específica

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

        {
          "id": "67341a8f5d4e1f2a3b4c5d6e"
        }

Campos

CampoTipoObligatorioDescripción
idstringObjectId de la manifestación — devuelto por /manifest o /manifest/list

Respuesta de Éxito

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

Errores Comunes

MensajeCausa
id inválidoEl valor no es un ObjectId válido
manifestação não encontradaEl ObjectId existe pero no pertenece al usuario del token, o fue eliminado

cloud_download Captura DistDFe — NFe Recibidas

Permite consultar y descargar NFe y eventos destinados a su CNPJ vía el servicio NFeDistribuicaoDFe de SEFAZ (Ambiente Nacional). La captura es incremental por NSU (Número Sequencial Único) — cada llamada solo descarga lo que aún no se ha capturado.

Tipos de Documento Retornados

doc_typeQué esContenido
resNFe Resumen de NFe Metadatos básicos (clave, valor, emisor, situación). Llega ANTES de enviar Conocimiento — no contiene productos/impuestos
procNFe NFe completa autorizada XML completo de la NF-e (con productos, impuestos, transporte, etc.). Solo viene DESPUÉS de que el destinatario envíe Conocimiento (210210) en la clave
resEvento Resumen de evento Metadatos del evento (clave, tipo, secuencia, motivo)
procEvento Evento completo XML completo del evento (CC-e, cancelación, manifestaciones de otros destinatarios sobre sus notas)
Flujo recomendado:
  1. Llame /received/sync — descarga todos los documentos nuevos
  2. Liste con /received/list filtrando por doc_type: "resNFe" para ver notas sin Conocimiento
  3. Para cada clave de interés, llame /invoice/manifest con tipo_evento: 210210
  4. Llame /received/sync de nuevo — ahora SEFAZ devuelve los procNFe (XML completo) de las claves manifestadas
  5. Use /received/get_xml para obtener la URL del XML y descargar/procesar
Rate limit de SEFAZ: SEFAZ permite como máximo 1 llamada DistDFe por hora por CNPJ. Si se excede, devuelve cStat: 656 (Consumo Indebido). En el entorno de homologación la regla es más permisiva.

Códigos cStat de Retorno de DistDFe

cStatSignificado
137✅ Ningún documento encontrado (fin normal del loop)
138✅ Documentos encontrados — el loop continúa
656❌ Consumo indebido — esperar 1h y reintentar
252❌ Ambiente diferente del informado (producción vs homologación)
280❌ Certificado expirado o inválido
POST /api/invoice/received/sync
Sincronizar — descargar NFe/eventos nuevos de SEFAZ vía DistDFe

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

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

Campos

CampoTipoObligatorioDescripción
cnpjstringCNPJ de la empresa destinataria — 14 dígitos, sin formato. Debe estar registrado en el sistema vinculado al token
max_iterationsintNoNúmero máximo de llamadas SEFAZ por ejecución. Cada llamada descarga hasta 50 documentos. Por defecto 50 (≈2.500 docs), máximo 200
Cómo funciona:
  • Lee el último ultNSU persistido para ese (uid + cnpj)
  • Hace loop llamando a SEFAZ hasta cStat ≠ 138 o alcanzar max_iterations
  • Descomprime los XML (gzip) devueltos
  • Persiste cada documento en w_invoice_received con upload del XML en OSS
  • Actualiza ultNSU y maxNSU en w_invoice_received_sync
  • Deduplica por (uid + cnpj + nsu) — llamadas repetidas no duplican

Respuesta de Éxito

        {
          "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 de la Respuesta

CampoTipoDescripción
cnpjstringCNPJ destinatario consultado
ufstringUF del destinatario usada en la consulta
initial_nsulongNSU de inicio — el último procesado antes de esta ejecución
ult_nsulongNuevo último NSU tras la sincronización
max_nsulongMayor NSU disponible en SEFAZ AN en el momento de la consulta
pendinglongDocumentos aún pendientes (max_nsu - ult_nsu). Si > 0, llame /sync de nuevo para descargar el resto
iterationsintCuántas llamadas SEFAZ se hicieron en esta ejecución
last_cstatintÚltimo cStat devuelto por SEFAZ. 137 es fin normal, 656 es rate limit
last_motivostringMensaje descriptivo del último retorno SEFAZ
stats.resNFeintCantidad de resúmenes de NFe descargados en esta ejecución
stats.procNFeintCantidad de NFe completas descargadas
stats.resEventointCantidad de resúmenes de evento descargados
stats.procEventointCantidad de eventos completos descargados
stats.skippedintDocumentos omitidos (duplicados o error de parseo aislado)
Volumen inicial: empresas que nunca han sincronizado pueden tener cientos o miles de documentos históricos. La primera ejecución puede tardar más e interrumpirse por max_iterations. Verifique pending en la respuesta — si > 0, llame de nuevo (respetando el rate limit).
POST /api/invoice/received/list
Listar documentos capturados (NFe y eventos)

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana 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

CampoTipoObligatorioDescripción
cnpjstringNoFiltrar por CNPJ destinatario (su CNPJ). Si se omite, lista de todos los del usuario
doc_typestringNoFiltrar por tipo de documento: resNFe, procNFe, resEvento o procEvento
chavestringNoFiltrar por clave de acceso (44 dígitos)
emitente_cnpjstringNoFiltrar por CNPJ del emisor de la NF-e (proveedor)
start_create_timestring/longNoFecha inicial. Acepta "dd/MM/yyyy", ISO o Unix timestamp
end_create_timestring/longNoFecha final. Mismo formato
pageintNoNúmero de página (por defecto 1)
page_sizeintNoItems por página (por defecto 20, máximo 100)

Respuesta de Éxito

        {
          "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 de la Respuesta

CampoTipoDescripción
totalintTotal de registros que cumplen los filtros
pageintPágina actual
page_sizeintTamaño de página
list[].idstringObjectId interno (use en /received/get_xml)
list[].nsulongNSU asignado por SEFAZ a este documento
list[].doc_typestringTipo de documento: resNFe, procNFe, resEvento, procEvento
list[].schemastringSchema del documento (ej. resNFe_v1.01.xsd)
list[].chavestringClave de acceso de la NF-e (44 dígitos)
list[].cnpj_destinatariostringCNPJ destinatario (su CNPJ)
list[].emitente_cnpjstringCNPJ del emisor de la NF-e (proveedor)
list[].emitente_nomestringRazón social del emisor
list[].valordecimalValor total de la NF-e (vNF)
list[].dh_emistringFecha/hora de emisión de la NF-e
list[].serieintSerie de la NF-e (solo en procNFe)
list[].numberlongNúmero de la NF-e (solo en procNFe)
list[].tp_nfintTipo de operación: 0=Entrada, 1=Salida (desde la óptica del emisor)
list[].c_sit_nfeintSituación de la NF-e (en resNFe): 1=Autorizada, 2=Denegada, 3=Cancelada
list[].tp_eventointCódigo del evento (en resEvento/procEvento). Ej: 110110=CC-e, 110111=Cancelación, 210210=Conocimiento
list[].desc_eventostringDescripción textual del evento
list[].n_seq_eventointSecuencia del evento
list[].dh_eventostringFecha/hora del evento (solo eventos)
list[].xml_urlstringURL pública del XML del documento en OSS
list[].createstringFecha/hora UTC de la captura
Orden: los registros se devuelven por NSU descendente (más reciente primero).
POST /api/invoice/received/get_xml
Obtener URL del XML de un documento recibido específico

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

        {
          "id": "6a04a70d3201b5a62f3ac2f8"
        }

Campos

CampoTipoObligatorioDescripción
idstringObjectId del documento — devuelto en /received/list

Respuesta de Éxito

        {
          "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 el XML devuelto:
  • resNFe — El XML es solo el resumen, NO contiene productos/impuestos. Úselo para auditoría/triage antes de enviar Conocimiento
  • procNFe — XML completo y firmado, equivalente al generado en la emisión. Listo para importar al ERP del cliente
  • procEvento — XML del evento completo con firma y protocolo

Errores Comunes

MensajeCausa
id inválidoEl valor no es un ObjectId válido
documento recebido não encontradoEl ObjectId existe pero no pertenece al usuario del token
POST /api/invoice/received/get_sync_status
Consultar estado actual de la sincronización DistDFe (sin llamar a SEFAZ)

Encabezados obligatorios

EncabezadoTipoDescripción
tokenstringToken de la empresa
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

        {
          "cnpj": "26638419000167"
        }

Campos

CampoTipoObligatorioDescripción
cnpjstringCNPJ de la empresa destinataria — 14 dígitos, sin formato

Respuesta — Empresa ya 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"
          }
        }

Respuesta — Empresa nunca sincronizada

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

Campos de la Respuesta

CampoTipoDescripción
cnpjstringCNPJ consultado
ufstringUF del destinatario usada en la última sincronización (ausente si nunca sincronizó)
ult_nsulongÚltimo NSU procesado. 0 = nunca sincronizó
max_nsulongMayor NSU disponible en SEFAZ en la última sincronización
pendinglongDocumentos pendientes (max_nsu - ult_nsu). Si > 0, hay nuevos documentos en SEFAZ
last_syncstringFecha/hora UTC de la última sincronización exitosa. null si nunca sincronizó
Uso típico: llame a este endpoint antes de /received/sync para decidir si necesita llamar a SEFAZ. Este endpoint no consume el rate limit de SEFAZ — solo lee el estado local de MongoDB.
GET /api/nfse/get_list
Listar NFS-e (paginado)

Lista las NFS-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "autorizada", "cancelada", "pendente", "rejeitada"

* Campo obligatorio.

Ejemplo de llamada

GET /api/nfse/get_list?page=1&page_size=20&status=autorizada

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "uuid": "65f8b9a1c2d3e4f5a6b7c8d9",
                "chave": "31250112345678000190000000000012345678901234",
                "codigo_verificacao": "ABCD-1234",
                "serie": 1,
                "number": 1,
                "status": "autorizada",
                "create": "2026-01-10T10:30:00Z",
                "issue_time": "2026-01-10T10:31:00Z"
              }
            ],
            "page": 1,
            "total": 142,
            "total_pages": 8
          }
        }

local_shipping MDF-e — Manifiesto Electrónico de Documentos Fiscales

La API de MDF-e (modelo 58, layout PL-MDFe 3.00) permite emitir, consultar, cancelar y cerrar manifiestos de transporte. El MDF-e agrega NF-es y/o CT-es vinculados a una operación de transporte, soportando 4 modales: carretero, aéreo, acuaviario y ferroviario. Toda la información operativa (conductor, vehículo, contratante, CIOT, vale de peaje, pago) va en el cuerpo del /create — no hay eventos de inclusión/modificación después de la emisión.

EndpointMétodoDescripción
/api/mdfe/createPOSTEmitir MDF-e
/api/mdfe/consultPOSTConsultar situación del MDF-e
/api/mdfe/cancelPOSTCancelar MDF-e (hasta 24h después de la autorización)
/api/mdfe/closePOSTCerrar MDF-e (después de finalizar el viaje)
POST /api/mdfe/create
Emitir MDF-e

Emite un MDF-e a partir del cuerpo enviado. Los campos cMDF, cDV, cUF, dhEmi, mod, tpEmis, procEmi, verProc son calculados automáticamente por el servidor. El cliente envía únicamente los campos de negocio. Los campos serie y nMDF son opcionales: se asignan automáticamente cuando se omiten (o valen 0), o se respetan cuando se envían en la solicitud (útil para saltar la numeración, por ejemplo tras una duplicidad en la SEFAZ).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body — raíz

CampoTipoDescripción
ide *objectIdentificación del MDF-e
emit *objectDatos del emisor
infModal *objectInformación del modal (solo UNO de los cuatro: rodo, aereo, aquav, ferrov)
infDoc *objectDocumentos fiscales vinculados
tot *objectTotalizadores de la carga
prodPredobjectProducto predominante de la carga
segarrayInformación de seguro
lacresarrayPrecintos del MDF-e
autXMLarrayCNPJs/CPFs autorizados a acceder al XML
infAdicobjectInformación adicional (fisco y contribuyente)
infRespTecobjectResponsable técnico (CNPJ, contacto, email, etc.)

ide — Identificación

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación
tpEmit *intTipo del emisor: 1=transportador, 2=carga propia, 3=prestador de servicio de transporte
modal *stringModal: "1"=carretero, "2"=aéreo, "3"=acuaviario, "4"=ferroviario
UFIni *stringUF de inicio del viaje (2 letras)
UFFim *stringUF de fin del viaje
infMunCarrega[] *arrayMunicipios de carga: [{ cMunCarrega, xMunCarrega }]
infPercurso[]arrayUFs del recorrido: [{ UFPer }]
tpTranspstringTipo de transportador (carretero)
dhIniViagemstringFecha/hora de inicio del viaje (ISO 8601)
indCanalVerdestringIndicador de canal verde
indCarregaPosteriorstringIndicador de carga posterior
serieintSerie del MDF-e (3 dígitos de la clave de acceso). Opcional — autoasignada (serie de MDF-e de la empresa) cuando se omite o vale 0; respetada cuando se envía
nMDFintNúmero del MDF-e (compone la clave de acceso). Opcional — autoincrementado por el servidor cuando se omite o vale 0; respetado cuando se envía (útil para saltar la numeración, por ejemplo tras una duplicidad)

emit — Emisor

CampoTipoDescripción
CNPJ ⚠stringCNPJ del emisor (14 dígitos)
CPF ⚠stringCPF del emisor (11 dígitos)
IEstringInscripción Estadual
xNome *stringRazón social
xFantstringNombre de fantasía
enderEmitobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone, email }

infModal — Modal Carretero (modal="1")

CampoTipoDescripción
rodo.veicTracao *objectVehículo de tracción: { placa, tara, RENAVAM, capKG, capM3, tpRod, tpCar, UF, condutor[], prop }
rodo.veicTracao.condutor[] *arrayConductores: [{ xNome, CPF }] — mínimo 1
rodo.veicReboque[]arrayVehículos de remolque (misma estructura de veicTracao sin conductor)
rodo.infANTTobjectInformación de la ANTT: { RNTRC, infCIOT[], valePed, infContratante[], infPag[] }
rodo.codAgPortostringCódigo de agendamiento en el puerto
rodo.lacRodo[]arrayPrecintos del modal: [{ nLacre }]

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

CampoTipoDescripción
aereo.nac *stringMarca de nacionalidad de la aeronave
aereo.matr *stringMatrícula de la aeronave
aereo.nVoo *stringNúmero del vuelo
aereo.cAerEmb *stringCódigo IATA del aeropuerto de embarque
aereo.cAerDes *stringCódigo IATA del aeropuerto de destino
aereo.dVoo *stringFecha del vuelo (AAAA-MM-DD)

infModal — Modal Acuaviario (modal="3")

CampoTipoDescripción
aquav.irin *stringIRIN de la embarcación
aquav.tpEmb *stringTipo de embarcación (2 dígitos). Use valores ≥ 10 para evitar el truncamiento del byte interno del Zeus (ej.: "10", "11")
aquav.cEmbar *stringCódigo de la embarcación
aquav.xEmbar *stringNombre de la embarcación
aquav.nViag *stringNúmero del viaje. No puede empezar con cero (validación del schema) — use "1", "100", etc.
aquav.cPrtEmb *stringCódigo del puerto de embarque
aquav.cPrtDest *stringCódigo del puerto de destino
aquav.prtTransstringPuerto de transbordo
aquav.tpNavstringTipo de navegación
aquav.infTermCarreg[]arrayTerminales de carga: [{ cTermCarreg, xTermCarreg }]
aquav.infTermDescarreg[]arrayTerminales de descarga
aquav.infEmbComb[]arrayEmbarcaciones de convoy: [{ cEmbComb, xBalsa }]
aquav.infUnidCargaVazia[]arrayUnidades de carga vacías
aquav.infUnidTranspVazia[]arrayUnidades de transporte vacías

infModal — Modal Ferroviario (modal="4")

CampoTipoDescripción
ferrov.trem *objectDatos del tren: { xPref, dhTrem, xOri, xDest, qVag }
ferrov.vag[] *arrayVagones: [{ pesoBC, pesoR, tpVag, serie, nVag, nSeq, TU }] — mínimo 1. Restricciones del Zeus/SEFAZ: serie debe tener exactamente 3 dígitos (use 100+, ej.: "100"); nVag solo acepta dígitos (long internamente, ej.: "100001"); nSeq opcional 1-3 dígitos.

infDoc — Documentos vinculados

CampoTipoDescripción
infMunDescarga[] *arrayMunicipios de descarga — mínimo 1
infMunDescarga[].cMunDescarga *stringCódigo IBGE del municipio
infMunDescarga[].xMunDescarga *stringNombre del municipio
infMunDescarga[].infNFe[]arrayNF-es vinculadas: [{ chNFe, SegCodBarras, indReentrega, infUnidTransp[], peri[] }]
infMunDescarga[].infCTe[]arrayCT-es vinculados
infMunDescarga[].infMDFeTransp[]arrayMDF-es de transporte (subcontratación)

prodPred — Producto predominante

CampoTipoDescripción
tpCarga *stringTipo de carga: "01"=granel sólido, "02"=granel líquido, "03"=refrigerada, "04"=contenerizada, "05"=carga general, "06"=neogranel, "07"=peligrosa, "08"=granel presurizado
xProd *stringDescripción del producto predominante
cEANstringGTIN/EAN
NCMstringNCM
infLotacaoobjectLotación: { infLocalCarrega{CEP,latitude,longitude}, infLocalDescarrega{...} }

tot — Totalizadores

CampoTipoDescripción
vCarga *decimalValor total de la carga (> 0)
cUnid *stringCódigo de la unidad: "01"=KG, "02"=TON
qCarga *decimalCantidad total de la carga (> 0)
qCTeintCantidad de CT-es vinculados
qNFeintCantidad de NF-es vinculadas
qMDFeintCantidad de MDF-es vinculados

* Campo obligatorio. ⚠ Al menos uno de CNPJ o CPF es obligatorio.

Ejemplo simplificado — Modal Carretero

        {
          "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
          }
        }

Ejemplo 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
          }
        }

Ejemplo simplificado — Modal Acuaviario

        {
          "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
          }
        }

Ejemplo simplificado — Modal Ferroviario

        {
          "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
          }
        }

Ejemplo completo (todos los campos) — Modal Carretero

        {
          "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"
          }
        }

Respuesta de éxito

        {
          "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 situación del MDF-e

Consulta la situación del MDF-e directamente en la SEFAZ a partir de la clave de acceso.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)

* Campo obligatorio.

Ejemplo de carga útil

        {
          "chMDFe": "35260512345678000199580010000000011000000018"
        }

Respuesta

        {
          "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 un MDF-e autorizado. Ventana: hasta 24 horas después de la autorización. No permitido si el MDF-e ya ha sido cerrado.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)
xJust *stringJustificación de la cancelación (mínimo 15 caracteres por exigencia SEFAZ)

* Campo obligatorio.

Ejemplo de carga útil

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

Respuesta

        {
          "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
Cerrar MDF-e

Cierra un MDF-e al final del viaje. Después del cierre, ya no es posible cancelar. Los campos dtEnc, cUF y cMun son opcionales — cuando se omiten, el sistema los infiere a partir del MDF-e original (fecha actual, UF y municipio del emisor).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)
dtEncstringFecha del cierre (AAAA-MM-DD). Default: fecha actual
cUFintCódigo IBGE de la UF donde ocurrió el cierre. Default: UF del emisor
cMunstringCódigo IBGE del municipio donde ocurrió el cierre. Default: municipio del emisor

* Campo obligatorio.

Ejemplo de carga útil

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

Respuesta

        {
          "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"
          }
        }
GET /api/mdfe/get_list
Listar MDF-e (paginado)

Lista los MDF-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Voided" (cerrado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido)

* Campo obligatorio.

Ejemplo de llamada

GET /api/mdfe/get_list?page=1&page_size=20&status=Success

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "chave": "35260112345678000190580010000000011000000015",
                "serie": 1,
                "number": 1,
                "modal": "1",
                "status": "Success",
                "create": "2026-01-10T10:30:00Z",
                "issue_time": "2026-01-10T10:31:00Z"
              }
            ],
            "page": 1,
            "total": 142,
            "total_pages": 8
          }
        }

inventory_2 DC-e — Declaración de Contenido Electrónica

La API de DC-e (modelo 99, layout 1.00) permite emitir, consultar, cancelar y obtener el PDF (DACE) de declaraciones de contenido electrónicas. La DC-e es el documento fiscal que ampara el transporte de bienes o mercancías cuando no existe obligación de emisión de nota fiscal — por ejemplo, envíos que involucran no contribuyentes del ICMS. El emisor es siempre persona jurídica (CNPJ); el destinatario puede ser persona jurídica (CNPJ) o física (CPF). Los datos de negocio van en el cuerpo del /create; los campos técnicos de la clave de acceso (cDC, cDV, cUF, dhEmi, mod) son calculados automáticamente por el servidor.

EndpointMétodoDescripción
/api/dce/createPOSTEmitir DC-e
/api/dce/consultPOSTConsultar situación de la DC-e
/api/dce/cancelPOSTCancelar DC-e autorizada
/api/dce/pdfPOSTObtener el DACE (PDF) de la DC-e

La DC-e se enruta al autorizador de la UF del emisor. El campo ide.cUF debe ser coherente con la UF informada en emit.enderEmit.UF — SEFAZ rechaza con cStat=220 cuando divergen; si se omite, el cUF se deriva de esa UF.

POST /api/dce/create
Emitir DC-e

Emite una DC-e a partir del cuerpo enviado. El cliente envía únicamente los datos de negocio; los campos de identificación técnica de la clave de acceso son calculados por el servidor (ver la nota debajo de la tabla ide). El débito de crédito ocurre solo en producción (tpAmb=1) y cuando la DC-e es autorizada.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body — raíz

CampoTipoDescripción
ide *objectIdentificación de la DC-e
emit *objectDatos del emisor/remitente (CNPJ; o CPF vía Marketplace — ver abajo)
dest *objectDatos del destinatario
det *arrayÍtems/bienes declarados — mínimo 1
total *objectTotalizador de la declaración
transpobjectDatos del transporte
marketplaceobjectDatos del marketplace (solo cuando ide.tpEmit=1)
fiscoobjectDatos del órgano del Fisco (solo cuando ide.tpEmit=0)
autXMLarrayCNPJ/CPF autorizados a acceder al XML
infAdicobjectInformación adicional
Campos obligatorios en la solicitud: ide.tpAmb; emit.CNPJ (14 dígitos) o emit.CPF (11 dígitos, remitente PF vía Marketplace — ver la nota en emit), emit.xNome y emit.enderEmit (xLgr, nro, xBairro, cMun, xMun, CEP con 8 dígitos, UF); dest con CNPJ o CPF, dest.xNome y dest.enderDest (los mismos campos de dirección); al menos 1 ítem en det con xProd, NCM (2 u 8 dígitos), qCom > 0 y vProd > 0; y total.vDC > 0. Todos los demás campos son opcionales.

ide — Identificación

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación. Único campo de ide realmente obligatorio.
tpEmitintTipo de emisor: 0=Aplicación del Fisco, 1=Marketplace, 2=Emisor propio. Opcional — default: 2
cUFintCódigo IBGE de la UF del emisor (2 dígitos). Opcional — derivado de emit.enderEmit.UF cuando se omite. Si se envía, debe ser coherente con esa UF (SEFAZ rechaza con cStat=220 en caso de divergencia)
serieintSerie del documento fiscal (3 dígitos de la clave de acceso) — identifica el conjunto de numeración de la DC-e. Opcional — default: serie de DC-e registrada en la empresa
nDClongNúmero secuencial de la DC-e (compone la clave de acceso). Opcional — auto-incrementado por el servidor cuando se omite o es 0
nSiteAutorizintIdentificación del sitio autorizador que procesó la DC-e (1 dígito de la clave de acceso). Normalmente 0 (sitio primario). Opcional — default: 0
tpEmisintForma de emisión: 1=Normal, 9=Contingencia. Opcional — default: 1

Rellenados automáticamente por el servidor — no es necesario enviarlos: mod (fijo en 99) y cDV (dígito verificador de la clave) son siempre definidos por el servidor; cDC (código numérico de 6 dígitos), dhEmi (fecha/hora de emisión) y verProc (versión del proceso) se generan cuando se omiten. Los campos serie, nDC y cUF de la tabla anterior también se rellenan automáticamente cuando se omiten.

emit — Emisor / Remitente

CampoTipoDescripción
CNPJ ⚠stringCNPJ del emisor (14 dígitos). Rellenado con el CNPJ de la empresa del token cuando se omite
CPF ⚠stringCPF del remitente persona física (11 dígitos). Solo permitido en la emisión vía Marketplace — ver nota abajo
xNome *stringNombre o razón social del emisor/remitente
enderEmit *objectDirección del emisor (ver estructura abajo)
Remitente persona física (CPF): por la regla de la SEFAZ, un CPF no puede ser emisor propio (tpEmit=2 exige CNPJ). Para emitir con un CPF como remitente, basta enviar emit.CPF (sin emit.CNPJ): el servidor define automáticamente tpEmit=1 (Marketplace), usa el CNPJ de su empresa (del token) como emisor autorizado en la clave de acceso y rellena el bloque marketplace con los datos de la empresa. El CPF informado aparece como remitente en emit.

dest — Destinatario

CampoTipoDescripción
CNPJ ⚠stringCNPJ del destinatario (14 dígitos)
CPF ⚠stringCPF del destinatario (11 dígitos)
xNome *stringNombre o razón social del destinatario
enderDest *objectDirección del destinatario (ver estructura abajo)

enderEmit / enderDest — Dirección

CampoTipoDescripción
xLgr *stringCalle
nro *stringNúmero
xCplstringComplemento
xBairro *stringBarrio
cMun *longCódigo IBGE del municipio (7 dígitos)
xMun *stringNombre del municipio
CEP *stringCódigo postal (8 dígitos)
UF *stringSigla de la UF (2 letras)
cPaisintCódigo del país. Default: 1058 (Brasil)
xPaisstringNombre del país. Default: BRASIL
fonestringTeléfono
emailstringCorreo electrónico

det[] — Ítems declarados

CampoTipoDescripción
nItemintNúmero secuencial del ítem
xProd *stringDescripción del bien/mercancía declarado
NCM *stringCódigo NCM (2 u 8 dígitos)
qCom *decimalCantidad (> 0)
vUnComdecimalValor unitario
vProd *decimalValor total del ítem (> 0)
infAdProdstringInformación adicional del ítem

total — Totalizador

CampoTipoDescripción
vDC *decimalValor total declarado (> 0)

transp — Transporte

CampoTipoDescripción
modTransintModalidad del transporte: 0=Correos, 1=propia, 2=transportista. Default: 2
CNPJTranspstringCNPJ del transportista

marketplace — Marketplace (solo tpEmit=1)

CampoTipoDescripción
CNPJstringCNPJ del marketplace
xNomestringNombre del marketplace
SitestringSitio del marketplace

fisco — Órgano del Fisco (solo tpEmit=0)

CampoTipoDescripción
CNPJstringCNPJ del órgano
xOrgaostringNombre del órgano
UFstringUF del órgano

autXML[] — Autorizados al XML

CampoTipoDescripción
CNPJstringCNPJ autorizado a consultar/descargar el XML
CPFstringCPF autorizado a consultar/descargar el XML

infAdic — Información adicional

CampoTipoDescripción
infAdFiscostringInformación de interés del Fisco
infCplstringInformación complementaria de interés del contribuyente
infAdMarketPlacestringInformación adicional del marketplace

* Campo obligatorio. ⚠ En el emisor y en el destinatario, al menos uno de CNPJ o CPF es obligatorio.

Ejemplo simplificado (campos mínimos)

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2
          },
          "emit": {
            "CNPJ": "12345678000199",
            "xNome": "EMPRESA EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "RUA EXEMPLO",
              "nro": "100",
              "xBairro": "CENTRO",
              "cMun": 4106902,
              "xMun": "CURITIBA",
              "CEP": "80010000",
              "UF": "PR"
            }
          },
          "dest": {
            "CPF": "12345678909",
            "xNome": "JOAO DA SILVA",
            "enderDest": {
              "xLgr": "AVENIDA DESTINO",
              "nro": "500",
              "xBairro": "JARDIM",
              "cMun": 4113700,
              "xMun": "LONDRINA",
              "CEP": "86010000",
              "UF": "PR"
            }
          },
          "det": [
            {
              "nItem": 1,
              "xProd": "LIVROS DIVERSOS",
              "NCM": "49019900",
              "qCom": 3,
              "vUnCom": 50.00,
              "vProd": 150.00
            }
          ],
          "total": {
            "vDC": 150.00
          }
        }

Ejemplo completo (todos los campos)

        {
          "ide": {
            "tpAmb": 2,
            "tpEmit": 2,
            "cUF": 41,
            "serie": 1,
            "nSiteAutoriz": 0
          },
          "emit": {
            "CNPJ": "12345678000199",
            "xNome": "EMPRESA EXEMPLO LTDA",
            "enderEmit": {
              "xLgr": "RUA EXEMPLO",
              "nro": "100",
              "xCpl": "SALA 2",
              "xBairro": "CENTRO",
              "cMun": 4106902,
              "xMun": "CURITIBA",
              "CEP": "80010000",
              "UF": "PR",
              "cPais": 1058,
              "xPais": "BRASIL",
              "fone": "4133334444",
              "email": "contato@exemplo.com"
            }
          },
          "dest": {
            "CNPJ": "98765432000188",
            "xNome": "DESTINATARIO EXEMPLO LTDA",
            "enderDest": {
              "xLgr": "AVENIDA DESTINO",
              "nro": "500",
              "xCpl": "GALPAO 3",
              "xBairro": "JARDIM",
              "cMun": 4113700,
              "xMun": "LONDRINA",
              "CEP": "86010000",
              "UF": "PR",
              "cPais": 1058,
              "xPais": "BRASIL",
              "fone": "4333335555",
              "email": "destino@exemplo.com"
            }
          },
          "autXML": [
            { "CNPJ": "11222333000144" },
            { "CPF": "98765432100" }
          ],
          "det": [
            {
              "nItem": 1,
              "xProd": "LIVROS DIVERSOS",
              "NCM": "49019900",
              "qCom": 3,
              "vUnCom": 50.00,
              "vProd": 150.00,
              "infAdProd": "Caixa 1 de 2"
            },
            {
              "nItem": 2,
              "xProd": "MATERIAL DE ESCRITORIO",
              "NCM": "48201000",
              "qCom": 10,
              "vUnCom": 8.00,
              "vProd": 80.00,
              "infAdProd": "Caixa 2 de 2"
            }
          ],
          "total": {
            "vDC": 230.00
          },
          "transp": {
            "modTrans": 2,
            "CNPJTransp": "55666777000188"
          },
          "infAdic": {
            "infAdFisco": "Operacao nao sujeita a emissao de nota fiscal",
            "infCpl": "Remessa de bens entre filiais"
          }
        }

Respuesta de éxito

        {
          "success": true,
          "message": "DC-e autorizada",
          "data": {
            "chave": "41250612345678000199990010000000011201234564",
            "serie": 1,
            "number": 1,
            "cStat": "100",
            "xMotivo": "Autorizado o uso do DC-e",
            "nProt": "141250000123456",
            "xml": "https://storage.../dce/41250612345678000199990010000000011201234564.xml",
            "dace": "https://storage.../dce/41250612345678000199990010000000011201234564.pdf"
          }
        }

Respuesta de rechazo

        {
          "success": false,
          "message": "DC-e rejeitada: Rejeicao: ...",
          "data": {
            "chave": "41250612345678000199990010000000011201234564",
            "serie": 1,
            "number": 1,
            "cStat": "225",
            "xMotivo": "Rejeicao: Falha no Schema XML",
            "nProt": "",
            "xml": "",
            "dace": ""
          }
        }
POST /api/dce/consult
Consultar situación de la DC-e

Consulta la situación actual de la DC-e en SEFAZ a partir de la clave de acceso. Cuando la DC-e está cancelada, la respuesta refleja los datos de la cancelación (la base local es la fuente de la verdad sobre la cancelación).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chDCe *stringClave de acceso de la DC-e (44 dígitos)

* Campo obligatorio.

Ejemplo de payload

        {
          "chDCe": "41250612345678000199990010000000011201234564"
        }

Respuesta — DC-e activa

        {
          "success": true,
          "message": "Autorizado o uso do DC-e",
          "data": {
            "chDCe": "41250612345678000199990010000000011201234564",
            "status": "Success",
            "cStat": "100",
            "xMotivo": "Autorizado o uso do DC-e",
            "nProt": "141250000123456",
            "xml": "https://storage.../dce/41250612345678000199990010000000011201234564.xml",
            "dace": "https://storage.../dce/41250612345678000199990010000000011201234564.pdf"
          }
        }

Respuesta — DC-e cancelada

        {
          "success": true,
          "message": "DC-e Cancelada",
          "data": {
            "chDCe": "41250612345678000199990010000000011201234564",
            "status": "Canceled",
            "cStat": "101",
            "xMotivo": "Cancelamento de DCe homologado",
            "nProt": "141250000123457",
            "xml": "https://storage.../dce/41250612345678000199990010000000011201234564.xml",
            "xmlCancel": "https://storage.../dce/41250612345678000199990010000000011201234564-110111-01.xml",
            "dhEventoCancel": "2026-06-11T11:00:00-03:00"
          }
        }
POST /api/dce/cancel
Cancelar DC-e

Cancela una DC-e autorizada (evento 110111). Requiere que la DC-e haya sido autorizada (posea protocolo) y aún no esté cancelada. Cada DC-e admite una única cancelación.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chDCe *stringClave de acceso de la DC-e (44 dígitos)
xJust *stringJustificación de la cancelación (mínimo 15 caracteres por exigencia de SEFAZ)
nProtstringProtocolo de autorización. Opcional: cuando se omite, usa el protocolo registrado en la emisión

* Campo obligatorio.

Ejemplo de payload

        {
          "chDCe": "41250612345678000199990010000000011201234564",
          "xJust": "Cancelamento por erro no preenchimento dos dados da declaracao"
        }

Respuesta de éxito

        {
          "success": true,
          "message": "DC-e cancelada",
          "data": {
            "chDCe": "41250612345678000199990010000000011201234564",
            "cStat": "135",
            "xMotivo": "Evento registrado e vinculado a DC-e",
            "nProtCancel": "141250000123457",
            "xmlCancel": "https://storage.../dce/41250612345678000199990010000000011201234564-110111-01.xml"
          }
        }

En caso de rechazo, la respuesta retorna success=false, el cStat/xMotivo de la negativa y un campo adicional xmlEnviadoDebug con el XML enviado, para diagnóstico.

POST /api/dce/pdf
Obtener DACE (PDF) de la DC-e

Retorna la URL del DACE — la representación en PDF de la DC-e. Cuando el PDF aún no existe en el almacenamiento, se genera bajo demanda y se envía. En caso de que el almacenamiento esté indisponible, el PDF se retorna en base64 en el propio cuerpo de la respuesta.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chDCe *stringClave de acceso de la DC-e (44 dígitos)

* Campo obligatorio.

Ejemplo de payload

        {
          "chDCe": "41250612345678000199990010000000011201234564"
        }

Respuesta — URL del PDF

        {
          "success": true,
          "message": "DACE disponível",
          "data": {
            "chave": "41250612345678000199990010000000011201234564",
            "dace": "https://storage.../dce/41250612345678000199990010000000011201234564.pdf"
          }
        }

Respuesta — fallback base64 (almacenamiento indisponible)

        {
          "success": true,
          "message": "DACE disponível",
          "data": {
            "chave": "41250612345678000199990010000000011201234564",
            "pdfBase64": "JVBERi0xLjcKJ...",
            "pdfSize": 84213
          }
        }
GET /api/dce/get_list
Listar DC-e (paginado)

Lista las DC-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido)

* Campo obligatorio.

Ejemplo de llamada

GET /api/dce/get_list?page=1&page_size=20&status=Success

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "chave": "35260112345678000190990010000000011000000013",
                "serie": 1,
                "number": 1,
                "status": "Success",
                "create": "2026-01-10T10:30:00Z",
                "issue_time": "2026-01-10T10:31:00Z"
              }
            ],
            "page": 1,
            "total": 142,
            "total_pages": 8
          }
        }

local_shipping CT-e — Conocimiento de Transporte Electrónico

La API de CT-e (modelo 57, layout 4.00 + NT2025/001) permite emitir, cancelar, corregir (CC-e), registrar prestación en desacuerdo, consultar e inutilizar numeración de Conocimientos de Transporte Electrónicos. El CT-e documenta la prestación de servicio de transporte de cargas. Admite 6 modales (carretero, aéreo, acuaviario, ferroviario, ductoviario, multimodal) y 4 tipos de CT-e (Normal, Complemento, Anulación, Sustituto). Los datos de negocio van en el cuerpo del /create; los campos técnicos de la clave de acceso (cCT, cDV, cUF, dhEmi, mod) son calculados automáticamente por el servidor. Los campos serie y nCT son opcionales: se asignan automáticamente cuando se omiten (o valen 0), o se respetan cuando se envían en la solicitud (útil para saltar la numeración, por ejemplo tras una duplicidad en la SEFAZ).

EndpointMétodoDescripción
/api/cte/createPOSTEmitir CT-e
/api/cte/cancelPOSTCancelar CT-e (evento 110111)
/api/cte/ccePOSTCarta de Corrección — CC-e (evento 110110)
/api/cte/desacordoPOSTPrestación en Desacuerdo (evento 610110, registrado por el tomador)
/api/cte/consultPOSTConsultar situación del CT-e
/api/cte/inutilizePOSTInutilizar rango de numeración

El tomador del servicio (quien paga el flete) se define en ide.toma: 0=Remitente, 1=Expedidor, 2=Recibidor, 3=Destinatario, 4=Otros (en este caso complete ide.toma4).

POST /api/cte/create
Emitir CT-e

Emite un CT-e a partir del cuerpo enviado. El cliente envía únicamente los datos de negocio; los campos de identificación técnica de la clave de acceso son calculados por el servidor (ver la nota debajo de la tabla ide). El débito de crédito ocurre solo en producción (tpAmb=1) y cuando el CT-e es autorizado. Los ejemplos a continuación cubren el caso más común: modal carretero (modal=01) y CT-e Normal (tpCTe=0).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)
Campos obligatorios en la solicitud: ide (tpAmb, CFOP, natOp, modal, tpCTe, toma, cMunIni, UFIni, cMunFim, UFFim); emit con CNPJ o CPF y xNome; rem con CNPJ o CPF; dest con CNPJ o CPF; vPrest.vTPrest > 0; imp (con una variante de ICMS). Para tpCTe=0 (Normal): infCTeNorm con infCarga (proPred + al menos 1 infQ) e infModal (el modal correspondiente a ide.modal; para modal=01, rodo.RNTRC es obligatorio). Los demás campos son opcionales.

Body — raíz

CampoTipoDescripción
ide *objectIdentificación del CT-e
emit *objectDatos del emisor (transportista)
rem *objectRemitente de la carga
dest *objectDestinatario de la carga
vPrest *objectValores de la prestación del servicio
imp *objectImpuestos (ICMS + tributos)
infCTeNorm *objectCuerpo del CT-e Normal — obligatorio cuando tpCTe=0 (Normal) o 3 (Sustituto)
expedobjectExpedidor (opcional)
recebobjectRecibidor (opcional)
complobjectDatos complementarios (observaciones, flujo, entrega)
infCteCompobjectClave del CT-e complementado — obligatorio cuando tpCTe=1 (Complemento): { chCTe }
infCteAnuobjectClave del CT-e anulado — obligatorio cuando tpCTe=2 (Anulación): { chCte, dEmi }
autXMLarrayCNPJ/CPF autorizados a acceder al XML: [{ CNPJ } | { CPF }]
infRespTecobjectResponsable técnico — rellenado automáticamente por el servidor según la UF

ide — Identificación

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación
CFOP *intCódigo fiscal de la operación (ej.: 5353 dentro del estado, 6353 interestatal)
natOp *stringNaturaleza de la operación (ej.: "PRESTACAO DE SERVICO DE TRANSPORTE")
modal *stringModal: "01"=carretero, "02"=aéreo, "03"=acuaviario, "04"=ferroviario, "05"=ductoviario, "06"=multimodal
tpCTe *intTipo del CT-e: 0=Normal, 1=Complemento, 2=Anulación, 3=Sustituto
tpServ *intTipo de servicio: 0=Normal, 1=Subcontratación, 2=Reexpedición, 3=Reexpedición Intermedia, 4=Servicio Vinculado a Multimodal
toma *intTomador del servicio: 0=Remitente, 1=Expedidor, 2=Recibidor, 3=Destinatario, 4=Otros
toma4objectDatos del tomador — obligatorio cuando toma=4 (ver tabla abajo)
indIETomaintIndicador de IE del tomador: 1=Contribuyente ICMS, 2=Exento, 9=No Contribuyente (cuando 9, la IE del tomador se omite automáticamente)
cMunIni *longCódigo IBGE del municipio de inicio de la prestación (7 dígitos)
xMunInistringNombre del municipio de inicio
UFIni *stringUF de inicio (2 letras)
cMunFim *longCódigo IBGE del municipio de fin de la prestación (7 dígitos)
xMunFimstringNombre del municipio de fin
UFFim *stringUF de fin (2 letras)
cMunEnvlongCódigo IBGE del municipio de emisión
xMunEnvstringNombre del municipio de emisión
UFEnvstringUF de emisión
retiraintRetira en el origen: 0=Sí, 1=No. Default: 1
xDetRetirastringDetalles de la retirada
tpImpintFormato del DACTE: 1=Vertical, 2=Horizontal. Default: 1
infPercursoarrayUF del recorrido: [{ UFPer }]
dhContstringFecha/hora de entrada en contingencia (ISO 8601)
xJuststringJustificación de la contingencia
serieintSerie del CT-e (3 dígitos de la clave de acceso). Opcional — autoasignada (serie de CT-e de la empresa) cuando se omite o vale 0; respetada cuando se envía
nCTlongNúmero del CT-e (compone la clave de acceso). Opcional — autoincrementado por el servidor cuando se omite o vale 0; respetado cuando se envía (útil para saltar la numeración, por ejemplo tras una duplicidad)

Rellenados automáticamente por el servidor — no es necesario enviarlos: mod (fijo en 57), cCT (código numérico de 8 dígitos), cDV (dígito verificador), cUF (derivado de la UF del emisor), dhEmi (fecha/hora actual), tpEmis (default 1=Normal), procEmi y verProc.

toma4 — Tomador "Otros" (cuando ide.toma=4)

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del tomador (uno de los dos)
IEstringInscripción Estatal
xNomestringRazón social/nombre
xFant, fone, emailstringNombre de fantasía, teléfono, correo electrónico
enderTomaobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, cPais, xPais }

emit — Emisor (transportista)

CampoTipoDescripción
CNPJ ⚠stringCNPJ del emisor (14 dígitos)
CPF ⚠stringCPF del emisor (11 dígitos)
IEstringInscripción Estatal
IESTstringInscripción Estatal del sustituto tributario
xNome *stringRazón social
xFantstringNombre de fantasía
CRTintCódigo de Régimen Tributario: 1=Simples Nacional, 2=SN exceso de sublímite, 3=Régimen Normal, 4=MEI. Default: 3
enderEmitobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone }

rem — Remitente

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del remitente (uno de los dos)
IEstringInscripción Estatal (o "ISENTO")
xNomestringRazón social/nombre
xFant, fone, emailstringNombre de fantasía, teléfono, correo electrónico
enderRemeobjectDirección del remitente (estructura abajo)
locColetaarrayLugares de recolección (opcional): [{ CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }]

dest — Destinatario

CampoTipoDescripción
CNPJ ⚠ / CPF ⚠stringDocumento del destinatario (uno de los dos)
IEstringInscripción Estatal (o "ISENTO")
xNomestringRazón social/nombre
fone, email, ISUFstringTeléfono, correo electrónico, Inscripción en SUFRAMA
enderDestobjectDirección del destinatario (estructura abajo)
locEntobjectLugar de entrega (opcional): { CNPJ|CPF, xNome, xLgr, nro, xBairro, cMun, xMun, UF }

exped / receb — Expedidor / Recibidor (opcionales)

CampoTipoDescripción
CNPJ / CPFstringDocumento (uno de los dos)
IE, xNome, fone, emailstringInscripción Estatal, nombre, teléfono, correo electrónico
enderExped / enderRecebobjectDirección (la misma estructura genérica abajo)

Dirección (enderEmit / enderReme / enderExped / enderReceb / enderDest)

CampoTipoDescripción
xLgrstringCalle/dirección
nrostringNúmero
xCplstringComplemento
xBairrostringBarrio
cMunstringCódigo IBGE del municipio (7 dígitos)
xMunstringNombre del municipio
CEPstringCEP (8 dígitos) — no usado en enderEmit
UFstringSigla de la UF (2 letras)
cPaisstringCódigo del país (opcional, default 1058 Brasil)
xPaisstringNombre del país (opcional)
fonestringTeléfono (solo en enderEmit)

vPrest — Valores de la Prestación

CampoTipoDescripción
vTPrest *decimalValor total de la prestación del servicio (> 0)
vRecdecimalValor a recibir
ComparrayComponentes del valor: [{ xNome, vComp }] — ej.: "FRETE PESO", "PEDÁGIO", "GRIS"

imp — Impuestos

CampoTipoDescripción
ICMS *objectTributación del ICMS — complete solo una de las variantes (ver abajo)
vTotTribdecimalValor aproximado total de tributos
infAdFiscostringInformación adicional de interés del Fisco
ICMSUFFimobjectDIFAL (reparto interestatal, opcional): { vBCUFFim, pFCPUFFim, pICMSUFFim, pICMSInter, vFCPUFFim, vICMSUFFim, vICMSUFIni }
infTribFedobjectTributos federales (opcional): { vPIS, vCOFINS, vIR, vINSS, vCSLL }

ICMS — variantes (completar solo una)

VarianteCuándo usarCampos
ICMS00Tributación normal{ vBC, pICMS, vICMS } (CST 00)
ICMS20Con reducción de base de cálculo{ pRedBC, vBC, pICMS, vICMS } (CST 20)
ICMS45Exenta / no tributada / diferida{ CST }"40"=Exenta, "41"=No tributada, "51"=Diferido
ICMS60ICMS cobrado por sustitución tributaria{ vBCSTRet, vICMSSTRet, pICMSSTRet, vCred } (CST 60)
ICMS90Otros (régimen especial){ pRedBC, vBC, pICMS, vICMS, vCred } (CST 90)
ICMSOutraUFICMS debido a otra UF{ pRedBCOutraUF, vBCOutraUF, pICMSOutraUF, vICMSOutraUF }
ICMSSNEmisor del Simples Nacional{ CST: "90", indSN: 1 }

infCTeNorm — CT-e Normal (obligatorio para tpCTe=0/3)

CampoTipoDescripción
infCarga *objectInformación de la carga (tabla abajo)
infDocobjectDocumentos transportados (tabla abajo)
infModal *objectInformación del modal (tabla abajo)
docAntobjectDocumentos anteriores (subcontratación/reexpedición): { emiDocAnt[]{ CNPJ|CPF, IE, UF, xNome, idDocAnt[] } }
segarraySeguro de la carga: [{ respSeg, xSeg, CNPJ, nApol, nAver, vCarga }]respSeg: 1=Remitente…6=Tomador
cobrobjectCobranza/facturas: { fat{ nFat, vOrig, vDesc, vLiq }, dup[]{ nDup, dVenc, vDup } }
veicNovosarrayVehículos nuevos transportados: [{ chassi, cCor, xCor, cMod, vUnit, vFrete }]
infCteSubobjectSustitución — obligatorio cuando tpCTe=3: { chCte, indAltToma, refNF, tomaICMS, tomaNaoICMS }

infCTeNorm.infCarga — Carga

CampoTipoDescripción
proPred *stringProducto predominante
vCargadecimalValor total de la carga
xOutCatstringOtras características de la carga (ej.: FRIA, GRANEL, REFRIGERADA)
vCargaAverbdecimalValor de la carga para efecto de averiguación
infQ[] *arrayCantidades — mínimo 1: [{ cUnid, tpMed, qCarga }]
infQ[].cUnidstringUnidad: "00"=M³, "01"=KG, "02"=TON, "03"=UNIDAD, "04"=LITROS, "05"=MMBTU
infQ[].tpMedstringTipo de medida (ej.: "PESO BRUTO", "PESO DECLARADO")
infQ[].qCargadecimalCantidad

infCTeNorm.infDoc — Documentos transportados

CampoTipoDescripción
infNFearrayNF-e por clave de acceso: [{ chave, PIN, dPrev, infUnidCarga[], infUnidTransp[] }]chave con 44 dígitos
infNFarrayNotas en papel (legado): [{ mod, serie, nDoc, dEmi, vBC, vICMS, vProd, vNF, nCFOP, nPeso, … }]
infOutrosarrayOtros documentos: [{ tpDoc, descOutros, nDoc, dEmi, vDocFisc }]tpDoc: "00"=Declaración, "10"=Ductoviario, "99"=Otros

infCTeNorm.infModal — Modales (completar solo el correspondiente a ide.modal)

ModalObjetoCampos
01 Carreterorodo{ RNTRC* } — RNTRC con 8 dígitos o "ISENTO". Opcional: occ[] (órdenes de recolección)
02 Aéreoaereo{ nMinu, nOCA, dPrevAereo, natCarga{ xDime, cInfManu[] }, tarifa{ CL, cTar, vTar }, peri[] }dPrevAereo AAAA-MM-DD
03 Acuaviarioaquav{ vPrest, vAFRMM, xNavio, nViag, direc, irin, tpNav, balsa[], detCont[] }direc: N/L/S/O; tpNav: 0=Interior, 1=Cabotaje
04 Ferroviarioferrov{ tpTraf, respFat, ferrEmi, vFrete, chCTeFerroOrigem, ferroEnv[] }tpTraf: 0=Propio, 1=Mutuo, 2=Rodoferroviario, 3=Carretero
05 Ductoviarioduto{ vTar, dIni, dFim } — fechas AAAA-MM-DD
06 Multimodalmultimodal{ COTM, indNegociavel, seg[] }indNegociavel: 0=No, 1=Sí

Todo el bloque infModal acepta versaoModal (default "4.00").

compl — Datos complementarios (opcional)

CampoTipoDescripción
xCaracAd, xCaracSer, xEmistringCaracterística adicional del transporte / del servicio / nombre del emisor
origCalc, destCalcstringMunicipio de origen / destino para cálculo del flete
xObsstringObservaciones generales
ObsCont / ObsFiscoarrayObservaciones libres del contribuyente / fisco: [{ xCampo, xTexto }]
fluxo, EntregaobjectFlujo de carga (origen/paso/destino/ruta) y previsión de entrega

* Campo obligatorio. ⚠ Al menos uno de CNPJ o CPF es obligatorio en el grupo.

Ejemplo simplificado — Modal Carretero, Simples Nacional

        {
          "ide": {
            "CFOP": 5353,
            "natOp": "PRESTACAO DE SERVICO DE TRANSPORTE",
            "tpAmb": 2,
            "tpCTe": 0,
            "modal": "01",
            "tpServ": 0,
            "cMunEnv": 3550308,
            "xMunEnv": "SAO PAULO",
            "UFEnv": "SP",
            "cMunIni": 3550308,
            "xMunIni": "SAO PAULO",
            "UFIni": "SP",
            "cMunFim": 3304557,
            "xMunFim": "RIO DE JANEIRO",
            "UFFim": "RJ",
            "retira": 1,
            "indIEToma": 9,
            "toma": 0
          },
          "emit": {
            "CNPJ": "26638419000167",
            "IE": "141507411110",
            "CRT": 1,
            "xNome": "TF COMERCIO DE PRESENTES LTDA",
            "enderEmit": {
              "xLgr": "RUA QUINTANA",
              "nro": "34",
              "xBairro": "CIDADE MONCOES",
              "cMun": "3550308",
              "xMun": "SAO PAULO",
              "CEP": "04571010",
              "UF": "SP",
              "fone": "1133334444"
            }
          },
          "rem": {
            "CNPJ": "11111111000111",
            "IE": "ISENTO",
            "xNome": "EMPRESA REMETENTE LTDA",
            "fone": "1122223333",
            "enderReme": {
              "xLgr": "AV PAULISTA",
              "nro": "1500",
              "xBairro": "BELA VISTA",
              "cMun": "3550308",
              "xMun": "SAO PAULO",
              "CEP": "01310200",
              "UF": "SP"
            }
          },
          "dest": {
            "CNPJ": "22222222000122",
            "IE": "ISENTO",
            "xNome": "EMPRESA DESTINATARIA LTDA",
            "fone": "2133334444",
            "enderDest": {
              "xLgr": "AV RIO BRANCO",
              "nro": "100",
              "xBairro": "CENTRO",
              "cMun": "3304557",
              "xMun": "RIO DE JANEIRO",
              "CEP": "20040002",
              "UF": "RJ"
            }
          },
          "vPrest": {
            "vTPrest": 1500.00,
            "vRec": 1500.00,
            "Comp": [
              { "xNome": "FRETE PESO", "vComp": 1500.00 }
            ]
          },
          "imp": {
            "ICMS": {
              "ICMSSN": { "CST": "90", "indSN": 1 }
            },
            "vTotTrib": 0
          },
          "infCTeNorm": {
            "infCarga": {
              "vCarga": 10000.00,
              "proPred": "PRODUTOS DIVERSOS",
              "infQ": [
                { "cUnid": "01", "tpMed": "PESO BRUTO", "qCarga": 1000.0000 }
              ]
            },
            "infDoc": {
              "infNFe": [
                { "chave": "35260526638419000167550030000006561341688760" }
              ]
            },
            "infModal": {
              "versaoModal": "4.00",
              "rodo": {
                "RNTRC": "12345678"
              }
            }
          }
        }

Respuesta de éxito

        {
          "success": true,
          "message": "Autorizado o uso do CT-e",
          "data": {
            "cStat": "100",
            "chCTe": "35260626638419000167570010000000011123456780",
            "nProt": "135260000123456",
            "xml": "https://storage.../cte/35260626638419000167570010000000011123456780.xml",
            "dacte": "https://storage.../cte/35260626638419000167570010000000011123456780.pdf"
          }
        }

Respuesta de rechazo

        {
          "success": false,
          "message": "Rejeicao: ...",
          "data": {
            "cStat": "539",
            "chCTe": "",
            "nProt": "",
            "xml": ""
          }
        }
POST /api/cte/cancel
Cancelar CT-e

Cancela un CT-e autorizado (evento 110111). Requiere que el CT-e haya sido autorizado (posea protocolo) y que aún no esté cancelado.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)
xJust *stringJustificación del cancelamiento (mínimo 15 caracteres por exigencia de SEFAZ)
nProtstringProtocolo de autorización. Opcional: cuando se omite, usa el protocolo registrado en la emisión

* Campo obligatorio.

Ejemplo de payload

        {
          "chCTe": "35260626638419000167570010000000011123456780",
          "xJust": "Cancelamento por erro no preenchimento dos dados da prestacao"
        }

Respuesta de éxito

        {
          "success": true,
          "message": "Evento registrado e vinculado a CT-e",
          "data": {
            "cStat": "135",
            "chCTe": "35260626638419000167570010000000011123456780",
            "nProt": "135260000123457",
            "xml": "https://storage.../cte/35260626638419000167570010000000011123456780.xml"
          }
        }
POST /api/cte/cce
Carta de Corrección (CC-e)

Registra una Carta de Corrección Electrónica (evento 110110) sobre un CT-e autorizado. La CC-e no puede corregir valores que impacten el impuesto, datos registrales que cambien emisor/tomador/remitente/destinatario, ni la fecha de emisión. Cada corrección indica el grupo, campo y nuevo valor.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)
infCorrecao[] *arrayCorrecciones (mínimo 1, hasta 20)
infCorrecao[].grupoAlterado *stringGrupo alterado (ej.: "ide", "rem", "dest")
infCorrecao[].campoAlterado *stringCampo alterado (ej.: "xNome")
infCorrecao[].valorAlterado *stringNuevo valor
infCorrecao[].nroItemAlteradointNúmero del ítem alterado (cuando el grupo sea una lista)

* Campo obligatorio. La condición de uso (xCondUso) es rellenada automáticamente por el servidor.

Ejemplo de payload

        {
          "chCTe": "35260626638419000167570010000000011123456780",
          "infCorrecao": [
            {
              "grupoAlterado": "compl",
              "campoAlterado": "xObs",
              "valorAlterado": "OBSERVACAO CORRIGIDA"
            }
          ]
        }

Respuesta de éxito

        {
          "success": true,
          "message": "Evento registrado e vinculado a CT-e",
          "data": {
            "cStat": "135",
            "chCTe": "35260626638419000167570010000000011123456780",
            "nProt": "135260000123458",
            "xml": "https://storage.../cte/35260626638419000167570010000000011123456780.xml"
          }
        }
POST /api/cte/desacordo
Prestación en Desacuerdo

Registra la Prestación de Servicio en Desacuerdo (evento 610110) — utilizada por el tomador del servicio para manifestar que la prestación descrita en el CT-e está en desacuerdo con lo contratado. El CNPJ que registra el evento (el tomador) es el de la empresa del token; no es necesario ser el emisor del CT-e.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa (tomador)
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)
xObs *stringDescripción del desacuerdo (mínimo 15 caracteres)

* Campo obligatorio. El indicador de operación en desacuerdo es siempre 1 (PL-CTe v4.00).

Ejemplo de payload

        {
          "chCTe": "35260626638419000167570010000000011123456780",
          "xObs": "Valor do frete cobrado diverge do contratado entre as partes"
        }

Respuesta de éxito

        {
          "success": true,
          "message": "Evento registrado e vinculado a CT-e",
          "data": {
            "cStat": "135",
            "chCTe": "35260626638419000167570010000000011123456780",
            "nProt": "135260000123459"
          }
        }
POST /api/cte/consult
Consultar situación del CT-e

Consulta la situación del CT-e en SEFAZ a partir de la clave de acceso. Cuando el CT-e está cancelado (registro local), la respuesta refleja el cancelamiento.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chCTe *stringClave de acceso del CT-e (44 dígitos)

* Campo obligatorio.

Ejemplo de payload

        {
          "chCTe": "35260626638419000167570010000000011123456780"
        }

Respuesta

        {
          "success": true,
          "message": "Autorizado o uso do CT-e",
          "data": {
            "cStat": "100",
            "chCTe": "35260626638419000167570010000000011123456780",
            "nProt": "135260000123456",
            "xml": "https://storage.../cte/35260626638419000167570010000000011123456780.xml",
            "dacte": "https://storage.../cte/35260626638419000167570010000000011123456780.pdf"
          }
        }
POST /api/cte/inutilize
Inutilizar rango de numeración

Inutiliza un rango de numeración de CT-e que no será utilizado (por ejemplo, tras una ruptura de secuencia). La inutilización es definitiva.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación
CNPJ *stringCNPJ del emisor (14 dígitos)
ano *intAño de la numeración (2 dígitos, ej.: 26 para 2026)
serie *intSerie de la numeración
nCTIni *longNúmero inicial del rango
nCTFin *longNúmero final del rango (≥ nCTIni)
xJust *stringJustificación (mínimo 15 caracteres)
modintModelo. Default: 57

* Campo obligatorio.

Ejemplo de payload

        {
          "tpAmb": 2,
          "CNPJ": "26638419000167",
          "ano": 26,
          "serie": 1,
          "nCTIni": 51,
          "nCTFin": 55,
          "xJust": "Quebra de sequencia na numeracao por falha no sistema emissor"
        }

Respuesta de éxito

        {
          "success": true,
          "message": "Inutilizacao de numero homologado",
          "data": {
            "cStat": "102",
            "chCTe": "",
            "nProt": "135260000123460"
          }
        }
GET /api/cte/get_list
Listar CT-e (paginado)

Lista los CT-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido)

* Campo obligatorio.

Ejemplo de llamada

GET /api/cte/get_list?page=1&page_size=20&status=Success

Respuesta

        {
          "success": true,
          "data": {
            "list": [
              {
                "chave": "35260112345678000190570010000000011000000019",
                "serie": 1,
                "number": 1,
                "modal": "01",
                "status": "Success",
                "create": "2026-01-10T10:30:00Z",
                "issue_time": "2026-01-10T10:31:00Z"
              }
            ],
            "page": 1,
            "total": 142,
            "total_pages": 8
          }
        }

vpn_key SSO — Inicio Automático vía Token

Base URL (Producción)
https://api.tffiscal.com
Autenticación
Headers: sign, timestamp, token
Validez del Ticket
60 segundos — uso único

SSO (Single Sign-On) permite que su ERP genere un enlace de acceso directo a TFiscal para el usuario, ya autenticado en la empresa correspondiente y en el idioma deseado, sin que tenga que ingresar credenciales.

Cómo funciona:
  • El ERP llama a POST /api/sso/create_ticket enviando el token de la empresa.
  • TFiscal devuelve un redirectUrl con un ticket opaco de uso único.
  • El ERP redirige el navegador del usuario a esa URL.
  • La página consume el ticket y el usuario entra al panel de la empresa.
⚠️ Seguridad: el token real de la empresa nunca aparece en la URL. Sólo el ticket efímero (válido por 60 segundos y de uso único) se expone al navegador.
POST /api/sso/create_ticket
Generar enlace de inicio automático

Genera un ticket de uso único válido por 60 segundos para iniciar sesión automáticamente al usuario en el panel de la empresa correspondiente al token.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa (el mismo usado para emitir NF-e)
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Payload

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

Campos

CampoObligatorioTipoDescripción
tokenstringToken de la empresa (w_company.token) — el mismo usado en /api/invoice/create
languageNostringIdioma de la interfaz: br, en, zh, es, ja, ko. Default: br
pageNostringPágina de destino después del login. Valores aceptados: emitir_nfe. Vacío o ausente abre el panel por defecto (/company/kanban).

Respuesta de éxito

        {
          "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 de la respuesta

CampoTipoDescripción
successbooleantrue cuando el ticket se generó con éxito
ticketstringTicket opaco (aleatorio, 32 bytes base64url)
redirectUrlstringURL completa a la que el ERP debe redirigir el navegador
expiresInSecondsnumberValidez en segundos (siempre 60)
expiresAtstringFecha/hora UTC de expiración (ISO 8601)

Respuestas de error

MensajeCausa
Token es obligatorioEl campo token no fue enviado en el body
Token inválidoEl token no corresponde a ninguna empresa registrada
Este token está vinculado a múltiples empresas. Envíe el token de la empresa a la que desea acceder.Token de integrador con más de una empresa — envíe el token específico de la empresa
Rate limit exceededMás de 30 llamadas por minuto para el mismo token
POST /api/sso/consume_ticket
Consumir ticket y recibir el JWT de sesión

Intercambia el ticket generado por /api/sso/create_ticket por el JWT de sesión de TFiscal. Este endpoint es llamado por el frontend (ruta /sso) y no requiere headers sign/timestamp — el propio ticket opaco es la credencial. Cada ticket puede consumirse solo una vez y expira en 60 segundos.

Body

CampoTipoDescripción
ticket *stringTicket devuelto por create_ticket

* Campo obligatorio.

Ejemplo de payload

        {
          "ticket": "nXk9sz6I6KHOt_OM72ZmfyU5p1eOet5k5Bd3AFZtspg"
        }

Respuesta de éxito

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

Campos de la respuesta

CampoTipoDescripción
access_tokenstringJWT de sesión (validez de 365 días). Úselo en el header Authorization de las llamadas TFiscal
typestringTipo de usuario (user, admin, etc.)
uidintID interno del usuario
company_idintID de la empresa seleccionada en create_ticket
languagestringIdioma elegido en create_ticket (siempre normalizado)
pagestringPágina de destino (o string vacío si no se define)

Respuestas de error

MensajeCausa
Ticket inválidoBody sin campo ticket
Ticket inválido ou expiradoEl ticket no existe, ya fue consumido o pasó los 60 segundos
Rate limit exceededMás de 60 consumos por minuto desde la misma IP
Sessão inválidaEl usuario vinculado al ticket ya no existe

lock Restricciones y Seguridad

Características del ticket

CaracterísticaValor
Validez60 segundos después de generado
UsoÚnico — una vez consumido no se puede reutilizar
Rate limit30 tickets/minuto por token · 60 consumos/minuto por IP
AlmacenamientoMongoDB con TTL automático — tickets expirados se eliminan

Restricciones de navegación

Los usuarios autenticados vía SSO tienen acceso solamente a las pantallas de la empresa correspondiente (/invoice/company/*). Los intentos de acceder a otras áreas (paneles de distribuidor, reportes generales, administración) son redirigidos automáticamente al panel de la empresa.

Sesión después del login

Después de intercambiar el ticket por un JWT, el usuario tiene una sesión normal en TFiscal (JWT válido por 365 días, igual que el login tradicional). Los 60 segundos son sólo la ventana entre generar el ticket y abrir el enlace — después el usuario permanece conectado normalmente hasta cerrar sesión.

⚠️ Importante: el create_ticket debe ser llamado exclusivamente server-side por el ERP. Nunca llame a este endpoint directamente desde el navegador — expondría el token de la empresa en el front-end.

badge Contador (Accountant)

API para consulta de los datos de registro de contadores vinculados a una empresa. Útil para sistemas contables externos que necesitan obtener los datos completos del contador responsable de una empresa determinada.

POST /api/accountant/get_info
Obtener información del contador vinculado a la empresa

Devuelve los datos completos de registro del contador vinculado a la empresa informada. El contador debe estar previamente vinculado a la empresa (mismo CNPJ) y el correo informado debe coincidir con el registro.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa o token B2B del integrador
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body

CampoTipoDescripción
companyId *intID de la empresa vinculada al token
accountantId *stringObjectId del contador (24 hex)
email *stringCorreo del contador (debe coincidir con el registro)

* Campo obligatorio.

Ejemplo de payload

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

Respuesta de éxito

        {
          "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 de la respuesta

CampoTipoDescripción
emailstringCorreo principal del contador
officeDocumentTypestringTipo de documento de la oficina: "CNPJ" o "CPF"
officeDocumentstringDocumento de la oficina (solo dígitos)
officeNamestringRazón social / nombre de la oficina
responsibleNamestringNombre del contador responsable
crcstringNúmero del CRC (Consejo Regional de Contabilidad)
accountantCpfstringCPF del contador (solo dígitos)
workAddressstringDirección comercial
sitestringSitio web de la oficina
landlinestringTeléfono fijo
mobilestringMóvil
assistantNamestringNombre del asistente
assistantEmailstringCorreo del asistente
assistantPhonestringTeléfono del asistente
observationsstringObservaciones libres del registro

Respuestas de error

MensajeCausa
会计师ID参数异常或不存在accountantId ausente o no es un ObjectId válido
该会计师邮箱异常或不存在email inválido o no registrado
发票账号{companyId}异常或不存在companyId no pertenece al usuario del token
该会计师未绑定该发票账号El contador no está vinculado a la empresa informada

verified_user Validación de CPF y CNPJ

API para validar CPF y CNPJ contra la base oficial de la Hacienda Federal de Brasil (Receita Federal). Para CPF, devuelve nombre, situación registral, edad y bloqueo automático de menores de edad (conforme a LGPD). Para CNPJ, devuelve razón social, nombre comercial, dirección, accionistas y situación registral completa. Recomendado para validar registros antes de emitir documentos fiscales e identificar contribuyentes con situación irregular (suspendida, cancelada, dada de baja).

POST /api/invoice/validar_cpf_cnpj
Valida CPF (con fecha de nacimiento) o CNPJ contra la base oficial de la Hacienda Federal de Brasil

Acepta CPF o CNPJ, con o sin formato. El tipo de documento se detecta automáticamente. Para CPF, dataNascimento es obligatorio.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa o token B2B del integrador
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body

CampoTipoDescripción
cpfCnpj *stringCPF (11 dígitos) o CNPJ (14 caracteres). Acepta formato.
dataNascimentostringFecha de nacimiento — obligatoria solo para CPF. Formatos aceptados: dd/MM/yyyy, dd-MM-yyyy o ddMMyyyy.

* Campo obligatorio.

Ejemplo de payload — CPF

        {
          "cpfCnpj": "407.105.368-28",
          "dataNascimento": "09/01/1997"
        }

Ejemplo de payload — CNPJ

        {
          "cpfCnpj": "03.354.151/0001-36"
        }

Respuesta — CPF encontrado, situación regular

        {
          "success": true,
          "data": {
            "tipo_doc": "CPF",
            "documento": "40710536828",
            "nome": "FULANO DE TAL",
            "situacao_codigo": "0",
            "situação_descricao": "REGULAR",
            "menor_de_idade_lgpd": false,
            "idade": 29,
            "data_nascimento": "1997-01-09"
          }
        }

Respuesta — CPF de menor de edad (LGPD)

        {
          "success": true,
          "data": {
            "tipo_doc": "CPF",
            "documento": "12345678901",
            "situação_descricao": "Menor de idade",
            "menor_de_idade_lgpd": true
          }
        }

Respuesta — CPF no encontrado

        {
          "success": true,
          "data": {
            "tipo_doc": "CPF",
            "documento": "12345678901",
            "Situação": "CPF não encontrado"
          }
        }

Respuesta — Fecha de nacimiento no coincide con el CPF

        {
          "success": true,
          "data": {
            "tipo_doc": "CPF",
            "documento": "40710536828",
            "Situação": "Data de nascimento não confere com o CPF"
          }
        }

Respuesta — CNPJ encontrado

        {
          "success": true,
          "data": {
            "tipo_doc": "CNPJ",
            "documento": "03354151000136",
            "nome": "EMPRESA EXEMPLO LTDA",
            "situacao_codigo": "2",
            "situação_descricao": "Ativo",
            "nome_empresarial": "EMPRESA EXEMPLO LTDA",
            "nome_fantasia": "EXEMPLO",
            "data_situacao": "20180515",
            "motivo_situacao": ""
          }
        }

Respuesta — CNPJ no encontrado

        {
          "success": true,
          "data": {
            "tipo_doc": "CNPJ",
            "documento": "12345678000199",
            "Situação": "Não encontrado"
          }
        }

Códigos de Situación CPF

CódigoDescripción
0REGULAR (activo)
2SUSPENDIDO
3TITULAR FALLECIDO
4PENDIENTE DE REGULARIZACIÓN
5CANCELADO POR DUPLICIDAD
8NULO
9CANCELADO DE OFICIO

Códigos de Situación CNPJ

CódigoDescripción
1Nulo
2Activo
3Suspendido
4Inapto
8Dado de baja

Respuestas de error

MensajeCausa
cpfCnpj é obrigatórioCampo cpfCnpj ausente o vacío
CPF inválido, verifique a quantidade de dígitosEl CPF informado no tiene 11 dígitos
CPF inválidoEl CPF informado tiene dígitos verificadores inválidos o contiene letras
CNPJ inválido, verifique a quantidade de dígitosEl CNPJ informado no tiene 14 caracteres
CNPJ inválidoEl CNPJ informado tiene dígitos verificadores inválidos
é necessário informar a data de nascimentoCPF enviado sin dataNascimento
dataNascimento inválida (use dd/MM/yyyy)El formato de la fecha no coincide con ninguno aceptado