Dashboard API
GET /dashboard
Returns weekly stats, streak data, and per-category progress for the current user. This is the primary data source for the home screen.
Auth required: Yes
Query parameters:
| Param | Type | Description |
|---|---|---|
user_date | string | User's local date (YYYY-MM-DD). Default: server date |
Response (200):
json
{
"week": {
"completed": 4,
"remaining": 3,
"overdue": 1,
"days": [
{
"label": "M",
"date": "2026-05-25",
"has_tasks": true,
"completed": true,
"task_count": 2,
"completed_count": 2,
"is_today": false
},
{
"label": "T",
"date": "2026-05-26",
"has_tasks": true,
"completed": false,
"task_count": 1,
"completed_count": 0,
"is_today": true
}
]
},
"streak": {
"current": 5,
"best": 12,
"streak_freeze_available": true
},
"categories": [
{
"name": "Health",
"icon_key": "heart",
"color": "health",
"completed": 2,
"total": 3
},
{
"name": "Finance",
"icon_key": "dollar-sign",
"color": "finance",
"completed": 1,
"total": 2
}
]
}Week Object
The days array always contains 7 entries (Monday through Sunday) for the week containing user_date. Each day indicates:
has_tasks-- whether any tasks are due on this daycompleted-- whether at least one task was completed on this daytask_count/completed_count-- raw counts for progress indicators
Streak Object
current-- consecutive days with at least one completionbest-- all-time best streakstreak_freeze_available-- whether the user can auto-freeze a gap (Pro/Family only, once per 7 days)
TIP
The streak freeze is applied automatically during streak calculation. If a Pro/Family user missed exactly one day and hasn't used a freeze in the last 7 days, the streak is preserved.
Categories Array
Per-category task progress for the current week. Only categories with tasks due this week are included.
bash
curl "http://localhost:3000/api/v1/dashboard?user_date=2026-05-26" \
-H "Authorization: Bearer <token>"