Descargar archivos
Todo DTE procesado genera archivos descargables. Hay un único endpoint para todos: /api/connect/file/{id_or_ref}. Funciona para ventas (Factura, CCF, NC, Exportación) y SUEX sin que necesites saber a qué tipo pertenece el documento — el API busca automáticamente.
Autenticación dual
El endpoint de descarga acepta dos formas de enviar tu API key:
| Método | Uso | Estado |
|---|---|---|
Header Authorization: Bearer odt_xxx | Integraciones backend, código de servidor | Recomendado |
Query param ?key=odt_xxx | Enlaces compartibles, navegador, correos | Fallback deprecado |
El resto del API (emisión, consulta, invalidación) requiere exclusivamente el header. El query param existe solo aquí, solo para descargas, y únicamente porque hay casos donde no puedes inyectar el header:
- Compartir un link de ticket con un cliente para que lo imprima.
- Embeber el ticket en un correo transaccional con un enlace directo.
- Abrir el ticket en el navegador haciendo clic desde una tabla de tu app.
?key= está deprecadoSe mantiene por compatibilidad con integraciones previas, pero eventualmente será removido. Para cualquier integración nueva usa el header Authorization. Si un enlace debe ser compartible sin backend propio, la mejor práctica es proxear la descarga desde tu servidor (tu backend hace la llamada con header, y expone un link corto propio al cliente final).
Si usas ?key= trata esos URLs como secretos. Cualquiera con el link puede descargar el archivo. No los publiques en logs, repos o chats públicos.
Detalles técnicos
| Método | GET |
| URL | https://ocote.io/api/connect/file/{id_or_ref}?type=TIPO |
| Autenticación | Header Authorization: Bearer odt_xxx o query ?key=odt_xxx |
El {id_or_ref} puede ser UUID o external_ref. El API busca automáticamente en ventas y SUEX; no necesitas saber a qué tabla pertenece.
Tipos de archivo (type=)
type= | Contenido |
|---|---|
ticket | PDF térmico 8×21 cm listo para imprimir. |
invoice | PDF tamaño carta del documento, con formato oficial. |
json | JSON firmado (JWS) con sello MH. |
Disponibilidad por tipo de documento
No todos los tipos de archivo aplican a todos los DTE. Esta es la matriz autoritativa:
| Tipo de DTE | ticket | invoice | json |
|---|---|---|---|
| Factura (01) | Sí | Sí | Sí |
| Crédito Fiscal (03) | — | Sí | Sí |
| Nota de Crédito (05) | — | Sí | Sí |
| Exportación (11) | — | Sí | Sí |
| Sujeto Excluido (14) | — | Sí | Sí |
ticketsolo existe para Factura (01). Pedirlo para cualquier otro tipo devuelve 404.invoicees el PDF carta; sirve para archivo contable o envío por correo.jsones el comprobante fiscal firmado; solo está disponible cuandodte_success: true(sello MH recibido).
URLs vienen precocinadas en los responses
Cuando emites o consultas un DTE exitosamente, los URLs listos para usar vienen en el response (ticket_url, invoice_url, json_url — según el tipo). Úsalos tal cual con tu header Authorization — no necesitas construirlos a mano.
{
"ticket_url": "https://ocote.io/api/connect/file/a1b2c3d4-.../...?type=ticket",
"invoice_url": "https://ocote.io/api/connect/file/a1b2c3d4-.../...?type=invoice",
"json_url": "https://ocote.io/api/connect/file/a1b2c3d4-.../...?type=json"
}
Nota: los URLs ya no incluyen ?key= en el response. Para descargar, manda tu API key en el header.