Ir al contenido

API: Tareas

{
"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.

GET /api/workspaces/{workspaceId}/tasks

Devuelve 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.

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": "…" }.

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.

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.

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.

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.

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.

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

Devuelve 204. Elimina la tarea con sus subtareas y referencias a archivos adjuntos.