Stats
Overall dashboard stats
GET /api/dashboard/stats
Returns aggregate counts for the dashboard sidebar stats card — accepted jobs, recalls, revenue, and new jobs today.
Required permission: api.dashboard.stats.manageAccount types: Staff only
Chiplets count
GET /api/dashboard/chiplets-count
Returns counts for the configurable dashboard chiplets (mini-stat cards). Each entry includes a count and an available flag indicating whether the calling user has permission to view that chiplet.
Required permission: api.dashboard.chipletsAccount types: Staff, Agent
SecOps chiplets
GET /api/dashboard/secops-chiplets
Returns security-focused chiplet counts for Staff users with security dashboard access.
Required permission: api.dashboard.secops_chiplets.readAccount types: Staff only
Charts
Dashboard charts
GET /api/dashboard/charts
Returns time-series data for the dashboard chart panel — new jobs, accepted jobs, and overdue invoices over the last 7 days.
Required permission: api.dashboard.charts.manage
Jobs by type
GET /api/dashboard/jobs-by-type
Returns a breakdown of job counts grouped by job type — useful for pie or bar charts.
Required permission: api.dashboard.jobs_by_type.read
Filter to a specific job type name.
Filter to a specific job status name.
Search term to filter jobs.
Scope of the search field.
Search matching mode.
Job lists
New jobs
GET /api/dashboard/new-jobs
Returns a list of jobs created within the last 24 hours for the dashboard feed.
Required permission: api.dashboard.new_jobs.read
Completed jobs
GET /api/dashboard/completed-jobs
Returns a list of jobs marked as completed within the last 24 hours.
Required permission: api.dashboard.completed_jobs.read
Booked today
GET /api/dashboard/booked-today
Returns jobs with a works start date of today.
Required permission: api.dashboard.booked_today.read
Pass
true to filter to only overdue booked jobs.No contractor assigned
GET /api/dashboard/no-contractor
Returns open jobs that have not yet had a contractor assigned. Useful for identifying work that needs actioning.
Required permission: api.dashboard.no_contractor.read
Overdue quotes
GET /api/dashboard/overdue-quotes
Returns jobs where a quote has been outstanding beyond the SLA deadline.
Required permission: api.dashboard.overdue_quotes.read
Missing certifications
GET /api/dashboard/missing-certs
Returns jobs where the assigned contractor has at least one certification required for the job type that is missing or expired.
Required permission: api.dashboard.missing_certs.read
Only return jobs completed more than this many days ago without a certificate. Omit to return all.
Pinned jobs
GET /api/dashboard/pinned-jobs
Returns all jobs pinned by the authenticated user.
Required permission: api.dashboard.pinned_jobs.read
Pin filter scope. Defaults to
my_pins.Recall jobs
GET /api/dashboard/recall
Returns a list of jobs that have been recalled (completed and then reopened).
Required permission: api.dashboard.recall.read
Pass
true to enable advanced mode (larger default page size).Page number for pagination.
Results per page (1–100). Defaults to
5 in standard mode and 20 in advanced mode.Incomplete onboarding
GET /api/dashboard/incomplete-onboarding
Returns a count and list of users who have not yet completed the onboarding wizard. Staff only.
Required permission: api.dashboard.incomplete_onboarding.readAccount types: Staff only
Batch requests
Batch dashboard data
GET /api/dashboard/batch
Fetches multiple dashboard widgets in a single request, reducing round-trips for the initial page load. Each widget is loaded using its own permission check; widgets the caller lacks permission for are returned with success: false.
Required permission: api.dashboard.batch.read
Comma-separated list of widget names to fetch (maximum 6). Widget names correspond to the dashboard endpoint filenames:
stats, new-jobs, completed-jobs, booked-today, no-contractor, missing-certs, incomplete-onboarding, jobs-by-type, recall, pinned-jobs, overdue-quotes, chiplets-count.Update a job from the dashboard
POST /api/dashboard/update-job
Performs a quick status or completion-date update on a job directly from the dashboard. Uses a standard HTML form-encoded body (not JSON).
Required permission: api.dashboard.update_job.manage
Job UUID.
New status ID to set on the job. At least one of
status_id or date_completed must be provided.Completion date (
YYYY-MM-DD). If provided without status_id, the status is automatically set to 7 (Completed).Pass
true to suppress email notifications for this update.CSRF token. Obtain from
csrf_token() (also accepted as csrf_token).