API: Attività
L’oggetto attività
Sezione intitolata “L’oggetto attività”{ "id": "019f74a1-…", "workspaceId": "019f7464-…", "title": "Buy paint", "description": "Matte white, 10l", "priority": "HIGH", "status": "PENDING", "blockedReason": null, "dueDate": "2026-08-01T00:00:00Z", "listId": "019f7488-…", "creator": { "userId": "019f…", "firstName": "Greta", "lastName": "Lengl", "avatarUrl": null, "inactive": false }, "assignee": null, "version": 3, "subtasks": [ { "id": "019f…", "title": "Compare prices", "status": "DONE" } ], "attachments": [ { "id": "019f…", "fileName": "color-sample.jpg", "mediaType": "image/jpeg", "sizeBytes": 182734 } ], "createdAt": "2026-07-18T09:30:00Z"}status è PENDING, IN_PROGRESS o DONE (le sottoattività restano
binarie: PENDING/DONE). blockedReason non è null quando l’attività è
contrassegnata come bloccata — viene azzerato automaticamente al
completamento dell’attività. priority, description, dueDate, listId e
assignee possono essere null. version si incrementa a ogni modifica e
protegge il locking ottimistico.
Quando un membro viene rimosso da uno spazio di lavoro, le attività di cui è
autore vengono riassegnate a un «Utente inattivo» riservato e le sue
assegnazioni vengono azzerate. Su quelle attività creator.inactive è true
— mostra un’etichetta generica invece del nome segnaposto.
Elencare le attività
Sezione intitolata “Elencare le attività”GET /api/workspaces/{workspaceId}/tasksRestituisce tutte le attività dello spazio di lavoro come array di oggetti
attività (per ora senza paginazione). Filtra lato client per status,
listId o assegnatario.
Creare un’attività
Sezione intitolata “Creare un’attività”La richiesta può portare un id generato dal client (UUIDv4/v7) —
obbligatorio quando viene inviato un header X-Op-Id, così che le
ripetizioni e le operazioni successive in coda possano fare riferimento
all’attività prima ancora che il server l’abbia vista.
POST /api/workspaces/{workspaceId}/tasks{ "title": "Buy paint", "description": "Matte white, 10l", "priority": "HIGH", "dueDate": "2026-08-01T00:00:00Z", "listId": "019f7488-…"}Solo title è obbligatorio. Restituisce 201 con { "id": "…" }.
Applicare una patch ai campi di un’attività
Sezione intitolata “Applicare una patch ai campi di un’attività”PATCH /api/workspaces/{workspaceId}/tasks/{taskId}/fields{ "title": "New title", "dueDate": null }Aggiornamento con maschera di campi per la sincronizzazione offline:
cambiano solo i campi presenti nel corpo; un null esplicito svuota il
campo. Campi modificabili via patch: title, description, priority,
dueDate, listId, assigneeId, blockedReason (un null esplicito o un
valore vuoto sblocca; ignorato sulle attività DONE). A differenza della PUT, non c’è alcun
controllo di version — le modifiche concorrenti allo stesso campo si
risolvono in ordine di arrivo: vince l’ultimo che scrive. Restituisce
204. Errori: 400 per un titolo vuoto, 404 per un’attività
sconosciuta.
Aggiornare un’attività
Sezione intitolata “Aggiornare un’attività”PUT /api/workspaces/{workspaceId}/tasks/{taskId}Aggiornamento completo — invia tutti i campi più la version che hai letto
per ultima:
{ "title": "Buy paint", "description": null, "priority": "NORMAL", "dueDate": "2026-08-01T00:00:00Z", "listId": null, "assigneeId": "019f…", "version": 3}Restituisce 200. Una version obsoleta risponde 409 — rileggi e
riprova. assigneeId deve essere un membro dello spazio di lavoro; null
rimuove l’assegnazione.
Cambiare lo stato
Sezione intitolata “Cambiare lo stato”PATCH /api/workspaces/{workspaceId}/tasks/{taskId}{ "status": "IN_PROGRESS" }Accetta PENDING, IN_PROGRESS o DONE; impostare DONE azzera anche
blockedReason. Restituisce 200. Questa scorciatoia non richiede alcuna
version.
Copiare un’attività
Sezione intitolata “Copiare un’attività”POST /api/workspaces/{workspaceId}/tasks/{taskId}/copy{ "name": "Buy paint (copy)", "preserveCreator": false, "preserveAssignee": false, "includeSubtasks": true, "listId": null}Restituisce 201 con { "id": "…" }. Le copie rimangono nello stesso
spazio di lavoro; gli allegati non vengono mai copiati. I booleani omessi
assumono i valori predefiniti mostrati.
Spostare un’attività in un altro spazio di lavoro
Sezione intitolata “Spostare un’attività in un altro spazio di lavoro”POST /api/workspaces/{workspaceId}/tasks/{taskId}/move{ "targetWorkspaceId": "019f…" }Restituisce 200. Devi essere membro di entrambi gli spazi di lavoro.
L’assegnatario viene rimosso a meno che non sia anche membro dello spazio di
destinazione; l’assegnazione alla lista viene rimossa; gli allegati si
spostano insieme all’attività. Risponde 413 quando il limite di
archiviazione dello spazio di lavoro di destinazione verrebbe superato.
Eliminare un’attività
Sezione intitolata “Eliminare un’attività”DELETE /api/workspaces/{workspaceId}/tasks/{taskId}Restituisce 204. Elimina l’attività con le sue sottoattività e i
riferimenti agli allegati.
