🧾 En este artículo te explicamos cómo utilizar el Servicio de Verificación de Descarga Masiva v1.5, una herramienta clave para consultar el estatus de las solicitudes de descarga de CFDI realizadas ante el SAT.
🔍 Este servicio te permite conocer si tu solicitud fue aceptada, si se encuentra en proceso, o si ya está lista para descarga. Una vez finalizada exitosamente, podrás obtener los identificadores de los paquetes que contienen los CFDI disponibles.
✅ Pasos para consultar el estatus de tus solicitudes
1️⃣ Autenticación 🔐
Obtén un token de autenticación utilizando tu certificado FIEL a través del servicio correspondiente. Este debe ser enviado en la solicitud como un header, ademas que el valor debe seguir el formato: “WRAP access_token=”{Token}””

2️⃣ Identificador de la solicitud 🧾
IdSolicitud
, el cual se obtiene como resultado al consumir el servicio de Solicitud de Descarga Masiva.Asegúrate de conservar este identificador, ya que es indispensable para consultar el estatus de la solicitud y obtener los paquetes disponibles para descarga.
3️⃣ Generación de XML y envío de la solicitud 📤
Una vez listo, envía la solicitud al servicio de verificación incluyendo el token de autenticación. Asegúrate de que el XML cumpla con el formato especificado por el SAT para evitar errores.
🧾 Construcción del XML
Una vez que cuentes con la información requerida, deberás integrarla en el XML correspondiente a esta petición, siguiendo la estructura definida por el SAT.
Parámetros que debes incluir en el XML y cómo obtenerlos
Parámetro | Descripción |
---|---|
IdSolicitud | Contiene el Identificador de la solicitud que se pretende consultar. |
RfcSolicitante | Contiene el RFC del solicitante que genero la petición de solicitud de descarga masiva. |
X509IssuerName | Obtener los datos del archivo .cer de la FIEL en el campo “Issuer” o “Emisor”. |
X509SerialNumber | Obtener los datos del archivo .cer de la FIEL en el campo “Serial number”o “Número de serie” |
X509Certificate | Se debe tomar los bytes del archivo .cer de la FIEL y hacer un encode utilizando base64. |
DigestValue | Contiene el valor hash del documento referenciado. |
SignatureValue | Contiene la firma digital del nodo SignedInfo . |
Cómo generar el DigestValue
1. Tomar el nodo XML que será referenciado, por ejemplo:
<des:VerificaSolicitudDescarga> <des:solicitud IdSolicitud="4E80345D-917F-40BB-A98F4A73939343C5" RfcSolicitante="AXT940727FP8"></des:solicitud> </des:VerificaSolicitudDescarga>
2. Eliminar todos los espacios, saltos de línea y tabulaciones para dejarlo en una sola línea continua.
3. Aplicar un algoritmo SHA-1 sobre ese texto (en formato binario).
4 . Codificar el resultado en base64. Ese será el valor del DigestValue
.
Cómo generar el SignatureValue
1. Construir el nodo <SignedInfo>
completo, que incluya el DigestValue
que generaste antes:
<SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>leZ4dK/Q/RNbckYkY7WOOnCjK5Q=</DigestValue> </Reference> </SignedInfo>
2. Aplicar la canonicalización XML al nodo <SignedInfo>
, es decir, convertirlo en una versión estandarizada (sin espacios, atributos ordenados, etc.).
3. Firmar el resultado usando la clave privada de la FIEL del emisor. El algoritmo debe ser SHA-1 con RSA.
4. Codificar la firma obtenida en base64. Ese será tu SignatureValue
.
Ejemplo de XML del Servicio de Verificación de Solicitudes
POST https://cfdidescargamasivasolicitud.clouda.sat.gob.mx/VerificaSolicitudDescargaService.svc HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=UTF-8 SOAPAction: "http://DescargaMasivaTerceros.sat.gob.mx/IVerificaSolicitudDescargaService/VerificaSolicitudDescarga" Authorization: WRAP access_token="eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3NDcwOTc5MjUsImV4cCI6MTc0NzA5ODUyNSwiaWF0IjoxNzQ3MDk3OTI1LCJpc3MiOiJMb2FkU2VydmljaW9EZWNhcmdhTWFzaXZhVGVyY2Vyb3MiLCJhY3RvcnQiOiIzMzMwMzAzMDMxMzAzMDMwMzAzMDMwMzUzMDMwMzAzMDM0MzUzNjMwIn0._eOSO175aj_Op9S1wFf1iXKOnJkdnMwxnGyQmJyblg&wrap_subject=3330303031303030303030353030303034353630" Content-Length: 4641 Host: cfdidescargamasivasolicitud.clouda.sat.gob.mx <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:des="http://DescargaMasivaTerceros.sat.gob.mx" xmlns:xd="http://www.w3.org/2000/09/xmldsig#"> <soapenv:Header/> <soapenv:Body> <des:VerificaSolicitudDescarga> <des:solicitud IdSolicitud="4E80345D-917F-40BB-A98F4A73939343C5" RfcSolicitante="AXT940727FP8"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference URI=""> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>leZ4dK/Q/RNbckYkY7WOOnCjK5Q=</DigestValue> </Reference> </SignedInfo> <SignatureValue>BuuRjPmgk4Qwl2ER7vjL7+57WiqNZMRD12Hjfh65irEI1Cu8biQSqeHHiaZ7NnmB/LsjyGaHQmZMW50mfnDtNzowAdytB6FS0RNUNLoajAZAdii8bYHYoW0BqrLaXSImwbZYaHgi4TlPch1OpXZHmUOqfS1qnEEsRXVBN2DvEh1RbAYupmQxBMW75eo4HZZm/lRug44mb47Evm9428ejTzTnu6LDPEAZEmHV4jOwRzqmM4GgiW7aEptqHOhdSxV+QzPSQ2/H5s8AZZ41 LCK+3gSdCq3Kmf9S2H5R3BRS6VSam5J9xa0I2CvzJf/REwrxHsc7Xk9uXwXWOofjeTI1Bw==</SignatureValue> <KeyInfo> <X509Data> <X509IssuerSerial> <X509IssuerName>OID.1.2.840.113549.1.9.2=Responsable: ACDMA, OID.2.5.4.45=SAT970701NN3, L=Coyoacán, S=Distrito Federal, C=MX, PostalCode=06300, STREET="Av. Hidalgo 77, Col. Guerrero", E=asisnet@pruebas.sat.gob.mx, OU=Administración de Seguridad de la Información, O=Servicio de Administración Tributaria, CN=A.C. 2 de pruebas(4096)</X509IssuerName> <X509SerialNumber>292233162870206001759766198425879490509036075057</X509SerialNumber> </X509IssuerSerial> <X509Certificate>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</X509Certificate> </X509Data> </KeyInfo> </Signature> </des:solicitud> </des:VerificaSolicitudDescarga> </soapenv:Body> </soapenv:Envelope>
4️⃣ Análisis de la respuesta 🔍
Revisa los datos devueltos por el servicio, como el EstadoSolicitud
y los IdsPaquetes
, para determinar si la solicitud ya fue finalizada y si los paquetes están disponibles para descarga.
Información que recibirás en la respuesta
Parámetro | Tipo de Dato | Descripción |
---|---|---|
IdsPaquetes | String | Contiene los identificadores de los paquetes que componen la solicitud de descarga masiva. Solo se devuelve cuando la solicitud posee un estatus de finalizado. |
EstadoSolicitud | Int | Contiene el número correspondiente al estado de la solicitud de descarga (Se adjunta tabla de descripciones en este mismo apartado) |
CodigoEstadoSolicitud | String | Contiene el código de estado de la solicitud de descarga. Para más referencia ver: Solicitud de Descarga Masiva. |
NumeroCFDIs | Int | Numero de CFDIs que conforman la solicitud de descarga consultada. |
CodEstatus | String | Código de estatus de la petición de verificación. (Se adjunta tabla de descripciones en este mismo apartado) |
Mensaje | String | Pequeña descripción del código estatus correspondiente a la petición de verificación. |
Ejemplo de respuesta del servicio
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET Date: Thu, 10 May 2018 16:38:15 GMT Content-Length: 430 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <VerificaSolicitudDescargaResponse xmlns="http://DescargaMasivaTerceros.sat.gob.mx"> <VerificaSolicitudDescargaResult CodEstatus="5000" EstadoSolicitud="3" CodigoEstadoSolicitud="5000" NumeroCFDIs="0" Mensaje="Solicitud Aceptada"> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_01</IdsPaquetes> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_02</IdsPaquetes> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_03</IdsPaquetes> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_04</IdsPaquetes> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_05</IdsPaquetes> <IdsPaquetes>4e80345d-917f-40bb-a98f4a73939343c5_06</IdsPaquetes> </VerificaSolicitudDescargaResult> </VerificaSolicitudDescargaResponse> </s:Body> </s:Envelope>
Descripción de los codigos para el atributo EstadoSolicitud
Código | Descripción |
---|---|
1 | ✅ Aceptada |
2 | ⏳ EnProceso |
3 | 🏁 Terminada |
4 | ❌ Error |
5 | 🚫 Rechazada |
6 | ⏰ Vencida* |
Descripción de los codigos para el atributo CodEstatus
Código | Mensaje | Observaciones |
---|---|---|
300 | Usuario No Válido | Este código indica que el usuario proporcionado no es reconocido o no tiene permisos para realizar la operación solicitada. |
301 | XML Mal Formado | Este código de error se regresa cuando el request posee información invalida, ejemplo: un RFC de receptor no valido. |
302 | Sello Mal Formado | El sello digital enviado no cumple con el formato esperado, lo que impide la validación del documento. |
303 | Sello no corresponde con RfcSolicitante | El sello digital no coincide con el RFC del solicitante registrado en la petición, generando una inconsistencia en la autenticidad. |
304 | Certificado Revocado o Caduco | El certificado puede ser invalido por múltiples razones como son el tipo, la vigencia, etc. |
305 | Certificado Inválido | El certificado puede ser invalido por múltiples razones como son el tipo, la vigencia, etc. |
5000 | Solicitud recibida con éxito | La petición fue recibida correctamente y está en proceso para su análisis o respuesta. |
5003 | Tope máximo de elementos de la consulta | La solicitud sobrepasa el máximo de resultados por tipo de solicitud (Metadata y CFDI) |
5004 | No se encontró la información | No se encontró la información de la solicitud de descarga que se pretende verificar. |
5011 | Límite de descargas por folio por día | Se ha alcanzado o sobrepasado el límite de descargas diarias por folio. |
✅ Listo!
Una vez que hayas obtenido la información en IdsPaquetes
indicando que la solicitud fue completada con éxito, dirígete al paso final para descargar tu información.