Dozer logoDozer
Get started
Dozer Docs
Collections

Dashboards

Boards that put a site's live state on a screen.

Base path /api/v1/dashboards 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 dashboards

GET /api/v1/dashboards

curl "https://trydozer.com/api/v1/dashboards?status=active" \
  -H "Authorization: Bearer $DASH_API_KEY" \
  -H "Project-ID: pr_northpit"
Which dashboards are live right now?
data_query {
  "collection": "dashboards",
  "where": {
    "status": "active"
  }
}

Returns a paginated list of dashboard objects, newest first.

{
  "object": "list",
  "data": [
    {
      "object": "dashboard",
      "id": "obj_123",
      "name": "Washplants",
      "status": "active",
      "created_at": "2026-07-25T12:00:00.000Z",
      "updated_at": "2026-07-25T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Parameters

ParameterTypeKindDescription
statusstringfilterWhether the dashboard is live on screens or parked.
locationstringfilterPit or yard the board covers.
qstringsearchFree-text search across name, site_name.
sortstringsortOne of updated_at, name; prefix with - to reverse.
limitnumberpageRows to return, 1–100. Defaults to 20.
cursorstringpagenext_cursor from the previous page.

Retrieve a dashboard

GET /api/v1/dashboards/a60h-12

curl "https://trydozer.com/api/v1/dashboards/a60h-12" \
  -H "Authorization: Bearer $DASH_API_KEY" \
  -H "Project-ID: pr_northpit"
Show me the Washplants board
data_get {
  "collection": "dashboards",
  "object_id": "a60h-12"
}

Returns the dashboard object.

{
  "object": "dashboard",
  "id": "obj_123",
  "name": "Washplants",
  "status": "active",
  "created_at": "2026-07-25T12:00:00.000Z",
  "updated_at": "2026-07-25T12:00:00.000Z"
}

Parameters

ParameterTypeKindDescription
idstringpathThe dashboard's id or slug.

Create a dashboard

POST /api/v1/dashboards

curl -X POST "https://trydozer.com/api/v1/dashboards" \
  -H "Authorization: Bearer $DASH_API_KEY" \
  -H "Project-ID: pr_northpit" \
  -H "Content-Type: application/json" \
  -d '{"name":"name","status":"status","site_name":"site name"}'
Create a new dashboard
data_set {
  "collection": "dashboards",
  "object_id": "a60h-12",
  "data": {
    "name": "name",
    "status": "status",
    "site_name": "site name"
  }
}

Returns the dashboard object.

{
  "object": "dashboard",
  "id": "obj_123",
  "name": "Washplants",
  "status": "active",
  "created_at": "2026-07-25T12:00:00.000Z",
  "updated_at": "2026-07-25T12:00:00.000Z"
}

Parameters

FieldTypeRequiredDescription
namestringnoName of the dashboard, shown as its heading on the TV.
statusstringnoWhether the dashboard is live on screens or parked.
site_namestringnoSite this board is about, as the crew names it (e.g. Washplants B).
locationstringnoPit or yard the board covers.
time_zonestringnoIANA time zone the board renders its clocks and ages in.
themestringnodark or light. Anything else is read as dark.
layoutstringnoWhich TV arrangement the board renders in: auto, primary_tablet, summary_grid, or washplant_split.
refresh_interval_secondsnumbernoHow often the TV re-reads its data, in seconds. Floored at 5.
linked_equipmentstringnoMachine this board is pinned to, when it is about one.
settingsobjectnoBoard-level display options.
widgetsarraynoThe tiles on the board. Each binds to ONE data object (source.collection + source.object_id) and reads its values off that object — see the TV widget contract in agents/dozer/lib/tv-widget-contract.ts (carried verbatim by the setup skill).

Update a dashboard

PATCH /api/v1/dashboards/a60h-12

curl -X PATCH "https://trydozer.com/api/v1/dashboards/a60h-12" \
  -H "Authorization: Bearer $DASH_API_KEY" \
  -H "Project-ID: pr_northpit" \
  -H "Content-Type: application/json" \
  -d '{"name":"name","status":"status","site_name":"site name"}'
Update the dashboard {id}
data_set {
  "collection": "dashboards",
  "object_id": "a60h-12",
  "data": {
    "name": "name",
    "status": "status",
    "site_name": "site name"
  }
}

Returns the dashboard object.

{
  "object": "dashboard",
  "id": "obj_123",
  "name": "Washplants",
  "status": "active",
  "created_at": "2026-07-25T12:00:00.000Z",
  "updated_at": "2026-07-25T12:00:00.000Z"
}

Parameters

FieldTypeRequiredDescription
namestringnoName of the dashboard, shown as its heading on the TV.
statusstringnoWhether the dashboard is live on screens or parked.
site_namestringnoSite this board is about, as the crew names it (e.g. Washplants B).
locationstringnoPit or yard the board covers.
time_zonestringnoIANA time zone the board renders its clocks and ages in.
themestringnodark or light. Anything else is read as dark.
layoutstringnoWhich TV arrangement the board renders in: auto, primary_tablet, summary_grid, or washplant_split.
refresh_interval_secondsnumbernoHow often the TV re-reads its data, in seconds. Floored at 5.
linked_equipmentstringnoMachine this board is pinned to, when it is about one.
settingsobjectnoBoard-level display options.
widgetsarraynoThe tiles on the board. Each binds to ONE data object (source.collection + source.object_id) and reads its values off that object — see the TV widget contract in agents/dozer/lib/tv-widget-contract.ts (carried verbatim by the setup skill).

Delete a dashboard

DELETE /api/v1/dashboards/a60h-12

curl -X DELETE "https://trydozer.com/api/v1/dashboards/a60h-12" \
  -H "Authorization: Bearer $DASH_API_KEY" \
  -H "Project-ID: pr_northpit"
Delete the dashboard {id}
data_delete {
  "collection": "dashboards",
  "object_id": "a60h-12"
}

Returns the deleted dashboard object with deleted: true.

{
  "object": "dashboard",
  "id": "obj_123",
  "deleted": true
}

Parameters

ParameterTypeKindDescription
idstringpathThe dashboard's id or slug.

Append an event to a dashboard

POST /api/v1/dashboards/{id}/events

curl -X POST "https://trydozer.com/api/v1/dashboards/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 dashboard {id}
data_event {
  "collection": "dashboards",
  "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 dashboard carries the envelope below. The fields under it are computed or stamped by the platform — they are returned, never sent.

FieldTypeDescription
objectstringAlways dashboard.
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.
last_live_data_atstringWhen data behind this board last arrived (ISO 8601). Stamped by the telemetry path.
shareobjectPublic-share state for the board — whether a scoped TV share link exists. Owned by the share-token flow, not set on a board write.

Errors

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