Modelos
Recordatorio
Un recordatorio es algo que pasa a una hora o un día: una cita, una clase, un cumpleaños. No tiene estado: no se completa ni se descarta; cuando sobra, se borra.
Campos
idstringobligatoriotitlestringobligatoriodatenumber | nullobligatorioInstante (epoch ms); en uno recurrente, la primera ocurrencia.
null= sin fecha.allDaybooleanobligatorioSin hora;
datees la medianoche de ese día en la zona horaria de quien lo creó.recurrenceRecurrence | nullobligatorioRegla de recurrencia de la tarea. Los campos opcionales pueden estar ausentes.
Campos de Recurrence
frequencyRecurrenceFrequencyobligatoriointervalnumberdayOfWeeknumber0 = domingo … 6 = sábado.
dayOfMonthnumber-1 = último día del mes; si no, 1..31.
notifyNotifyobligatorioAviso del recordatorio.
onDay= avisar el día;daysBefore= días de antelación;minutesBefore= minutos antes de la hora (0 = a la hora; sin él, la antelación por defecto del usuario). En uno de todo el día el aviso sale al empezar la jornada.Campos de Notify
onDaybooleanobligatoriodaysBeforeintegerminutesBeforeinteger
No admite otros campos: uno desconocido responde
422.locationstring | nullobligatorionotesstring | nullobligatorioprojectIdstring | nullobligatoriocreatedByPersonobligatorioCuenta de SecretarIA. Sin correo a propósito.
Campos de Person
idstringobligatorionamestring | nullobligatorioNombre de pila;
nullsi la cuenta ya no existe.
createdAtnumberobligatorioexcludedKeysarray<string>obligatorioDías (
YYYY-MM-DD) quitados de un recurrente conDELETE ?scope=occurrence.
- Siempre presentes: un campo sin valor llega como
null; nunca se omite. - Fechas:
dateycreatedAtson milisegundos desde 1970, en UTC. - Al crear: solo
titlees obligatorio. Sinnotify, avisa el mismo día ({"onDay": true}).
Fecha y hora
datees el instante del recordatorio; en uno recurrente, su primera ocurrencia.nullsignifica sin fecha.allDay: truelo deja sin hora:datese lleva a la medianoche de ese día en la zona horaria de quien lo creó. Exigedate.
Avisos
notify decide cuándo llega la notificación:
onDay: avisar el día del recordatorio.daysBefore: días de antelación, de 0 a 365.minutesBefore: minutos antes de la hora, de 0 a 1440;0es a la hora. Sin él, se usa la antelación por defecto de la persona.
En uno de todo el día, el aviso sale al empezar la jornada.
Editar
PATCHsolo cambia los campos que envías, y al menos uno (422 empty_patchsi no).nullendate,recurrence,locationoprojectIdquita la fecha, la repetición, el lugar o el proyecto.allDay: truesindatelleva la fecha que ya tenía a la medianoche de su día.
Recurrencia
Un recordatorio se repite si lleva recurrence, con los mismos campos que una
tarea: frequency, interval, dayOfWeek y dayOfMonth. Necesita
date, que marca la primera ocurrencia.
A diferencia de las tareas, un recordatorio recurrente es un único objeto: no hay una ocurrencia por
día ni seriesId. Los días que se han quitado con DELETE ?scope=occurrence aparecen en
excludedKeys, como fechas YYYY-MM-DD en la zona horaria de quien lo creó.
Proyectos compartidos
Una clave ve y edita lo mismo que su dueño en la app: sus recordatorios y los de los proyectos en los que es propietario o miembro.
projectIdlo mete en un proyecto propio o compartido; a uno de otra persona responde403y a uno que no existe,404.- Cualquier miembro edita y borra los recordatorios del proyecto, pero solo quien lo creó cambia su
projectId: si no,403 forbidden. - Cada recordatorio lleva
createdBy, conidyname(nunca el correo). - Un proyecto archivado es de solo lectura: crear, editar o borrar sus recordatorios responde
409 project_archived. - Lo que el asistente deja pendiente de confirmar antes de compartir solo lo ve quien lo creó; para el
resto responde
404. La API nunca crea recordatorios pendientes.
Borrar
DELETE /reminders/{id} responde 204 sin cuerpo y es definitivo: deshacer solo existe dentro de la
app. Si el recordatorio se repite, tienes que indicar qué borrar:
?scope=occurrence&occurrenceKey=2026-12-25: solo ese día, que pasa aexcludedKeys. Tiene que ser hoy o después y un día en que el recordatorio ocurre; si no,422.?scope=series: el recordatorio entero.
Sin scope, la respuesta es 409 recurring_scope_required y no se borra nada.