Ir al contenido

API: Archivos adjuntos

Los archivos adjuntos usan una subida en tres pasos, direccionada por contenido: registras el archivo con su checksum SHA-256, subes los bytes a una URL prefirmada y luego confirmas. Si el espacio de trabajo ya almacena un contenido idéntico, el paso de subida se omite por completo.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments
{
"checksum": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"fileName": "color-sample.jpg",
"mediaType": "image/jpeg",
"sizeBytes": 182734
}

checksum es el SHA-256 en hexadecimal en minúsculas del contenido del archivo. Devuelve 201:

{
"id": "019f…",
"uploadUrl": "https://…storage…?X-Amz-Signature=…"
}
  • uploadUrl es null cuando el espacio de trabajo ya almacena este contenido — el archivo adjunto está completo, omite los pasos 2 y 3.
  • Errores: 409 si este archivo ya está adjunto a esta tarea, 413 si se excedería el límite de almacenamiento del espacio de trabajo.

Haz PUT del archivo en bruto a uploadUrl con el mismo Content-Type que registraste:

Terminal window
curl -X PUT --data-binary @color-sample.jpg \
-H "Content-Type: image/jpeg" "$UPLOAD_URL"

La URL está prefirmada y es de corta duración; aquí no se envía ningún token de Todomino.

POST /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/complete

Devuelve 200 después de que el servidor verifique el tamaño del objeto almacenado. 400 si la subida nunca llegó.

GET /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}/download

Responde 302 Found con una URL prefirmada de corta duración en la cabecera Location. Sigue la redirección sin reenviar tu cabecera Authorization (la mayoría de los clientes HTTP lo hacen correctamente por defecto).

DELETE /api/workspaces/{workspaceId}/tasks/{taskId}/attachments/{attachmentId}

Devuelve 204. Quita el archivo adjunto de la tarea; el archivo almacenado solo se elimina cuando ninguna otra tarea referencia el mismo contenido.