Dashboard API
All endpoints require authentication. Most endpoints support an optional squad_id query parameter to view data for a specific squad instead of the current user. Squad-specific endpoints (without squad_id) require lead access level or above.
Daily Quote
Section titled “Daily Quote”GET /api/dashboard/quoteReturns today’s AI-generated motivational quote. Generates and caches one per day using Workers AI.
Response: { quote }
Personal Summary
Section titled “Personal Summary”GET /api/dashboard/summaryReturns personal stats for the current user or aggregate stats for a squad.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID to aggregate stats across squad members |
Response:
{ "actions": { "total", "completed", "open", "due_today", "overdue" }, "upcoming": { "due_this_week", "due_today" }, "in_progress": { "total", "in_progress", "in_review", "done" }, "overdue": { "count", "most_overdue_days" }, "hours": { "capacity", "worked", "billable", "utilization", "weekly_capacity" }}Hours are for the current month. Capacity assumes 40 hours/week per member.
Squad Summary
Section titled “Squad Summary”GET /api/dashboard/squad-summaryAccess: Lead+ or explicit squad_id
Returns squad-level KPIs including billable utilisation, invoice totals, report status, and scorecard completion.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID (skips role check when provided) |
Response:
{ "squad", "billables": { "capacity", "worked", "billable", "utilization" }, "invoices": { "invoiced", "target", "percentage" }, "reports": { "sent", "expected" }, "scorecards": { "total", "completed", "overdue" }, "member_count"}Schedule
Section titled “Schedule”GET /api/dashboard/scheduleReturns today’s meetings from Google Calendar for the current user or squad members.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID to fetch all members’ calendars |
Response: { items }
Each item includes id, title, start_time, end_time, duration_minutes, and location. Events are deduplicated by ID.
Focus Items
Section titled “Focus Items”GET /api/dashboard/focusReturns a prioritised list of items needing attention (up to 6).
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID |
Response: { items }
Focus items are sourced from:
- Upcoming meetings (next 4 hours)
- Missing time entries this week
- Overdue action items
- Pending deals
Each item has id, title, subtitle, category, and link.
Deadlines
Section titled “Deadlines”GET /api/dashboard/deadlinesReturns upcoming tasks with due dates (up to 10) that are not done or cancelled.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID |
Response: { items }
Each item includes id, title, due_date, days_until, priority_color, and priority_label.
Team Workloads
Section titled “Team Workloads”GET /api/dashboard/teamAccess: Lead+ or explicit squad_id
Returns per-member workload stats for the squad.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID (skips role check when provided) |
Response: { members }
Each member includes id, name, picture, task_count, action_count, overdue_count, done_pct, in_progress_pct, and todo_pct.
Activity Feed
Section titled “Activity Feed”GET /api/dashboard/activityReturns recent activity feed entries (up to 20). For leads+, includes squad member activity.
Query parameters:
| Param | Type | Description |
|---|---|---|
squad_id | string | Optional squad ID |
Response: { items }
Each item includes actor_name, actor_picture, action_text, resource_type, resource_id, timestamp, and icon_type.
Billables Chart
Section titled “Billables Chart”GET /api/dashboard/billablesReturns daily billable/non-billable hours for the current month, used for the dashboard chart.
Query parameters:
| Param | Type | Description |
|---|---|---|
scope | string | me (default) or squad |
squad_id | string | Optional squad ID |
Response:
{ "days": [{ "date", "day", "day_label", "billable_hours", "non_billable_hours", "is_today", "is_weekend", "is_future" }], "target_per_day", "total_billable", "total_non_billable", "total_capacity", "utilization_pct", "member_count"}Target per day is 8 hours per member. Capacity only counts weekdays.