Shift Reports
What each shift moved, and what stopped it.
Base path /api/v1/shift-reports on https://trydozer.com. Authenticate with Authorization: Bearer $DASH_API_KEY and name the project with the Project-ID header. Writes are validated in declared mode; an operation this resource does not declare answers 405 operation_not_supported.
List shift reports
GET /api/v1/shift-reports
curl "https://trydozer.com/api/v1/shift-reports?status=approved" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_northpit"Show me today's shift reports by sitedata_query {
"collection": "shift_reports",
"where": {
"status": "approved"
}
}Returns a paginated list of shift-report objects, newest first.
{
"object": "list",
"data": [
{
"object": "shift-report",
"id": "obj_123",
"title": "title",
"shift": "shift",
"equipment": "HT-14",
"operator": "dan-whitfield",
"location": "North Pit",
"date": "2026-07-28",
"ending_hours": 11850,
"hours_worked": 8,
"load_count": 24,
"tons_moved": 480,
"sluicing_hours": 1,
"downtime_hours": 1,
"downtime_cause": "Wash plant clog",
"shift_notes": "shift notes",
"status": "approved",
"reported_at": "2026-07-25T12:00:00.000Z",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
shift | string | filter | Which shift this covers (e.g. day or night). |
status | string | filter | Whether the report is complete or still being filled in. |
operator | string | filter | Id of the operator who ran the shift. |
equipment | string | filter | Unit id of the machine that was run (e.g. SS-01). |
location | string | filter | Pit or site the shift was worked at. |
date | string | filter | Day the shift was worked, as YYYY-MM-DD. |
q | string | search | Free-text search across title. |
sort | string | sort | One of date, reported_at; prefix with - to reverse. |
limit | number | page | Rows to return, 1–100. Defaults to 20. |
cursor | string | page | next_cursor from the previous page. |
Retrieve a shift-report
GET /api/v1/shift-reports/a60h-12
curl "https://trydozer.com/api/v1/shift-reports/a60h-12" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_northpit"Open the shift-report {id}data_get {
"collection": "shift_reports",
"object_id": "a60h-12"
}Returns the shift-report object.
{
"object": "shift-report",
"id": "obj_123",
"title": "title",
"shift": "shift",
"equipment": "HT-14",
"operator": "dan-whitfield",
"location": "North Pit",
"date": "2026-07-28",
"ending_hours": 11850,
"hours_worked": 8,
"load_count": 24,
"tons_moved": 480,
"sluicing_hours": 1,
"downtime_hours": 1,
"downtime_cause": "Wash plant clog",
"shift_notes": "shift notes",
"status": "approved",
"reported_at": "2026-07-25T12:00:00.000Z",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}Parameters
| Parameter | Type | Kind | Description |
|---|---|---|---|
id | string | path | The shift-report's id or slug. |
Create a shift-report
POST /api/v1/shift-reports
curl -X POST "https://trydozer.com/api/v1/shift-reports" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_northpit" \
-H "Content-Type: application/json" \
-d '{"equipment":"HT-14","operator":"dan-whitfield","location":"North Pit","date":"2026-07-28","ending_hours":11850,"hours_worked":8,"source":"shift_report","eq_type":"truck","load_count":24,"tons_moved":480}'File the end-of-shift report for HT-14 — 8 hours, 24 loadsdata_set {
"collection": "shift_reports",
"object_id": "a60h-12",
"data": {
"equipment": "HT-14",
"operator": "dan-whitfield",
"location": "North Pit",
"date": "2026-07-28",
"ending_hours": 11850,
"hours_worked": 8,
"source": "shift_report",
"eq_type": "truck",
"load_count": 24,
"tons_moved": 480
}
}Returns the shift-report object.
{
"object": "shift-report",
"id": "obj_123",
"title": "title",
"shift": "shift",
"equipment": "HT-14",
"operator": "dan-whitfield",
"location": "North Pit",
"date": "2026-07-28",
"ending_hours": 11850,
"hours_worked": 8,
"load_count": 24,
"tons_moved": 480,
"sluicing_hours": 1,
"downtime_hours": 1,
"downtime_cause": "Wash plant clog",
"shift_notes": "shift notes",
"status": "approved",
"reported_at": "2026-07-25T12:00:00.000Z",
"created_at": "2026-07-25T12:00:00.000Z",
"updated_at": "2026-07-25T12:00:00.000Z"
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
title | string | no | Headline of the report. |
shift | string | no | Which shift this covers (e.g. day or night). |
equipment | string | no | Unit id of the machine that was run (e.g. SS-01). |
operator | string | no | Id of the operator who ran the shift. |
location | string | no | Pit or site the shift was worked at. |
date | string | no | Day the shift was worked, as YYYY-MM-DD. |
ending_hours | number | no | Engine-hour reading on the machine at the end of the shift. |
hours_worked | number | no | Hours the machine ran this shift — the end reading minus the start reading. |
load_count | number | no | Loads moved during the shift. |
tons_moved | number | no | Tonnage moved during the shift. |
sluicing_hours | number | no | Hours spent sluicing — recorded for washplants and loaders. |
downtime_hours | number | no | Hours the machine was down during the shift. |
downtime_cause | string | no | What stopped the machine. |
source | string | no | How the report arrived — always shift_report for rows filed by the end-of-shift flow. |
eq_type | string | no | Mirror of the machine's type, stamped on the report so site aggregation never re-reads equipment. |
shift_notes | string | no | Free-text notes from the operator about the shift. |
status | string | no | Whether the report is complete or still being filled in. |
Append an event to a shift-report
POST /api/v1/shift-reports/{id}/events
curl -X POST "https://trydozer.com/api/v1/shift-reports/a60h-12/events" \
-H "Authorization: Bearer $DASH_API_KEY" \
-H "Project-ID: pr_northpit" \
-H "Content-Type: application/json" \
-d '{"event":"Noted by the operator","context":{"source":"api"}}'Add a note to the shift-report {id}data_event {
"collection": "shift_reports",
"object_id": "a60h-12",
"event": "Noted by the operator"
}Returns the appended event object.
{
"object": "event",
"id": "evt_123",
"event": "Noted by the operator"
}Parameters
| Field | Type | Required | Description |
|---|---|---|---|
event | string | yes | The human-readable timeline entry. |
context | object | no | Provenance — source, integration, worker_run_id, … |
What comes back (read-only)
Every shift-report carries the envelope below. The fields under it are computed or stamped by the platform — they are returned, never sent.
| Field | Type | Description |
|---|---|---|
object | string | Always shift-report. |
id | string | Stable object id. Also accepted in place of slug on any path. |
slug | string | URL-safe name, unique within the collection. |
created_at | string | ISO-8601 timestamp of the first write. |
updated_at | string | ISO-8601 timestamp of the most recent write. The cursor sorts on this. |
shift_start | string | When the shift started (ISO 8601), when known — an alternative to date for precise shifts. |
reported_at | string | When the report was submitted (ISO 8601). |
Errors
Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.