> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ipsofactura.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Datos y retención

> Dónde viven tus datos, cuánto se conservan y cómo funcionan las URLs de descarga.

## Residencia de los datos

La infraestructura de Ipsofactura corre en **Microsoft Azure, región México Central**:
base de datos, almacenamiento de XML/PDF y procesamiento. Los datos no salen de México
para su almacenamiento.

## Conservación de los CFDIs

* El **XML timbrado** y su representación impresa (PDF) se almacenan en blob storage
  privado y se conservan **mientras tu cuenta esté activa** — puedes volver a
  descargarlos en cualquier momento vía `GET /cfdi/{id}/xml` y `GET /cfdi/{id}/pdf`.
* Recomendamos igualmente **guardar tu propia copia** del XML: es tu comprobante fiscal y
  el SAT te obliga a conservarlo 5 años.
* Una política formal de retención y un mecanismo de export masivo están en definición;
  esta página se actualizará cuando se publiquen.

## URLs de descarga (TTL)

`GET /cfdi/{id}/xml` y `GET /cfdi/{id}/pdf` no devuelven el archivo: devuelven una **URL
firmada** (`xml_url` / `pdf_url`), de solo lectura, que **vive 15 minutos** desde que se
genera. La URL no exige API key: quien la tenga puede descargar el archivo mientras siga
vigente, igual que una SAS de Azure.

Son dos plazos distintos, y sólo el primero aplica en producción:

|                             | Producción                                                | Sandbox                                     |
| --------------------------- | --------------------------------------------------------- | ------------------------------------------- |
| La **URL firmada** expira   | a los 15 min; vuelve a llamar al endpoint y obtienes otra | a los 15 min; igual                         |
| El **documento** almacenado | persiste mientras tu cuenta esté activa                   | **se descarta 15 min después del timbrado** |

En sandbox, pasados esos 15 minutos `GET /cfdi/{id}/xml` responde `404 DOCUMENT_NOT_AVAILABLE`
y el archivo no se puede recuperar; descarga el XML en cuanto timbres. Ver
[Sandbox › Diferencias con producción](/sandbox#diferencias-con-producción).

<Warning>
  **Guarda el `id` del CFDI, nunca la URL.** La URL es una credencial temporal del
  documento: si la persistes en tu base de datos, a los 15 minutos apunta a nada. Cuando
  necesites el archivo, vuelve a llamar al endpoint con el `id` — en producción genera una URL
  nueva, sin costo y sin límite de veces.
</Warning>

Descarga el archivo en el momento en que recibes la URL, y no la compartas por correo,
chat ni logs: cualquiera que la tenga puede descargar el CFDI mientras siga vigente.

### Cuando el documento no se puede entregar

Estos endpoints **nunca** devuelven `200` con `xml_url` / `pdf_url` vacío. Si el
documento no puede entregarse, la respuesta es un error explícito:

| Status | `code`                   | Qué significa                                                                                                            | Qué hacer                                                                                |
| ------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- |
| `404`  | `DOCUMENT_NOT_AVAILABLE` | El CFDI existe, pero su XML no está en el almacenamiento. En **sandbox** es lo esperado pasados 15 minutos del timbrado. | No reintentes: no va a aparecer. En producción, contacta a soporte con el `id` del CFDI. |
| `503`  | `SERVICE_UNAVAILABLE`    | El almacenamiento de documentos no respondió. No sabemos si el archivo está ahí.                                         | Reintenta con backoff exponencial.                                                       |

`GET /cfdi/{id}/pdf` genera la representación impresa al vuelo la primera vez que la
pides, así que en ese endpoint no verás `DOCUMENT_NOT_AVAILABLE`.

## Logs de API

Para soporte y auditoría conservamos un log por request (endpoint, status, código de
error, prefijo de la API key usada). Los **cuerpos** de request/respuesta se guardan solo
para los endpoints de timbrado, complemento de pago, cancelación y alta de empresas, y
siempre con los campos sensibles (contraseñas, llaves privadas) enmascarados antes de
persistir. Estos logs se purgan automáticamente a los **30 días**.

Tu API key nunca se almacena: solo su hash y el prefijo de 13 caracteres para
identificarla (ver [API keys](/api-keys)).
