Aller au contenu

API : Pièces jointes

Les pièces jointes utilisent un téléversement en trois étapes, adressé par contenu : tu enregistres le fichier avec sa somme de contrôle SHA-256, tu téléverses les octets vers une URL présignée, puis tu confirmes. Si l’espace de travail stocke déjà un contenu identique, l’étape de téléversement est entièrement sautée.

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

checksum est le SHA-256 du contenu du fichier, en hexadécimal minuscule. Renvoie 201 :

{
"id": "019f…",
"uploadUrl": "https://…storage…?X-Amz-Signature=…"
}
  • uploadUrl vaut null quand l’espace de travail stocke déjà ce contenu — la pièce jointe est complète, saute les étapes 2 et 3.
  • Erreurs : 409 si ce fichier est déjà joint à cette tâche, 413 si la limite de stockage de l’espace de travail serait dépassée.

Envoie le fichier brut en PUT vers uploadUrl, avec le même Content-Type que celui enregistré :

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

L’URL est présignée et à durée de vie courte ; aucun jeton Todomino n’est envoyé ici.

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

Renvoie 200 une fois que le serveur a vérifié la taille de l’objet stocké. 400 si le téléversement n’est jamais arrivé.

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

Répond 302 Found avec une URL présignée à durée de vie courte dans l’en-tête Location. Suis la redirection sans transmettre ton en-tête Authorization (la plupart des clients HTTP le font correctement par défaut).

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

Renvoie 204. Retire la pièce jointe de la tâche ; le fichier stocké n’est supprimé que lorsqu’aucune autre tâche ne référence le même contenu.