API: Tareas
El objeto tarea
Sección titulada «El objeto tarea»{ "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 es PENDING, IN_PROGRESS o DONE (las subtareas siguen siendo
binarias: PENDING/DONE). blockedReason no es nulo cuando la tarea está
marcada como bloqueada — se borra automáticamente cuando la tarea se completa.
priority, description, dueDate, listId y assignee admiten null.
version se incrementa con cada cambio y protege el
bloqueo optimista.
Cuando se elimina a un miembro de un espacio de trabajo, las tareas que creó
se reasignan a un «Usuario inactivo» reservado y sus asignaciones se borran.
En esas tareas creator.inactive es true — muestra una etiqueta genérica en
lugar del nombre de marcador de posición.
Listar tareas
Sección titulada «Listar tareas»GET /api/workspaces/{workspaceId}/tasksDevuelve todas las tareas del espacio de trabajo como un array de objetos
tarea (todavía sin paginación). Filtra en el cliente por status, listId
o persona asignada.
Crear una tarea
Sección titulada «Crear una tarea»La petición puede llevar un id generado por el cliente (UUIDv4/v7) —
obligatorio cuando se envía una cabecera X-Op-Id, para que las
repeticiones y las operaciones posteriores en cola puedan referenciar la
tarea antes de que el servidor la haya visto.
POST /api/workspaces/{workspaceId}/tasks{ "title": "Buy paint", "description": "Matte white, 10l", "priority": "HIGH", "dueDate": "2026-08-01T00:00:00Z", "listId": "019f7488-…"}Solo title es obligatorio. Devuelve 201 con { "id": "…" }.
Parchear los campos de una tarea
Sección titulada «Parchear los campos de una tarea»PATCH /api/workspaces/{workspaceId}/tasks/{taskId}/fields{ "title": "New title", "dueDate": null }Actualización por máscara de campos para la sincronización sin conexión:
solo cambian los campos presentes en el cuerpo; un null explícito borra
el campo. Campos parcheables: title, description, priority,
dueDate, listId, assigneeId, blockedReason (un null explícito o un
valor en blanco desbloquea; se ignora en tareas DONE). A diferencia del
PUT, no hay control
de version — los cambios concurrentes sobre el mismo campo se resuelven
por orden de llegada: gana el último que escribe. Devuelve 204. Errores:
400 para un título vacío, 404 para una tarea desconocida.
Actualizar una tarea
Sección titulada «Actualizar una tarea»PUT /api/workspaces/{workspaceId}/tasks/{taskId}Actualización completa — envía todos los campos más la version que leíste
por última vez:
{ "title": "Buy paint", "description": null, "priority": "NORMAL", "dueDate": "2026-08-01T00:00:00Z", "listId": null, "assigneeId": "019f…", "version": 3}Devuelve 200. Una version desactualizada responde 409 — vuelve a leer y
reintenta. assigneeId debe ser un miembro del espacio de trabajo; null
quita la asignación.
Cambiar el estado
Sección titulada «Cambiar el estado»PATCH /api/workspaces/{workspaceId}/tasks/{taskId}{ "status": "IN_PROGRESS" }Acepta PENDING, IN_PROGRESS o DONE; poner DONE también borra
blockedReason. Devuelve 200. Este atajo no necesita version.
Copiar una tarea
Sección titulada «Copiar una tarea»POST /api/workspaces/{workspaceId}/tasks/{taskId}/copy{ "name": "Buy paint (copy)", "preserveCreator": false, "preserveAssignee": false, "includeSubtasks": true, "listId": null}Devuelve 201 con { "id": "…" }. Las copias se quedan en el mismo espacio
de trabajo; los archivos adjuntos nunca se copian. Los booleanos omitidos
toman los valores por defecto mostrados.
Mover una tarea a otro espacio de trabajo
Sección titulada «Mover una tarea a otro espacio de trabajo»POST /api/workspaces/{workspaceId}/tasks/{taskId}/move{ "targetWorkspaceId": "019f…" }Devuelve 200. Debes ser miembro de ambos espacios de trabajo. La persona
asignada se quita salvo que también sea miembro del destino; la asignación de
lista se quita; los archivos adjuntos se mueven con la tarea. Responde 413
cuando se excedería el límite de almacenamiento del espacio de trabajo de
destino.
Eliminar una tarea
Sección titulada «Eliminar una tarea»DELETE /api/workspaces/{workspaceId}/tasks/{taskId}Devuelve 204. Elimina la tarea con sus subtareas y referencias a archivos
adjuntos.
