Descarga masiva de XML
La descarga masiva obtiene del SAT, de forma automática, tres tipos de documentos: CFDI (las facturas completas en XML), metadatos (un resumen de cada comprobante) y retenciones (comprobantes de retenciones e información de pagos). Con ellos puedes generar tu contabilidad electrónica y tus pólizas contables, conciliar cuentas por pagar, cuentas por cobrar y movimientos bancarios, preparar auditorías, automatizar la cadena de suministro y el pago a proveedores, y verificar los comprobantes que recibes.
Marco legal
La descarga masiva se basa en los artículos 29 y 29-A del Código Fiscal de la Federación (CFF), que establecen la obligación de expedir comprobantes fiscales digitales y sus requisitos, y en la regla 2.7.6.4 de la Resolución Miscelánea Fiscal (RMF), que regula el servicio de descarga masiva de CFDI y retenciones.
Requisitos
La descarga masiva requiere la e.firma (FIEL) vigente del contribuyente. La e.firma y el certificado de sello digital (CSD) constan cada uno de un archivo .cer, un archivo .key y una contraseña, pero tienen propósitos distintos: el CSD solo sirve para sellar facturas, y la e.firma es una firma electrónica de propósito general que sirve para todo lo demás, incluida la descarga masiva.
La persona de la regla de descarga debe tener un RFC válido y una e.firma vigente cargada en su perfil. Consulta Archivos fiscales para subir sus credenciales.
Tipos de descarga
Fiscalapi descarga tres tipos de documentos del SAT. Eliges el tipo con el campo satQueryTypeId al crear una regla de descarga.
| Tipo | Valor API | Descripción |
|---|---|---|
| CFDI | "CFDI" | Facturas completas en XML. Solo incluye comprobantes vigentes. |
| Metadatos | "Metadata" | Resumen de cada comprobante: UUID, emisor, receptor, montos y estatus. Incluye comprobantes vigentes y cancelados. |
| Retenciones | "Retenciones" | Comprobantes de retenciones e información de pagos. Solo incluye comprobantes vigentes. |
Para descargar comprobantes cancelados, emitidos o recibidos, usa el tipo Metadatos ("Metadata").
Conceptos
Estos son los conceptos de la descarga masiva, del más general al más específico:
| Concepto | Qué es |
|---|---|
| Persona | Un contribuyente, persona física o moral: una empresa, un cliente o una organización. Consulta emisores o receptores. |
| Regla de descarga | Plantilla que creas una vez con los datos fijos de las descargas de una persona: tipo de documento, emitidos o recibidos y estatus, por ejemplo CFDI recibidos vigentes. Fiscalapi la reutiliza para crear solicitudes. |
| Solicitud de descarga | Petición concreta al SAT creada a partir de una regla. Hereda los datos de la regla, agrega el período (fecha inicial y fecha final) y lleva el control de su estado, su resiliencia y sus reintentos. |
| Paquete | Archivo ZIP que el SAT genera para una solicitud terminada. Una solicitud puede generar uno o más paquetes, y Fiscalapi los procesa para extraer su contenido. |
| XML | Con el tipo CFDI, Fiscalapi lee cada XML de los paquetes y guarda sus datos (emisor, receptor, conceptos, impuestos y complementos), así que los consultas desde la API sin procesar el XML. |
| Metadatos | Con el tipo Metadatos, Fiscalapi guarda el resumen de cada comprobante (UUID, RFC del emisor y del receptor, fecha, monto, tipo y estatus) como un registro que puedes consultar y filtrar desde la API. |
Jerarquía de entidades
Las respuestas de la API siguen esta estructura jerárquica:
Regla de descarga
└── Solicitud de descarga
└── Paquete de descarga
├── Xml[] (cuando satQueryTypeId = "CFDI")
└── MetadataItem[] (cuando satQueryTypeId = "Metadata")
Una regla genera solicitudes a lo largo del tiempo: Fiscalapi crea al menos una solicitud automática por día, y tú puedes crear con la API tantas solicitudes manuales como necesites. Cada solicitud produce uno o más paquetes, y cada paquete contiene los XML o los metadatos extraídos.
Ambiente de pruebas
El SAT no ofrece un ambiente de pruebas para la descarga masiva. Por eso Fiscalapi incluye en su ambiente de pruebas un simulador propio que reproduce el flujo completo. Para usarlo, sigue estos tres pasos.
Paso 1: Configurar la cuenta para emisión de CFDI
Sigue el inicio rápido para configurar tu cuenta: crea una persona emisor, sube sus certificados de prueba y verifica que puedes emitir facturas.
Paso 2: Emitir facturas de prueba
Emite algunas facturas de prueba por referencias, con la API o desde el dashboard. La simulación toma tus facturas más recientes cuyo emisor es una persona registrada en tu cuenta, así que las facturas por valores no sirven para este paso. Puedes usar cualquier cliente HTTP o la colección de Postman, y el tutorial de emisión de facturas explica el proceso en detalle.
Paso 3: Simular la descarga masiva desde el dashboard
El simulador necesita facturas emitidas en tu cuenta. Con ellas, ve a Descarga CFDI > Reglas de descarga en el menú lateral del dashboard y presiona Agregar, en la parte superior derecha.

Crear una regla de descarga de prueba desde el dashboard

Resultado del flujo de prueba
Al completar el flujo, Fiscalapi crea una regla de descarga de prueba en estado Aprobada y una solicitud de descarga en estado Completada, con los CFDI descargados (XML) y sus metadatos. También puedes iniciar la simulación con la API:
POST /api/v4/download-rules/test
Este endpoint y el simulador solo existen en el ambiente de pruebas. En producción, Fiscalapi descarga directamente de los servicios del SAT.
Cómo funciona en producción
Para usar la descarga masiva en producción, sigue estos pasos en el dashboard:
- Activa el módulo de descarga masiva en Compras en línea > Módulos adicionales.
- Crea una persona con el RFC del que descargarás documentos y sube su e.firma.
- En Descarga CFDI > Reglas de descarga, crea una regla de descarga y asígnala a esa persona.
- En Descarga CFDI > Solicitudes de descarga, crea una solicitud de descarga y asígnala a la regla.
Fiscalapi crea solicitudes de descarga automáticas a partir de la fecha de aprobación de la regla.

Tabla de solicitudes de descarga de CFDI, metadatos o retenciones

Tipos de solicitud
| Tipo | Valor API | Descripción |
|---|---|---|
| Automática | "Automatica" | Fiscalapi la crea cada día a la 1:05 a. m., hora del centro de México, para cada regla aprobada. Cubre el día anterior completo, de 00:00:00 a 23:59:59. |
| Manual | "Manual" | La creas con la API, con downloadRequestTypeId igual a "Manual" y el período que necesites. Puedes crear tantas como necesites. |
Ciclo de vida
Las reglas y las solicitudes de descarga pasan por varios estados durante su procesamiento. Consúltalos para seguir el avance de tus descargas.
Estados de la regla de descarga
| Id | Estado | Descripción |
|---|---|---|
1 | Pendiente | La regla se creó y espera aprobación. |
2 | Aprobada | La regla está activa y genera solicitudes automáticas. |
3 | Rechazada | La regla se rechazó y no genera solicitudes. |
4 | Suspendida | Fiscalapi suspendió la regla por un error de configuración, como una e.firma vencida o no cargada. No genera solicitudes hasta que corrijas el error y la regla se apruebe de nuevo. |
-1 | Abandonada | La regla se canceló, se desactivó o no se pudo procesar. |
Pendiente (1) --> Aprobada (2) --> Abandonada (-1)
└--> Rechazada (3)
Estados de la solicitud (Fiscalapi)
| Id | Estado | Descripción |
|---|---|---|
1 | Esperando SAT | Fiscalapi envió la solicitud al SAT y espera su respuesta. |
2 | Esperando API | El SAT respondió y Fiscalapi procesa los paquetes descargados. |
3 | Completada | Fiscalapi descargó y procesó todos los paquetes. |
-1 | Abandonada | La solicitud se canceló, falló de forma definitiva o el SAT indicó que no hay documentos que cumplan los criterios. |
EsperandoSat (1) --> EsperandoApi (2) --> Completada (3)
└--> Abandonada (-1)
Estados de la solicitud en el SAT
| Id | Estado | Descripción |
|---|---|---|
0 | Desconocido | Estado inicial: Fiscalapi aún no consulta la solicitud en el SAT. |
1 | Aceptada | El SAT aceptó la solicitud y la está procesando. |
2 | En proceso | El SAT está generando los paquetes. |
3 | Terminada | Los paquetes están listos para descargar. |
4 | Error | Ocurrió un error en el SAT. |
5 | Rechazada | El SAT rechazó la solicitud. |
6 | Vencida | La solicitud venció en el SAT. |
-1 | Abandonada | Fiscalapi abandona la solicitud tras un error definitivo o cuando el SAT la rechaza, por ejemplo porque no hay documentos que cumplan los criterios. |
Desconocido (0) --> Aceptada (1) --> EnProceso (2) --> Terminada (3)
└--> Error (4) --> Abandonada (-1)
└--> Rechazada (5) --> Abandonada (-1)
└--> Vencida (6) --> Abandonada (-1)
Los catálogos de descarga masiva listan todos los estados de las reglas y las solicitudes de descarga, con su descripción en español.
Procesamiento automático
Desde la fecha de aprobación de una regla, y mientras siga en estado Aprobada, Fiscalapi ejecuta la descarga sin intervención manual:
| Etapa | Frecuencia | Qué hace Fiscalapi |
|---|---|---|
| Generación de solicitudes | Cada día, a la 1:05 a. m., hora del centro de México | Crea una solicitud automática por regla para descargar los documentos del día anterior, de 00:00:00 a 23:59:59. |
| Verificación y descarga | Cada hora | Consulta en el SAT el estado de las solicitudes pendientes y descarga los paquetes disponibles. |
| Procesamiento de paquetes | Cada dos horas | Extrae los XML o los metadatos de los paquetes descargados. |
| Reintentos | Tras un error transitorio | Reintenta la descarga o el procesamiento hasta que la solicitud llegue a un estado definitivo, Completada o Abandonada. |
Reglas de validación
Validaciones para reglas de descarga
| Campo | Validación |
|---|---|
personId | Requerido, de exactamente 36 caracteres. |
satQueryTypeId | Uno de los valores API de los tipos de descarga. |
downloadTypeId | "Emitidos" o "Recibidos". |
satInvoiceStatusId | "Vigente" o "Cancelado". |
description | Requerida, de hasta 100 caracteres. |
Combinaciones prohibidas
| Combinación | Motivo |
|---|---|
CFDI + Cancelado | El SAT solo entrega los comprobantes cancelados, emitidos o recibidos, como metadatos. |
Retenciones + Cancelado | Las retenciones solo admiten el estatus Vigente. |
Límites de período
| Tipo de consulta | Período máximo por solicitud |
|---|---|
| CFDI y metadatos | 31 días (1 mes) |
| Retenciones | 400 días (13 meses) |
Regla de unicidad
No puede haber dos reglas activas, es decir, en cualquier estado salvo Abandonada, con el mismo RFC, tipo de consulta (satQueryTypeId), emitidos o recibidos (downloadTypeId) y estatus de factura (satInvoiceStatusId). La unicidad se revisa por RFC, así que aplica aunque el RFC esté registrado en dos personas.
Códigos de estado del SAT
El SAT responde a cada operación de descarga masiva con uno de estos códigos:
| Código | Descripción |
|---|---|
| 0 | Desconocido |
| 300 | Usuario no válido |
| 301 | XML mal formado |
| 302 | Sello mal formado |
| 303 | Sello no corresponde con RFC |
| 304 | Certificado revocado o caduco |
| 305 | Certificado inválido |
| 404 | Error no controlado |
| 5000 | Solicitud recibida con éxito |
| 5001 | Tercero no autorizado |
| 5002 | Solicitudes de por vida agotadas |
| 5003 | Tope máximo de elementos |
| 5004 | Información no encontrada |
| 5005 | Solicitud duplicada |
| 5007 | Paquete no existe |
| 5008 | Máximo de descargas permitidas |
| 5011 | Límite de descargas por folio por día |
| 5012 | No permite descarga de cancelados |
Los códigos 300 a 305 indican un problema con el certificado o la e.firma, los códigos 5001 a 5012 son errores de negocio del SAT y el código 5000 indica que la operación fue exitosa.