Los adjuntos de pedido te permiten asociar archivos a un pedido: facturas, CFDI (XML/PDF), guías de envío, evidencia de entrega y más. Los archivos se almacenan en S3 y se acceden mediante URLs prefirmadas de corta duración — nunca viajan en base64 dentro del JSON de la API.
Envelope de respuesta
Toda respuesta exitosa de recurso único sigue { "data": {...} }. Los errores siempre son { "error": { "code", "message", "details?" } }.
Las subidas usan un flujo de dos pasos con URL prefirmada, de modo que los bytes del archivo viajan directamente a S3 sin pasar por los servidores de Fenicia.
1
Solicitar URL prefirmada de subida
Llama a POST /orders/{orderId}/attachments/upload-url. Recibes una uploadUrl de corta duración y un s3Key.
2
Subir el archivo a S3 con PUT
Sube los bytes del archivo directamente a la uploadUrl, usando exactamente el Content-Type que declaraste en el paso anterior.
3
Confirmar el adjunto
Llama a POST /orders/{orderId}/attachments con el mismo s3Key para registrar el adjunto contra el pedido.
GET /orders/{orderId}/attachment (singular, sin ID) es una ruta legacy registrada en el router pero siempre responde 501 — es un stub deshabilitado durante una migración, no un endpoint funcional. Usa siempre la ruta plural con {attachmentId} documentada aquí.
Este endpoint responde 200 con { "data": { "success": true, "message": "..." } } — no es un 204 sin cuerpo. Verifica data.success en vez de solo confiar en el status code.
El contentType declarado no coincide con lo esperado para el type.
attachments:invalid_attachment_type
400
El type no está en el catálogo real (ver tabla arriba).
attachments:validation_failed
400
El body no cumple el schema esperado.
attachments:attachment_limit_exceeded
400
Se alcanzó el máximo de adjuntos por pedido para esa categoría.
attachments:file_not_found
400
El archivo no fue encontrado en S3 al confirmar el adjunto (¿saltaste el paso de subida?).
attachments:unauthorized
403
La API key no tiene el permiso requerido.
attachments:order_not_found
404
No existe un pedido con ese ID en tu tenant.
attachments:attachment_not_found
404
No existe un adjunto con ese ID sobre ese pedido.
attachments:delete_failed
500
Falla al eliminar el archivo en S3 o el registro del adjunto.
Tip
Los límites de tamaño y cantidad son por categoría (document vs. evidence), no un límite único global — revisa la tabla de límites arriba antes de subir archivos grandes de evidencia.