putting a to-do at a time on its day, for how long, and when to be reminded
Times, lengths and reminders
A to-do's whenDate puts it on a day. Three more fields place it within that day:
| field | format | what it is |
|---|---|---|
whenTime |
HH:mm, 24-hour |
the start. Only meaningful with a whenDate |
durationMin |
whole minutes, 5 to 1440 | the length. It can exist without a start |
reminders |
up to 5 | when to notify, each one { "before": minutes } or { "at": "yyyy-MM-ddTHH:mm" } |
All three are local wall-clock values with no zone, like reminderTime: a to-do at 09:00 stays at 09:00 when the user travels. All three are end-to-end encrypted.
Setting a time
Send the fields on POST /v1/todos or PATCH /v1/todos/{id}. This puts a dentist appointment at 16:00 for an hour, with a reminder 15 minutes before:
curl -s -X PATCH "https://api.inittasks.com/v1/todos/$TODO" \
-H "Authorization: Bearer $INITTASKS_TOKEN" -H "Content-Type: application/json" \
-d '{"whenDate": "2026-10-12", "whenTime": "16:00", "durationMin": 60, "reminders": [{"before": 15}]}'The to-do comes back with the three fields as the apps read them:
{ "whenDate": "2026-10-12", "whenTime": "16:00", "durationMin": 60,
"reminders": [{ "before": 15 }], "reminderTime": "2026-10-12T15:45", "…": "…" }A start on a to-do with no date dates it today, as the apps do. Send ?today=yyyy-MM-dd with the user's local date so "today" is their day, not the server's UTC day. A start together with "whenDate": null is refused.
Reminders
A reminder is one of two kinds:
{ "before": 15 }counts back from the start:0is at the start,60an hour before,1440a day before,10080a week before. It needs awhenTime.{ "at": "2026-10-11T20:00" }is a fixed moment that stays put.
reminders replaces the whole list. A to-do holds at most 5, kept in the order they ring. Two reminders that ring at the same moment, a before with no start, or a sixth reminder are validation_failed with a pointer at the one that is wrong.
reminderTime is the earliest reminder. It is kept for clients that know only one reminder, and every write of the list rewrites it. Writing reminderTime on its own still works:
- on a to-do with no reminder list, it is the one reminder, exactly as before;
- on a to-do with a list, it replaces the earliest reminder and leaves the others.
Do not send reminderTime and reminders in one request.
What a date change does
The apps keep the three fields consistent with the date, and the API does the same, whichever field you change:
- Moving the date moves every
beforereminder with it. Fixedatreminders stay where they are. - Clearing the date (
"whenDate": null, parking in someday) drops the start and everybeforereminder. Fixed reminders and the length stay. - Removing the time (
"whenTime": null) drops the start and the length, and turns eachbeforereminder into a fixedatreminder at the moment it would have rung. Nothing the user set disappears without a trace.
Repeating to-dos
A repeating to-do keeps its time, length and before reminders on every occurrence. When you complete one:
- the completed copy keeps the time and the length, and no reminders;
- the next occurrence keeps the start, the length and the
beforereminders, and a fixed reminder on the old day moves to the new day.
MCP
create_todo and update_todo take time, duration_min and reminders, with reminders written { "before_min": 15 } or { "at": "2026-10-11T20:00" }. The to-dos the tools return carry time, duration_min, time_text (16:00–17:00 (1h)) and each reminder.
Good to know
- A
beforereminder's moment is computed in plain wall-clock minutes. Across a daylight-saving change, a device in that zone can ring it an hour apart from the computedreminderTime. The stored reminder is the same. - The deadline stays a date. It has no time.
- A length alone (no start) is a to-do that will take that long once it gets a time.
Next
- Dates and time zones for
whenDate,deadlineand whose day "today" is. - Recurrence for repeat rules.