11 routes
/views
11 routes.
The screens the apps draw, computed by the same engine they run. ⚠ Every one returns ID LISTS, never rows; resolve them against /todos, /notes and /containers. Pass ?today= with the user’s local date.
- GET /v1/views/overview
- GET /v1/views/all-tasks
- GET /v1/views/inbox
- GET /v1/views/today
- GET /v1/views/planned
- GET /v1/views/upcoming
- GET /v1/views/anytime
- GET /v1/views/someday
- GET /v1/views/notes
- GET /v1/views/completed
- GET /v1/views/logbook
GET /v1/views/overview
The overview view
The sidebar and the whole tree: the tree order (every live area, project and subproject, empty ones included), the badge counts (navCounts: inbox, today, overdue, planned, anytime, someday, overview, notes, completed, trash), the numbers the home screen shows (homeCounts), the progress pies, and the open to-dos with no project that are not waiting in the inbox. There is no inbox block any more; see /views/inbox. Ids only.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 OverviewView. The overview payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/all-tasks
The all tasks view (the overview)
The apps renamed the overview to “all tasks” (2026-10-02). This is the same payload as /views/overview, which stays and is not deprecated. The badge key is still navCounts.overview.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 OverviewView. The overview payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/inbox
The inbox view
The doorway: to-dos that have not been given a when or a where answer yet, and the open capture rows. A to-do leaves it the moment it is scheduled, parked, filed or marked "no project"; see sorted on the to-do.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 InboxView. The inbox payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/today
The today view
Pass ?today= with the USER’s local date. Without it the server uses its own day, which is wrong for anyone not in UTC.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 TodayView. The today payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/planned
The planned view
Everything scheduled after the reference day (it replaces upcoming and next 7 days): the next six days, always, then later.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 PlannedView. The planned payload: six day buckets plus the later days that hold something.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/upcoming
The planned view (deprecated alias)
Deprecated alias of /views/planned, kept so existing callers do not break. It answers the planned payload; the retired upcoming shape no longer exists.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 PlannedView. The planned payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/anytime
The anytime view
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 AnytimeView. The anytime payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/someday
The someday view
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 SomedayView. The someday payload, grouped by container.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/notes
The notes view
Three blocks in one payload: the note captures still in the inbox, then one group per area, project or subproject that holds notes, then the standalone notes. ⚠ Its scopes are not the pair the other views take, because it names inbox rows and note rows rather than to-dos. Ids only, as everywhere in /views.
Scopes: notes:read, containers:read, inbox:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
Response
- 200 NotesView. The notes payload.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/completed
The completed view
Completed to-dos (this was the logbook), grouped by local completion day, newest first.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
from |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
to |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
Response
- 200 CompletedView. Completed to-dos grouped by local completion day, newest first.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal
GET /v1/views/logbook
The completed view (deprecated alias)
Deprecated alias of /views/completed, kept so existing callers do not break.
Scopes: todos:read, containers:read
Query
| parameter | type | notes | |
|---|---|---|---|
today |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
tz |
string | optional | max 64 chars. An IANA time zone name (Europe/Amsterdam, Pacific/Auckland). It decides which calendar day an INSTANT falls in, which is the completed-day of doneToday, of every completed day group and of containerCompleted. Defaults to UTC; pass the user’s zone, the same one ?today= is computed in. |
from |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
to |
string (yyyy-MM-dd) | optional | max 10 chars. A calendar date, yyyy-MM-dd. No time and no zone, so it is the same day everywhere. |
Response
- 200 CompletedView. Completed to-dos grouped by local completion day, newest first.
Errors: grant_expired * grant_revoked * unauthorized * forbidden_scope * account_too_large * validation_failed * rate_limited * internal