Sesiones de subida
Una sesión de subida representa un evento individual de recopilación de fotos móviles. Las sesiones hacen referencia a destinos preconfigurados donde se entregan las imágenes. Puede distribuir a múltiples destinos simultáneamente.
Crear una sesión
Cree una sesión especificando qué destinos deben recibir las imágenes subidas. Si omite destination_ids, se utilizan los destinos predeterminados de la clave API.
/api/v1/upload-sessionsCuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| destination_ids | string[] | No | Arreglo de UUID de destinos preconfigurados. Se utilizan los destinos predeterminados de la clave API si se omite. |
| long_polling | boolean | No | Habilitar la entrega basada en consultas junto con los destinos push. |
| tags | string[] | No | Arreglo de cadenas de etiquetas para correlacionar subidas (p. ej. user:123, order:456). |
| expires_in_hours | integer | No | Tiempo de vida de la sesión en horas (1–168). Mutuamente excluyente con expires_at. |
| expires_at | string | No | Expiración absoluta como fecha y hora ISO 8601. Mutuamente excluyente con expires_in_hours. |
| max_images | integer | No | Número máximo de imágenes permitidas en esta sesión. |
| allowed_mime_types | string[] | No | Restringir los formatos aceptados. Subconjunto de image/jpeg, image/png, image/webp, image/heic. |
| max_image_dimension | integer | No | Dimensión máxima en píxeles (ancho o alto) para las imágenes subidas. |
| password | string | No | Requerir una contraseña para acceder a la página de subida (4–128 caracteres). |
curl -X POST https://api.apertur.ca/api/v1/upload-sessions \
-H "Authorization: Bearer aptr_xxxx" \
-H "Content-Type: application/json" \
-d '{
"destination_ids": [
"d290f1ee-6c54-4b01-90e6-d701748f0851",
"7c9e6679-7425-40de-944b-e07fc1f90ae7"
],
"tags": ["user:123", "order:456"],
"expires_in_hours": 24,
"max_images": 10
}'Destinos
Los destinos son objetivos de entrega preconfigurados administrados en su panel de control bajo Proyecto → Destinos. Apertur admite 9 tipos de destinos en cuatro categorías.
Almacenamiento en la nube
Amazon S3 o cualquier almacenamiento compatible con S3 (MinIO, Backblaze B2, DigitalOcean Spaces, etc.).
endpoint, region, bucket, accessKey, secretKey, pathTemplate, customHeaders
Contenedores de Azure Blob Storage.
connectionString, container, pathTemplate
Unidades en la nube
Google Drive. Conectado mediante OAuth — los tokens se renuevan automáticamente.
folderId, pathTemplate
Dropbox. Carpeta predeterminada: /Apps/Apertur.
folderPath
Microsoft OneDrive. Carpeta predeterminada: /Apertur.
driveId, folderPath
Box.com. Carpeta predeterminada: raíz.
folderId
Servidor
FTP, FTPS o SFTP. Admite autenticación por contraseña y clave privada.
host, port, username, password, protocol, remotePath, privateKey
Servidores compatibles con WebDAV (Nextcloud, ownCloud, etc.).
url, username, password, remotePath
HTTP
HTTP POST a su endpoint. Admite formatos multipart, JSON base64 y binario. Incluye firma HMAC.
url, secret, format (multipart / json_base64 / binary)
Administración de destinos
Administre los destinos a través de la API o del panel de control bajo Proyecto → Destinos.
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/v1/projects/:projectId/destinations | Crear un nuevo destino |
| GET | /api/v1/projects/:projectId/destinations | Listar todos los destinos |
| PATCH | /api/v1/projects/:projectId/destinations/:destId | Actualizar un destino |
| DELETE | /api/v1/projects/:projectId/destinations/:destId | Eliminar un destino |
Los destinos basados en OAuth (google_drive, dropbox, onedrive, box) se crean a través de un flujo de autorización OAuth iniciado desde el panel de control.
Long polling
Long polling es una opción boolean en la sesión, no un tipo de destino. Cuando está habilitada, su servidor puede consultar las imágenes junto con cualquier destino push. Esto es útil cuando su servidor no puede aceptar solicitudes entrantes. Consulte la documentación de Long Polling para más detalles.
{
"destination_ids": ["d290f1ee-..."],
"long_polling": true
}Respuesta
La respuesta incluye un uuid para identificar la sesión y la lista de destinos resueltos.
{
"uuid": "sess_01HX4ABCDEFGHIJKLMN",
"destinations": [
{ "id": "d290f1ee-...", "type": "s3", "name": "Production S3" },
{ "id": "7c9e6679-...", "type": "webhook", "name": "My Webhook" }
],
"long_polling": false,
"expires_at": "2024-03-29T10:00:00Z",
"password_protected": false
}| Campo | Tipo | Descripción |
|---|---|---|
| uuid | string | Identificador único de la sesión |
| destinations | object[] | Arreglo de destinos resueltos (id, type, name) |
| long_polling | boolean | Si la entrega basada en consultas está habilitada |
| expires_at | string | Fecha y hora de expiración en formato ISO 8601 |
| password_protected | boolean | Si la sesión requiere una contraseña |
Estado de entrega
Rastree el progreso de entrega por imagen y por destino para cualquier sesión.
/api/v1/upload-sessions/:uuid/delivery-statuscurl https://api.apertur.ca/api/v1/upload-sessions/sess_01HX4ABCDEFGHIJKLMN/delivery-status \ -H "Authorization: Bearer aptr_xxxx"
{
"session_id": "sess_01HX4ABCDEFGHIJKLMN",
"images": [
{
"image_id": "img_01HX...",
"image_index": 0,
"deliveries": [
{
"destination_id": "d290f1ee-...",
"destination_name": "Production S3",
"destination_type": "s3",
"status": "delivered",
"delivered_at": "2024-03-28T10:01:23Z"
},
{
"destination_id": "7c9e6679-...",
"destination_name": "My Webhook",
"destination_type": "webhook",
"status": "pending",
"attempts": 1,
"next_retry_at": "2024-03-28T10:02:00Z"
}
]
}
]
}Política de reintentos
Las entregas fallidas se reintentan hasta 5 veces con retrasos crecientes: 5s, 30s, 2min, 10min, 1hr.
Opciones de sesión
Estos campos opcionales le permiten personalizar el comportamiento de la sesión.
| Opción | Descripción | Predeterminado |
|---|---|---|
| password | Requerir una contraseña para acceder a la página de subida (4–128 caracteres) | Ninguna (sin contraseña) |
| max_images | Limitar el número de imágenes que un usuario puede subir | Predeterminado del plan |
| expires_in_hours | Tiempo de vida de la sesión en horas (1–168) | 24 horas |
| expires_at | Expiración absoluta como fecha y hora ISO 8601 | - |
| allowed_mime_types | Restringir los formatos de imagen aceptados | Todos los tipos admitidos |
| max_image_dimension | Dimensión máxima en píxeles (ancho o alto) | Sin límite |
| tags | Arreglo de cadenas para correlacionar subidas con sus datos | [] |
Estado de la sesión
| Estado | Descripción |
|---|---|
| pending | Sesión creada, esperando a que el usuario escanee y envíe fotos |
| uploading | El usuario está subiendo imágenes activamente |
| completed | Todas las imágenes procesadas y entregadas |
| expired | La sesión expiró antes de que el usuario enviara fotos |
| failed | La entrega falló después de agotar todos los reintentos |