Docs/Sesiones de subida

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.

POST/api/v1/upload-sessions

Cuerpo de la solicitud

CampoTipoRequeridoDescripción
destination_idsstring[]NoArreglo de UUID de destinos preconfigurados. Se utilizan los destinos predeterminados de la clave API si se omite.
long_pollingbooleanNoHabilitar la entrega basada en consultas junto con los destinos push.
tagsstring[]NoArreglo de cadenas de etiquetas para correlacionar subidas (p. ej. user:123, order:456).
expires_in_hoursintegerNoTiempo de vida de la sesión en horas (1–168). Mutuamente excluyente con expires_at.
expires_atstringNoExpiración absoluta como fecha y hora ISO 8601. Mutuamente excluyente con expires_in_hours.
max_imagesintegerNoNúmero máximo de imágenes permitidas en esta sesión.
allowed_mime_typesstring[]NoRestringir los formatos aceptados. Subconjunto de image/jpeg, image/png, image/webp, image/heic.
max_image_dimensionintegerNoDimensión máxima en píxeles (ancho o alto) para las imágenes subidas.
passwordstringNoRequerir 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

s3

Amazon S3 o cualquier almacenamiento compatible con S3 (MinIO, Backblaze B2, DigitalOcean Spaces, etc.).

endpoint, region, bucket, accessKey, secretKey, pathTemplate, customHeaders

azure_blob

Contenedores de Azure Blob Storage.

connectionString, container, pathTemplate

Unidades en la nube

google_driveOAuth

Google Drive. Conectado mediante OAuth — los tokens se renuevan automáticamente.

folderId, pathTemplate

dropboxOAuth

Dropbox. Carpeta predeterminada: /Apps/Apertur.

folderPath

onedriveOAuth

Microsoft OneDrive. Carpeta predeterminada: /Apertur.

driveId, folderPath

boxOAuth

Box.com. Carpeta predeterminada: raíz.

folderId

Servidor

ftp

FTP, FTPS o SFTP. Admite autenticación por contraseña y clave privada.

host, port, username, password, protocol, remotePath, privateKey

webdav

Servidores compatibles con WebDAV (Nextcloud, ownCloud, etc.).

url, username, password, remotePath

HTTP

webhook

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étodoEndpointDescripción
POST/api/v1/projects/:projectId/destinationsCrear un nuevo destino
GET/api/v1/projects/:projectId/destinationsListar todos los destinos
PATCH/api/v1/projects/:projectId/destinations/:destIdActualizar un destino
DELETE/api/v1/projects/:projectId/destinations/:destIdEliminar 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
}
CampoTipoDescripción
uuidstringIdentificador único de la sesión
destinationsobject[]Arreglo de destinos resueltos (id, type, name)
long_pollingbooleanSi la entrega basada en consultas está habilitada
expires_atstringFecha y hora de expiración en formato ISO 8601
password_protectedbooleanSi la sesión requiere una contraseña

Estado de entrega

Rastree el progreso de entrega por imagen y por destino para cualquier sesión.

GET/api/v1/upload-sessions/:uuid/delivery-status
curl 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ónDescripciónPredeterminado
passwordRequerir una contraseña para acceder a la página de subida (4–128 caracteres)Ninguna (sin contraseña)
max_imagesLimitar el número de imágenes que un usuario puede subirPredeterminado del plan
expires_in_hoursTiempo de vida de la sesión en horas (1–168)24 horas
expires_atExpiración absoluta como fecha y hora ISO 8601-
allowed_mime_typesRestringir los formatos de imagen aceptadosTodos los tipos admitidos
max_image_dimensionDimensión máxima en píxeles (ancho o alto)Sin límite
tagsArreglo de cadenas para correlacionar subidas con sus datos[]

Estado de la sesión

EstadoDescripción
pendingSesión creada, esperando a que el usuario escanee y envíe fotos
uploadingEl usuario está subiendo imágenes activamente
completedTodas las imágenes procesadas y entregadas
expiredLa sesión expiró antes de que el usuario enviara fotos
failedLa entrega falló después de agotar todos los reintentos