Skip to content

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.

GET /api/dashboard/quote

Returns today’s AI-generated motivational quote. Generates and caches one per day using Workers AI.

Response: { quote }

GET /api/dashboard/summary

Returns personal stats for the current user or aggregate stats for a squad.

Query parameters:

ParamTypeDescription
squad_idstringOptional 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.

GET /api/dashboard/squad-summary

Access: Lead+ or explicit squad_id

Returns squad-level KPIs including billable utilisation, invoice totals, report status, and scorecard completion.

Query parameters:

ParamTypeDescription
squad_idstringOptional 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"
}
GET /api/dashboard/schedule

Returns today’s meetings from Google Calendar for the current user or squad members.

Query parameters:

ParamTypeDescription
squad_idstringOptional 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.

GET /api/dashboard/focus

Returns a prioritised list of items needing attention (up to 6).

Query parameters:

ParamTypeDescription
squad_idstringOptional squad ID

Response: { items }

Focus items are sourced from:

  1. Upcoming meetings (next 4 hours)
  2. Missing time entries this week
  3. Overdue action items
  4. Pending deals

Each item has id, title, subtitle, category, and link.

GET /api/dashboard/deadlines

Returns upcoming tasks with due dates (up to 10) that are not done or cancelled.

Query parameters:

ParamTypeDescription
squad_idstringOptional squad ID

Response: { items }

Each item includes id, title, due_date, days_until, priority_color, and priority_label.

GET /api/dashboard/team

Access: Lead+ or explicit squad_id

Returns per-member workload stats for the squad.

Query parameters:

ParamTypeDescription
squad_idstringOptional 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.

GET /api/dashboard/activity

Returns recent activity feed entries (up to 20). For leads+, includes squad member activity.

Query parameters:

ParamTypeDescription
squad_idstringOptional squad ID

Response: { items }

Each item includes actor_name, actor_picture, action_text, resource_type, resource_id, timestamp, and icon_type.

GET /api/dashboard/billables

Returns daily billable/non-billable hours for the current month, used for the dashboard chart.

Query parameters:

ParamTypeDescription
scopestringme (default) or squad
squad_idstringOptional 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.