Modelos
Tarea
Campos
idstringobligatoriotitlestringobligatoriostatusTaskStatusobligatoriopriorityTaskPriorityobligatorioprogressnumber | nullobligatorionotesstring | nullobligatorioprojectIdstring | nullobligatoriodeadlinenumber | nullobligatorioFin del intervalo o fecha exacta (epoch ms).
deadlineStartnumber | nullobligatorioInicio del intervalo (epoch ms).
deadlineTypeDeadlineType | nullobligatorioGranularidad del deadline (
deadline= fin o fecha exacta,deadlineStart= inicio opcional).recurrenceRecurrence | nullobligatorioSolo la lleva la ocurrencia pendiente de una serie; las completadas van con
null.Campos de Recurrence
frequencyRecurrenceFrequencyobligatoriointervalnumberdayOfWeeknumber0 = domingo … 6 = sábado.
dayOfMonthnumber-1 = último día del mes; si no, 1..31.
seriesIdstring | nullobligatorioSerie recurrente a la que pertenece (pendiente o completada);
nullsi nunca se repitió.createdAtnumberobligatorioupdatedAtnumberobligatoriocompletedAtnumber | nullobligatoriocreatedByPersonobligatorioCuenta de SecretarIA. Sin correo a propósito.
Campos de Person
idstringobligatorionamestring | nullobligatorioNombre de pila;
nullsi la cuenta ya no existe.
assigneePerson | nullobligatorioPersona asignada en un proyecto compartido;
null= sin asignar.Campos de Person
idstringobligatorionamestring | nullobligatorioNombre de pila;
nullsi la cuenta ya no existe.
- Siempre presentes: un campo sin valor llega como
null; nunca se omite. - Fechas: todos los timestamps son milisegundos desde 1970, en UTC.
- Al crear: si no los envías,
statusesbacklog,priorityesmediumyprogresses0.
Plazos
Un plazo puede ser una fecha exacta o un intervalo:
deadlinees el final del intervalo, o la fecha exacta.deadlineStartes el inicio, opcional.deadlineTypeindica la granularidad:exact,date,week,monthocustom.
Completar una tarea
PATCH con {"status": "done"}:
- La primera vez que se completa, fija
completedAty poneprogressa100. - Si es recurrente, se crea sola la siguiente ocurrencia.
- Volver a
backlogoin_progresslimpiacompletedAt.
Editar
PATCHno borra campos: no hay forma de vaciarnotesodeadlinedesde la API.- Solo
projectId,recurrenceyassigneeIdaceptannull: sin proyecto, deja de repetirse y sin asignar. - Mover la tarea a un proyecto de otra persona responde
403; a uno que no existe,404.
Recurrencia
Una tarea se repite si lleva recurrence:
frequency:daily,weekly,monthlyoyearly.interval: cada cuántos periodos, de 1 a 99.dayOfWeek: de 0 (domingo) a 6 (sábado).dayOfMonth: de 1 a 31, o -1 para el último día del mes.
Para repetirse, la tarea necesita un deadline (la primera ocurrencia) y no puede estar completada;
si no, la respuesta es 422. En un PATCH, un patrón nuevo se aplica desde la siguiente ocurrencia
(la actual conserva su fecha), y recurrence: null hace que deje de repetirse sin borrar la tarea.
Series
Las ocurrencias de una misma tarea recurrente comparten seriesId. Solo la pendiente lleva
recurrence; las completadas tienen recurrence: null y el mismo seriesId.
Proyectos compartidos
Una clave ve y edita lo mismo que su dueño en la app: sus tareas y las de los proyectos en los que es propietario o miembro.
- Cada tarea lleva
createdByyassignee, conidyname(nunca el correo). PATCHcon{"assigneeId": "…"}asigna la tarea a alguien del proyecto, ynullla deja sin asignar.- Las tareas privadas que crean las integraciones de otra persona no aparecen nunca: responden
404. - Un proyecto archivado es de solo lectura: editar o borrar sus tareas responde
409 project_archived.
Borrar
DELETE /tasks/{id} responde 204 sin cuerpo y es definitivo: deshacer solo existe dentro de la app.
Si la tarea es recurrente, tienes que indicar qué borrar:
?scope=occurrence: solo esta; la serie sigue con la siguiente.?scope=series: toda la serie. Se para y se borra la pendiente; las completadas se conservan.
Sin scope, la respuesta es 409 recurring_scope_required y no se borra nada.