Dozer logoDozer
Get started
Dozer Docs
Collections

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 site
data_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

ParameterTypeKindDescription
shiftstringfilterWhich shift this covers (e.g. day or night).
statusstringfilterWhether the report is complete or still being filled in.
operatorstringfilterId of the operator who ran the shift.
equipmentstringfilterUnit id of the machine that was run (e.g. SS-01).
locationstringfilterPit or site the shift was worked at.
datestringfilterDay the shift was worked, as YYYY-MM-DD.
qstringsearchFree-text search across title.
sortstringsortOne of date, reported_at; prefix with - to reverse.
limitnumberpageRows to return, 1–100. Defaults to 20.
cursorstringpagenext_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

ParameterTypeKindDescription
idstringpathThe 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 loads
data_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

FieldTypeRequiredDescription
titlestringnoHeadline of the report.
shiftstringnoWhich shift this covers (e.g. day or night).
equipmentstringnoUnit id of the machine that was run (e.g. SS-01).
operatorstringnoId of the operator who ran the shift.
locationstringnoPit or site the shift was worked at.
datestringnoDay the shift was worked, as YYYY-MM-DD.
ending_hoursnumbernoEngine-hour reading on the machine at the end of the shift.
hours_workednumbernoHours the machine ran this shift — the end reading minus the start reading.
load_countnumbernoLoads moved during the shift.
tons_movednumbernoTonnage moved during the shift.
sluicing_hoursnumbernoHours spent sluicing — recorded for washplants and loaders.
downtime_hoursnumbernoHours the machine was down during the shift.
downtime_causestringnoWhat stopped the machine.
sourcestringnoHow the report arrived — always shift_report for rows filed by the end-of-shift flow.
eq_typestringnoMirror of the machine's type, stamped on the report so site aggregation never re-reads equipment.
shift_notesstringnoFree-text notes from the operator about the shift.
statusstringnoWhether 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

FieldTypeRequiredDescription
eventstringyesThe human-readable timeline entry.
contextobjectnoProvenance — 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.

FieldTypeDescription
objectstringAlways shift-report.
idstringStable object id. Also accepted in place of slug on any path.
slugstringURL-safe name, unique within the collection.
created_atstringISO-8601 timestamp of the first write.
updated_atstringISO-8601 timestamp of the most recent write. The cursor sorts on this.
shift_startstringWhen the shift started (ISO 8601), when known — an alternative to date for precise shifts.
reported_atstringWhen the report was submitted (ISO 8601).

Errors

Failures use { error: { type, code, message, param } }. The full code table is generated at Error Codes.