# Archivos

> Descargar el PDF, el XML, el ZIP y la respuesta de la DIAN de un documento, y entender cuándo están listos.

Fuente: https://platform.trevol.si/docs/archivos

Cada documento validado tiene sus archivos, que se piden con un `GET` y llegan en binario, listos para guardar:

| Ruta                   | Archivo                         |
| ---------------------- | ------------------------------- |
| `…/{id}/pdf`           | La representación gráfica (PDF) |
| `…/{id}/xml`           | El XML firmado                  |
| `…/{id}/zip`           | El ZIP con el XML y el PDF      |
| `…/{id}/dian_response` | La respuesta de la DIAN         |

`GET /v1/invoices/{id}/pdf` (`downloadInvoicePdf`)

#### cURL

```bash
curl "https://api.trevol.si/v1/invoices/inv_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b/pdf" \
  -H "Authorization: Bearer $TREVOL_API_KEY" \
  -o invoice_pdf.pdf
```

[Probar en el Playground](https://platform.trevol.si/playground?op=downloadInvoicePdf)

No todos los documentos tienen todos los archivos: el documento soporte, la nómina y los eventos RADIAN no llevan PDF ni correo (`xml`, `zip` y `dian_response`; los eventos solo `xml`).

## Cuándo están listos

El PDF, el ZIP y el correo al comprador se hacen **después** del `201`, en segundo plano. `delivery.status` es:

- `null` si el documento no está `accepted`;
- `pending` mientras Trevol genera el PDF y el ZIP y manda el correo;
- `completed` cuando hay PDF, ZIP y el correo quedó en un estado final (`sent`, `skipped`, `failed`, `bounced` o `complained`). Un `failed` que Trevol todavía va a reintentar cuenta como `pending`.

Entérate con el evento `….delivered` ([Webhooks](/docs/webhooks)) o consulta el documento. Si pides el PDF o el ZIP antes de que estén, se generan al momento; si el documento todavía no está validado, es [`file_unavailable`](/docs/errores#file_unavailable) (409), y si no se pudieron preparar ahora, un 503 reintentable.

## En los SDK

Los métodos `download…` devuelven el binario propio de cada lenguaje (`Blob`, `bytes`, `File`, `Stream`, `*os.File`…). El README de cada SDK muestra cómo guardarlo y cómo leer `Request-Id`.
