2. API Descarga de CFDIs para ISVs v1
Con esta
API podrás descargar los CFDIs
Emitidos o
Recibidos, tanto timbrados y cancelados, así como la
metadata correspondiente por medio del web service del
SAT (por lo que en cualquier momento puede cambiar).
Flujo de descargas asíncrono:
Solicitud (1 petición) + Verificación (n peticiones) + Obtención URLs descarga (1 petición)
La API opera bajo las reglas de los servicios de descarga del SAT:

Recupera hasta 200 mil registros por solicitud.

Para descargar CFDIs se requiere la FIEL.

Limita a un máximo de 3 veces una descarga idéntica (el SAT lo contabiliza por cualquier origen de descarga). Cuando se exceda a este límite puedes modificar alguno de los parámetros, pudiendo aumentar la hora de la fecha fin para que ya no sea idéntico, pero si considera que se van a ir quemando los rangos según las peticiones que realices.

Tiempo máximo de 72 hrs para que una solicitud de descarga sea atendida.

Descarga por un solo RFC, por tipo (Emitidos, Recibidos) y rango de fechas.
Beneficio agregado:
Servicio REST: Una arquitectura que se integra fácilmente a cualquier lenguaje.

En una sola solicitud recupera los
CFDIs y la
metadata correspondiente.

Autenticación y solicitud en un solo método.
Antes de consumir esta
API es importante que hayas realizado el proceso de
encriptación de la
FIEL, pues los métodos de la
API solicitarán las 3 llaves y la contraseña
encriptada, recuerda que para hacer esto debes de:

Haber obtenido la llave de transporte por medio de la
API Obtención de llave pública v1 (Recuerda que solo debes recuperar la llave pública una única vez o cuando llegara a cambiar, NO por petición).
Métodos o Endpoints de la API:
1. POST: Genera una nueva solicitud de descarga de CFDIs.
2. GET: Obtiene el detalle de una solicitud de descarga.
3. GET: Obtiene las URLs con los archivos obtenidos en la solicitud de la descarga.
1. POST Genera una nueva solicitud de descarga de CFDIs.
Con este método inicias el flujo de descargas hacia el SAT, ya que haces la solicitud de descarga, se recibe la solicitud de descarga y se responde síncronamente con un operationID, el cual deberás persistir durante todo el flujo pues el identificador de la operación asíncrona.
Encabezado de la solicitud:
|
Campo
|
Tipo
|
Descripción
|
|
License-Code
|
String
|
Código de licencia de la cuenta CONTPAQi® Nube que tiene disponible CONTPAQi® Descargas.
Puedes acceder a él desde tu perfil.
Obligatorio.
|
|
Subscription-Key
|
String
|
Clave de suscripción que proporciona acceso a esta API. Se genera una vez que te suscribiste al producto CONTPAQi® Descargas. Se encuentra en tu perfil.
Obligatorio.
|
|
EncryptedCertificate
|
String
|
Llave pública de la FIEL encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedPrivateKey
|
String
|
Llave privada de la FIEL encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedPassPhrase
|
String
|
Contraseña encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedTransportKey
|
String
|
Llave de sesión (Arreglo aleatorio de bytes) encriptado con la llave pública de los servicios de encriptación de certificados de CONTPAQi® Nube con algoritmo RSA OaepSHA256.
|
Cuerpo de la solicitud:

Fecha de inicio de descarga.

Fecha de fin de descarga.

RFC.

Tipo de solicitud: 1: Emitidos, 2: Recibidos.
Respuesta esperada:
operationID: Identificador de la operación asíncrona
RFC: Corresponde al de la FIEL
requestType: Emitido o Recibido
startDate: Fecha de inicio de descarga
endDate: Fecha fin de descarga
totalDownloadDocuments: Cantidad de XMLs descargados
status: Estado de la solicitud (Pendiente, error, rechazada o Terminado)
detail: Mensaje detalle de error o estado
creationDate: Fecha de la solicitud
Consideraciones:

Realiza solo 1 petición a este método por solicitud de descarga.

Usualmente las peticiones a este método responden con estado
Pendiente, ya que es un proceso asíncrono y lleva tiempo en tener respuesta por los servicios del SAT; por lo que ya se podría consultar el status de la solicitud a través del método
GET Obtiene el detalle de una solicitud de descarga.

Si por alguna razón respondiera con estado
Terminado, ya se podrá solicitar la obtención de las
URLs con los archivos obtenidos en la solicitud de la descarga.

En caso de responder con estado
Terminado, pero con cero documentos a descarga, se finaliza el flujo, ya que no se debe tratar de obtener las
URLs por qué no existen XMLs por descargar bajo los parámetros de la solicitud.

Si por alguna razón respondiera con estado
Error,
Rechazada, se finaliza el flujo de descargas.

En el flujo asíncrono de descargas, este método solo debe de consumirse una vez por descarga, en caso contrario cada petición será una nueva solicitud de descargas.

Debe corresponder todos los valores de la
FIEL.

La validación de la
FIEL se realizará en una etapa posterior al envío de la solicitud; la
FIEL debe estar vigente:
no caduca, ni revocada.

Todos los documentos descargados cuentan en su licenciamiento, aun cuando sea el mismo
XML que descargues varias veces por distintas solicitudes.
2. GET Obtiene el detalle de una solicitud de descarga.
Una vez que se obtuvo respuesta de la solicitud de descarga y su estatus fue Pendiente, podrás utilizar este método para consultar el detalle de la solicitud por medio de operationID.
Estatus de la solicitud:
Pendiente: La solicitud se está procesando o se encuentra pendiente de procesar.
Error: Ocurrió un error con la solicitud, verifica el detalle para más información del error.
Rechazada: Ya hiciste una solicitud de descarga con los mismos datos.
Terminado: La solicitud terminó de procesarse y ya es posible descargar los documentos.
Parámetros de solicitud:
|
Campo
|
Tipo
|
Descripción
|
|
operationID
|
String
|
Format - uuid. ID de la solicitud de descarga
|
Encabezado de la solicitud:
|
Campo
|
Tipo
|
Descripción
|
|
License-Code
|
String
|
Código de licencia de la cuenta CONTPAQi® Nube que tiene disponible CONTPAQi® Descargas.
Puedes acceder a él desde tu perfil.
Obligatorio.
|
|
Subscription-Key
|
String
|
Clave de suscripción que proporciona acceso a esta API. Se genera una vez que te suscribiste al producto CONTPAQi® Descargas. Se encuentra en tu perfil.
Obligatorio.
|
Respuesta esperada:
operationID: Identificador de la operación asíncrona
RFC: Corresponde al de la FIEL
requestType: Emitido o Recibido
startDate: Fecha de inicio de descarga
endDate: Fecha fin de descarga
totalDownloadDocuments: Cantidad de XMLs descargados
status: Estado de la solicitud (Pendiente, error, rechazada o Terminado)
detail: Mensaje detalle de error o estado
creationDate: Fecha de la solicitud
Consideraciones:

Realiza máximo 1 petición por hora por solicitud para este método siempre y cuando el estatus sea
Pendiente.

El Total de documentos tendrá valor hasta que el estado cambié a
Terminado.

Cuando responda con estatus
Terminado y el
Total de documentos sea mayor a cero, ya
no deberás de realizar más peticiones a este método, si no que deberás de consumir el método
GET Obtiene las URLs con los archivos obtenidos en la solicitud de la descarga, pues ya están disponibles las URLs donde se encuentran los archivos .ZIP que contienen los XMLs y el
JSON con la
metadata que se descargaron del
SAT.

Cuando responda con estatus
Terminado y el
Total de documentos sea cero, debes finalizar el flujo de descarga, por lo que ya no deberás de hacer peticiones a este método ni al método
GET Obtiene las URLs con los archivos obtenidos en la solicitud de la descarga pues no hay archivos que descargar.

Tienes hasta un máximo de 2 horas para recuperar las
URLs de descargas una vez que consultaste el detalle de una solicitud.

Recuerda que debes persistir el
operationID para continuar con el flujo de descargas correctamente.
3. GET Obtiene las URLs con los archivos obtenidos en la solicitud de la descarga.
Regresa
URLs para descargar archivos zips con los
CFDIs y para descargar archivos de texto (
JSON) con la
metadata de los CFDIs.
Podrás usar este método solo si el método GET Obtiene el detalle de una solicitud de descarga haya respondido con estado Terminado y con total de documentos (totalDownloadDocuments) mayor a cero.
En caso contrario no debes consumirlo para el OperationID o solicitud de descarga, finalizando el flujo de la solicitud.
Parámetros de solicitud:
|
Campo
|
Tipo
|
Descripción
|
|
operationID
|
String
|
Format - uuid. ID de la solicitud de descarga.
|
Encabezado de la solicitud:
|
Campo
|
Tipo
|
Descripción
|
|
License-Code
|
String
|
Código de licencia de la cuenta CONTPAQi® Nube que tiene disponible CONTPAQi® Descargas.
Puedes acceder a él desde tu perfil.
Obligatorio.
|
|
Subscription-Key
|
String
|
Clave de suscripción que proporciona acceso a esta API. Se genera una vez que te suscribiste al producto CONTPAQi® Descargas. Se encuentra en tu perfil.
Obligatorio.
|
|
EncryptedCertificate
|
String
|
Llave pública de la FIEL encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedPrivateKey
|
String
|
Llave privada de la FIEL encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedPassPhrase
|
String
|
Contraseña encriptada de forma simétrica con AES con la llave de sesión.
|
|
EncryptedTransportKey
|
String
|
Llave de sesión (Arreglo aleatorio de bytes) encriptado con la llave pública de los servicios de encriptación de certificados de CONTPAQi® Nube con algoritmo RSA OaepSHA256.
|
Respuesta esperada:
metadataURLs: URL archivo
JSON con la
metadata de los XMLs descargados.
cfdiURLs: Lista de URLs de donde podrás descargar los "N" ZIPs con los XMLs descargados.
Consideraciones:

Realiza solo 1 petición de este método por solicitud de descargas u
OperationID, por lo que debes de persistir las URLs para que en tu flujo puedas ir descargando los ZIPs.

Tienes hasta un máximo de
2 horas para recuperar las
URLs de descargas una vez que consultaste el detalle de una solicitud.

El tiempo de vida para ingresar a las URLs y descargar los archivos, tiene una vigencia de 2 horas para que puedas acceder a ellas, de lo contrario, si ya transcurrió este tiempo, las podrás obtener nuevamente pero las URLs cambiarán y tendrán una nueva vigencia de 2 horas.
Te recomendamos administrar tu flujo y evitar peticiones innecesarias para obtener un funcionamiento óptimo.

Persiste hasta este punto el
OperationID para que puedas concluir el flujo de la solicitud.

En este método se requiere también las tres llaves y la contraseña encriptada de la
FIEL.

Los datos de la
FIEL deben corresponder con los mismos de la solitud (OperationID), cuida la consistencia y persistencia. No debes cruzar datos entre distintas
FIELES. Los datos deben ser consistentes durante todo el flujo
Datos incluidos en la metadata:

Uuid

RfcEmisor

NombreEmisor

RfcReceptor

NombreReceptor

RfcPac

FechaEmision

FechaCertificacionSat

Monto

EfectoComprobante

Estatus

FechaCancelacion