API REFERENCE

API reference.

HOLOIN API: every route an installation serves — 333 operations in 46 groups — generated from the running code.

Read-only: your installation serves the same document, live, at /api/docs. Every route takes a bearer token (a user session or an API key) unless marked public.

Agriculture

  • GET/api/farms
  • POST/api/farms

    body FarmDto

  • GET/api/farms/{id}

    id (path, number, required)

  • PUT/api/farms/{id}

    id (path, number, required)body UpdateFarmDto

  • DELETE/api/farms/{id}

    id (path, number, required)

  • GET/api/farms/{id}/fields

    id (path, number, required)

  • POST/api/farms/{id}/fields

    id (path, number, required)body FieldDto

  • GET/api/fields/{id}

    id (path, number, required)

  • PUT/api/fields/{id}

    id (path, number, required)body UpdateFieldDto

  • DELETE/api/fields/{id}

    id (path, number, required)

  • GET/api/fields/{id}/twin

    id (path, number, required)

  • GET/api/fields/{id}/zones

    id (path, number, required)

  • POST/api/fields/{id}/zones

    id (path, number, required)body ZoneDto

  • GET/api/zones/{id}

    id (path, number, required)

  • PUT/api/zones/{id}

    id (path, number, required)body UpdateZoneDto

  • DELETE/api/zones/{id}

    id (path, number, required)

  • GET/api/crops
  • POST/api/crops

    body CropDto

  • GET/api/crops/{id}

    id (path, number, required)

  • GET/api/farms/{id}/irrigation-groups

    id (path, number, required)

  • POST/api/farms/{id}/irrigation-groups

    id (path, number, required)body GroupDto

  • GET/api/irrigation-groups/{id}

    id (path, number, required)

  • PUT/api/irrigation-groups/{id}

    id (path, number, required)body UpdateGroupDto

  • DELETE/api/irrigation-groups/{id}

    id (path, number, required)

  • GET/api/irrigation-groups/{id}/schedules

    id (path, number, required)

  • POST/api/irrigation-groups/{id}/schedules

    id (path, number, required)body ScheduleDto

  • PUT/api/irrigation-schedules/{id}

    id (path, number, required)body UpdateScheduleDto

  • DELETE/api/irrigation-schedules/{id}

    id (path, number, required)

  • POST/api/irrigation-groups/{id}/start

    id (path, number, required)body StartRunDto

  • POST/api/irrigation-runs/{id}/abort

    id (path, number, required)

  • GET/api/irrigation-runs

    farmId (query, number)groupId (query, number)from (query, string)to (query, string)status (query, "starting" | "running" | "stopping" | "completed" | "aborted" | "failed")limit (query, number)

  • GET/api/farms/{id}/water

    id (path, number, required)from (query, string)to (query, string)by (query, "day" | "zone" | "field")

Alarms

  • GET/api/alarms
  • GET/api/alarms/{id}

    id (path, number, required)

  • POST/api/alarms/{id}/acknowledge

    id (path, number, required)body AlarmNoteDto

  • POST/api/alarms/{id}/clear

    id (path, number, required)body AlarmNoteDto

  • POST/api/alarms/{id}/notes

    id (path, number, required)body AlarmNoteDto

API keys

  • GET/api/api-keys
  • POST/api/api-keys

    body CreateApiKeyDto

  • POST/api/api-keys/{id}/revoke

    id (path, number, required)

Audit log

  • GET/api/audit-log
  • GET/api/audit-log/export
  • GET/api/auth-events

Auth

  • POST/api/auth/loginpublic

    body LoginDto

  • POST/api/auth/login/mfapublic

    body LoginMfaDto

  • POST/api/auth/discoverpublic

    body DiscoverDto

  • GET/api/auth/sso/startpublic

    provider (query, string, required)

  • GET/api/auth/sso/callbackpublic
  • POST/api/auth/sso/exchangepublic

    body ExchangeDto

  • POST/api/auth/sso/refresh

Buildings

  • GET/api/buildings
  • POST/api/buildings

    body BuildingDto

  • POST/api/buildings/import

    body ImportBuildingsDto

  • GET/api/buildings/{id}

    id (path, number, required)

  • PUT/api/buildings/{id}

    id (path, number, required)body UpdateBuildingDto

  • DELETE/api/buildings/{id}

    id (path, number, required)

  • GET/api/buildings/{id}/models

    id (path, number, required)

  • POST/api/buildings/{id}/models

    id (path, number, required)body CreateModelDto

  • GET/api/buildings/{id}/floors

    id (path, number, required)

  • POST/api/buildings/{id}/floors

    id (path, number, required)body FloorDto

  • GET/api/floors/{id}

    id (path, number, required)

  • PUT/api/floors/{id}

    id (path, number, required)body UpdateFloorDto

  • DELETE/api/floors/{id}

    id (path, number, required)

  • GET/api/floors/{id}/plan

    id (path, number, required)

  • POST/api/floors/{id}/plan

    id (path, number, required)

  • PATCH/api/floors/{id}/plan

    id (path, number, required)body PlanScaleDto

  • GET/api/floors/{id}/rooms

    id (path, number, required)

  • POST/api/floors/{id}/rooms

    id (path, number, required)body RoomDto

  • GET/api/rooms/{id}/outline

    id (path, number, required)

  • PUT/api/rooms/{id}/outline

    id (path, number, required)body OutlineDto

  • GET/api/rooms/{id}

    id (path, number, required)

  • PUT/api/rooms/{id}

    id (path, number, required)body UpdateRoomDto

  • DELETE/api/rooms/{id}

    id (path, number, required)

  • GET/api/room-types
  • GET/api/models/{id}

    id (path, number, required)

  • DELETE/api/models/{id}

    id (path, number, required)

  • GET/api/models/{id}/bindings

    id (path, number, required)

  • PUT/api/models/{id}/bindings

    id (path, number, required)body ModelBindingsDto

  • GET/api/models/{id}/geometry

    id (path, number, required)

Commands

  • POST/api/devices/{id}/commands

    id (path, number, required)body RequestCommandDto

  • GET/api/commands

    deviceId (query, string, required)status (query, string, required)limit (query, string, required)

  • GET/api/commands/{id}

    id (path, number, required)

Compliance documents

  • GET/api/compliance-documents

    documentableType (query, "driver" | "vehicle")documentableId (query, number)

  • POST/api/compliance-documents

    body CreateComplianceDocumentDto

  • GET/api/compliance-documents/expiring-soon

Connectors

  • GET/api/connectors/wasl

Demo & scenarios

  • GET/api/demo
  • POST/api/demo/scenarios/{key}/run

    key (path, string, required)body RunDto

  • GET/api/demo/runs/{id}

    id (path, number, required)

  • POST/api/demo/runs/{id}/stop

    id (path, number, required)

  • POST/api/demo/reset

Device homes

  • GET/api/device-homes

    homeKind (query, "vehicle" | "asset_component" | "field_zone" | "farm", required)homeId (query, number, required)

  • POST/api/device-homes

    body PlaceDeviceDto

  • PATCH/api/device-homes/{id}

    id (path, number, required)body MoveDeviceDto

  • DELETE/api/device-homes/{id}

    id (path, number, required)

Device packets

  • GET/api/devices/{id}/packets

    id (path, number, required)status (query, string, required)limit (query, string, required)

  • POST/api/devices/{id}/packets/replay

    id (path, number, required)

Devices

  • GET/api/devices

    q (query, string, required)

  • POST/api/devices

    body CreateDeviceDto

  • GET/api/devices/unassigned

    capability (query, string, required)

Dispatch

  • GET/api/jobs

    status (query, string)date (query, string)tz (query, string)q (query, string)

  • POST/api/jobs

    body JobDto

  • POST/api/jobs/import

    body ImportJobsDto

  • GET/api/jobs/{id}

    id (path, number, required)

  • PUT/api/jobs/{id}

    id (path, number, required)body UpdateJobDto

  • DELETE/api/jobs/{id}

    id (path, number, required)

  • GET/api/trips

    date (query, string)tz (query, string)status (query, string)driverId (query, number)vehicleId (query, number)

  • POST/api/trips

    body TripDto

  • GET/api/trips/{id}

    id (path, number, required)

  • PUT/api/trips/{id}

    id (path, number, required)body UpdateTripDto

  • POST/api/trips/{id}/stops

    id (path, number, required)body StopInputDto

  • PUT/api/trips/{id}/stops/reorder

    id (path, number, required)body ReorderStopsDto

  • PUT/api/trips/{id}/stops/{stopId}

    id (path, number, required)stopId (path, number, required)body UpdateStopDto

  • DELETE/api/trips/{id}/stops/{stopId}

    id (path, number, required)stopId (path, number, required)

  • POST/api/trips/{id}/dispatch

    id (path, number, required)

  • POST/api/trips/{id}/cancel

    id (path, number, required)body ReasonDto

  • POST/api/trips/{id}/reassign

    id (path, number, required)body ReassignDto

  • GET/api/trips/{id}/events

    id (path, number, required)

  • GET/api/dispatch/board

    date (query, string, required)tz (query, string, required)

  • GET/api/dispatch/history

    from (query, string)to (query, string)driverId (query, number)vehicleId (query, number)q (query, string)

  • GET/api/dispatch/settings
  • PUT/api/dispatch/settings

    body DispatchSettingsDto

Driver app

  • GET/api/me/vehicle
  • GET/api/me/inspection-template
  • GET/api/me/inspections
  • GET/api/me/alerts
  • GET/api/me/documents
  • POST/api/me/incidents

    body ReportIncidentDto

  • POST/api/inspections

    body SubmitInspectionDto

  • GET/api/me/trips
  • GET/api/me/trips/{id}

    id (path, number, required)

  • POST/api/me/trips/{id}/accept

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/decline

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/start

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/pause

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/resume

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/end

    id (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/stops/{stopId}/arrive

    id (path, number, required)stopId (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/stops/{stopId}/depart

    id (path, number, required)stopId (path, number, required)body DriverActionDto

  • POST/api/me/trips/{id}/stops/{stopId}/complete

    id (path, number, required)stopId (path, number, required)

  • POST/api/me/trips/{id}/stops/{stopId}/fail

    id (path, number, required)stopId (path, number, required)

  • POST/api/me/trips/{id}/stops/{stopId}/skip

    id (path, number, required)stopId (path, number, required)body DriverActionDto

Drivers

  • GET/api/drivers

    q (query, string, required)

  • POST/api/drivers

    body CreateDriverDto

  • GET/api/drivers/{id}

    id (path, number, required)

  • PATCH/api/drivers/{id}

    id (path, number, required)body UpdateDriverDto

  • POST/api/drivers/{id}/login

    id (path, number, required)body CreateDriverLoginDto

  • POST/api/drivers/{id}/assign-vehicle

    id (path, number, required)body AssignVehicleDto

  • POST/api/drivers/{id}/unassign-vehicle

    id (path, number, required)

  • GET/api/drivers/{id}/incidents

    id (path, number, required)

  • POST/api/drivers/{id}/incidents

    id (path, number, required)body CreateDriverIncidentDto

Fleet positions

  • GET/api/fleet/positions
  • GET/api/fleet/devices/{deviceId}/history

    deviceId (path, number, required)limit (query, string, required)

Fuel

  • GET/api/vehicles/{id}/fuel-logs

    id (path, number, required)

  • POST/api/vehicles/{id}/fuel-logs

    id (path, number, required)body CreateFuelLogDto

Geofences

  • GET/api/geofences
  • POST/api/geofences

    body CreateGeofenceDto

  • GET/api/geofences/events

    alertsOnly (query, string, required)

  • GET/api/geofences/{id}

    id (path, number, required)

  • PUT/api/geofences/{id}

    id (path, number, required)body UpdateGeofenceDto

  • DELETE/api/geofences/{id}

    id (path, number, required)

  • GET/api/geofences/{id}/events

    id (path, number, required)alertsOnly (query, string, required)

Hardware catalog

  • GET/api/hardware-catalog

    category (query, string, required)

  • POST/api/hardware-catalog

    body CreateHardwareDto

  • GET/api/hardware-catalog/{id}

    id (path, number, required)

  • GET/api/hardware-catalog/{id}/export

    id (path, number, required)

Ingest (source token)

  • POST/api/ingest/chirpstack/{sourceId}
  • POST/api/ingest/traccar/{sourceId}

Inspections

Integration sources

  • GET/api/integration-sources
  • POST/api/integration-sources

    body CreateIntegrationSourceDto

  • POST/api/integration-sources/{id}/rotate-token

    id (path, number, required)

  • PATCH/api/integration-sources/{id}

    id (path, number, required)body UpdateSourceDto

  • DELETE/api/integration-sources/{id}

    id (path, number, required)

  • GET/api/integration-sources/{id}/health

    id (path, number, required)

  • GET/api/integration-sources/{id}/discover

    id (path, number, required)

Licence & capabilities

  • GET/api/capabilities
  • GET/api/licence
  • POST/api/licence
  • GET/api/licence/usage

Maintenance

  • GET/api/vehicles/{id}/maintenance-schedules

    id (path, number, required)

  • POST/api/vehicles/{id}/maintenance-schedules

    id (path, number, required)body CreateMaintenanceScheduleDto

  • GET/api/vehicles/{id}/maintenance-logs

    id (path, number, required)

  • POST/api/vehicles/{id}/maintenance-logs

    id (path, number, required)body CreateMaintenanceLogDto

Me

Meta

  • GET/api/meta/enums

Notifications

  • GET/api/notifications

    unread (query, string, required)limit (query, string, required)

  • POST/api/notifications/read-all
  • POST/api/notifications/{id}/read

    id (path, number, required)

  • GET/api/me/notification-preferences
  • PUT/api/me/notification-preferences

    body PreferencesDto

Operations

  • GET/api/metricspublic

    authorization (header, string, required)

  • GET/api/healthpublic
  • GET/api/readypublic

    detail (query, string, required)authorization (header, string, required)

  • GET/api/ops/support-bundle

    hours (query, string, required)

  • GET/api/ops/log-level
  • PUT/api/ops/log-level

    body LogLevelDto

Privacy (PDPL)

  • GET/api/drivers/{id}/export

    id (path, number, required)

  • POST/api/drivers/{id}/erase

    id (path, number, required)body EraseDriverDto

  • POST/api/users/{id}/erase

    id (path, number, required)body EraseUserDto

  • GET/api/compliance-report
  • GET/api/compliance-report/pdf
  • GET/api/files/signedpublic

Product measurements

  • GET/api/products/{id}/measurements

    id (path, number, required)

  • PUT/api/products/{id}/measurements

    id (path, number, required)body ReplaceMeasurementsDto

  • GET/api/products/{id}/mappings

    id (path, number, required)

  • PUT/api/products/{id}/mappings

    id (path, number, required)body ReplaceMappingsDto

Products

  • GET/api/device-templates
  • GET/api/products

    q (query, string, required)

  • POST/api/products

    body CreateProductDto

  • PATCH/api/products/{id}

    id (path, number, required)body UpdateProductDto

  • GET/api/products/{id}/hardware-update

    id (path, number, required)

  • POST/api/products/{id}/hardware-update/apply

    id (path, number, required)

Reports

  • GET/api/reports
  • GET/api/reports/{key}

    key (path, string, required)

Retention

  • GET/api/retention
  • POST/api/retention/run

Roles & permissions

  • GET/api/permissions
  • GET/api/role-templates
  • GET/api/roles
  • POST/api/roles

    body RoleDto

  • POST/api/roles/from-template

    body FromTemplateDto

  • GET/api/roles/{id}

    id (path, number, required)

  • PUT/api/roles/{id}

    id (path, number, required)body UpdateRoleDto

  • DELETE/api/roles/{id}

    id (path, number, required)

Rules

  • POST/api/rules/test

    hours (query, string, required)body RuleDto

  • GET/api/rules

    source (query, string, required)enabled (query, string, required)

  • POST/api/rules

    body RuleDto

  • GET/api/rules/types
  • GET/api/rules/options/{ref}

    ref (path, string, required)

  • GET/api/rules/{id}

    id (path, number, required)

  • PUT/api/rules/{id}

    id (path, number, required)body RuleDto

  • DELETE/api/rules/{id}

    id (path, number, required)

  • POST/api/rules/{id}/enable

    id (path, number, required)

  • POST/api/rules/{id}/disable

    id (path, number, required)

  • POST/api/rules/{id}/test

    id (path, number, required)hours (query, string, required)

  • GET/api/rules/{id}/states

    id (path, number, required)

  • GET/api/rules/{id}/events

    id (path, number, required)limit (query, string, required)

  • GET/api/rule-templates
  • POST/api/rule-templates

    body RuleTemplateDto

Settings

Single sign-on

  • GET/api/sso-providers
  • POST/api/sso-providers

    body CreateProviderDto

  • GET/api/sso-providers/{id}

    id (path, number, required)

  • PUT/api/sso-providers/{id}

    id (path, number, required)body ProviderDto

  • DELETE/api/sso-providers/{id}

    id (path, number, required)

  • POST/api/sso-providers/{id}/test

    id (path, number, required)

Support access

  • GET/api/support-sessions

    companyId (query, number)status (query, "pending" | "active" | "ended" | "declined" | "lapsed")limit (query, number)

  • POST/api/support-sessions

    body StartSupportDto

  • GET/api/support-sessions/companies
  • GET/api/support-sessions/{id}

    id (path, number, required)

  • GET/api/support-sessions/{id}/requests

    id (path, number, required)companyId (query, number)status (query, "pending" | "active" | "ended" | "declined" | "lapsed")limit (query, number)

  • POST/api/support-sessions/{id}/token

    id (path, number, required)

  • POST/api/support-sessions/{id}/approve

    id (path, number, required)

  • POST/api/support-sessions/{id}/decline

    id (path, number, required)body DeclineDto

  • POST/api/support-sessions/{id}/end

    id (path, number, required)

  • GET/api/support-consent
  • PUT/api/support-consent

    body ConsentDto

  • DELETE/api/support-consent

Twin

  • GET/api/twin/{homeKind}/{homeId}/history

    homeKind (path, string, required)homeId (path, number, required)

  • GET/api/twin/{homeKind}/{homeId}

    homeKind (path, string, required)homeId (path, number, required)

Users

  • GET/api/company-settings
  • PUT/api/company-settings

    body CompanySettingsDto

  • GET/api/users

    q (query, string)role (query, "admin" | "manager" | "user" | "driver" | "technician")roleId (query, number)status (query, "active" | "deactivated" | "erased")driverId (query, number)

  • POST/api/users

    body CreateUserDto

  • GET/api/users/{id}

    id (path, number, required)

  • PATCH/api/users/{id}

    id (path, number, required)body UpdateUserDto

  • POST/api/users/{id}/reset-password

    id (path, number, required)body ResetPasswordDto

  • POST/api/users/{id}/reset-mfa

    id (path, number, required)

  • POST/api/users/{id}/deactivate

    id (path, number, required)

  • POST/api/users/{id}/reactivate

    id (path, number, required)

Vehicle categories

Vehicles

  • GET/api/vehicles

    q (query, string, required)

  • POST/api/vehicles

    body CreateVehicleDto

  • GET/api/vehicles/{id}

    id (path, number, required)

  • PATCH/api/vehicles/{id}

    id (path, number, required)body UpdateVehicleDto

  • POST/api/vehicles/{id}/devices

    id (path, number, required)body InstallDeviceDto

  • DELETE/api/vehicles/{id}/devices/{deviceId}

    id (path, number, required)deviceId (path, number, required)

  • POST/api/vehicles/{id}/assign-device

    id (path, number, required)body AssignDeviceDto

  • POST/api/vehicles/{id}/unassign-device

    id (path, number, required)

Webhooks

  • GET/api/webhook-subscriptions
  • POST/api/webhook-subscriptions

    body CreateWebhookSubscriptionDto

  • GET/api/webhook-subscriptions/{id}

    id (path, number, required)

  • PUT/api/webhook-subscriptions/{id}

    id (path, number, required)body UpdateWebhookSubscriptionDto

  • DELETE/api/webhook-subscriptions/{id}

    id (path, number, required)

  • POST/api/webhook-subscriptions/{id}/rotate-secret

    id (path, number, required)

  • GET/api/webhook-subscriptions/{id}/deliveries

    id (path, number, required)status (query, string, required)limit (query, string, required)

  • POST/api/webhook-subscriptions/{id}/deliveries/{deliveryId}/replay

    id (path, number, required)deliveryId (path, number, required)

Work orders

  • GET/api/work-orders

    status (query, string)priority (query, "low" | "normal" | "high" | "urgent")componentId (query, number)assignedTo (query, number)alarmId (query, number)q (query, string)limit (query, number)

  • POST/api/work-orders

    body WorkOrderDto

  • GET/api/work-orders/assignees
  • GET/api/work-orders/{id}

    id (path, number, required)

  • PUT/api/work-orders/{id}

    id (path, number, required)body UpdateWorkOrderDto

  • POST/api/work-orders/{id}/assign

    id (path, number, required)body AssignDto

  • POST/api/work-orders/{id}/unassign

    id (path, number, required)

  • POST/api/work-orders/{id}/start

    id (path, number, required)

  • POST/api/work-orders/{id}/hold

    id (path, number, required)body ReasonDto

  • POST/api/work-orders/{id}/resume

    id (path, number, required)

  • POST/api/work-orders/{id}/done

    id (path, number, required)body DoneDto

  • POST/api/work-orders/{id}/cancel

    id (path, number, required)body ReasonDto

  • POST/api/work-orders/{id}/notes

    id (path, number, required)body NoteDto

  • POST/api/work-orders/{id}/photos

    id (path, number, required)

  • GET/api/me/work-orders
  • GET/api/me/work-orders/{id}

    id (path, number, required)

  • POST/api/me/work-orders/{id}/start

    id (path, number, required)body PhoneActionDto

  • POST/api/me/work-orders/{id}/hold

    id (path, number, required)body PhoneActionDto

  • POST/api/me/work-orders/{id}/resume

    id (path, number, required)body PhoneActionDto

  • POST/api/me/work-orders/{id}/done

    id (path, number, required)body PhoneActionDto

  • POST/api/me/work-orders/{id}/note

    id (path, number, required)body PhoneActionDto

  • POST/api/me/work-orders/{id}/photo

    id (path, number, required)

Yards

  • GET/api/yards
  • POST/api/yards

    body CreateYardDto

  • GET/api/yards/{id}

    id (path, number, required)

  • POST/api/yards/{id}/layout

    id (path, number, required)

  • POST/api/yards/{id}/slots

    id (path, number, required)body CreateYardSlotDto

  • PATCH/api/yard-slots/{id}

    id (path, number, required)body UpdateYardSlotDto

  • POST/api/yard-slots/{id}/check-in

    id (path, number, required)body CheckInDto

  • POST/api/yard-slots/{id}/check-out

    id (path, number, required)

Schemas

AlarmNoteDto 1 fields
FieldTypeNotes
notestringlength 0–2000
AssignDeviceDto 1 fields
FieldTypeNotes
deviceId *numberrange 1–∞
AssignDto 1 fields
FieldTypeNotes
userId *numberrange 1–∞
AssignVehicleDto 1 fields
FieldTypeNotes
vehicleId *numberrange 1–∞
BuildingDto 7 fields
FieldTypeNotes
name *stringlength 1–255
codestringUnique in the company across buildings, floors and rooms, e.g. "B1" · length 1–100 · nullable
addressstringlength 0–1000 · nullable
latitudenumbernullable
longitudenumbernullable
timezonestringIANA zone occupancy hours are judged in (an IANA time zone) · length 0–64
sortOrdernumber
CheckInDto 1 fields
FieldTypeNotes
vehicleId *numberrange 1–∞
CompanySettingsDto 2 fields
FieldTypeNotes
mfa"off" | "admins" | "everyone"
mfaPhone"off" | "required"
ConsentDto 2 fields
FieldTypeNotes
level *"read" | "full"
until *string
CreateApiKeyDto 3 fields
FieldTypeNotes
name *stringlength 0–255
scopes *"devices:read" | "devices:write" | "products:read" | "products:write" | "integrations:read" | "integrations:manage" | "twin:read" | "commands:write" | "rules:read" | "rules:manage" | "alarms:read" | "alarms:manage" | "fleet:read" | "fleet:write" | "agriculture:read" | "agriculture:manage" | "buildings:read" | "buildings:manage" | "work_orders:read" | "work_orders:manage" | "reports:read" | "ingest:write" | "webhooks:manage" | "admin" | "users:manage" | "roles:manage" | "api_keys:manage" | "audit:read" | "privacy:manage" | "licence:read" | "ops:read" | "hardware:manage" | "products:configure" | "integrations:configure" | "fleet:settings" | "fleet:categories" | "support:manage" | "sso:manage"[]
expiresAtstring
CreateComplianceDocumentDto 7 fields
FieldTypeNotes
documentableType *"driver" | "vehicle"
documentableId *numberrange 1–∞
documentType *stringlength 0–255
documentNumberstringlength 0–255
issueDatestring
expiryDatestring
notesstring
CreateDeviceDto 3 fields
FieldTypeNotes
name *stringlength 0–255
deviceUniqueIdentifier *stringThe devEui (LoRaWAN) or IMEI / Traccar uniqueId its packets carry. · length 0–255
productIdnumberrange 1–∞
CreateDriverDto 11 fields
FieldTypeNotes
firstName *stringlength 0–100
lastName *stringlength 0–100
emailstring (email)length 0–255
phonestringlength 0–50
licenseNumberstringlength 0–100
licenseClassstringlength 0–50
licenseExpiryDatestring
status"active" | "on_leave" | "suspended" | "terminated"
hireDatestring
identityNumberstringlength 0–50
identityTypestringlength 0–50
CreateDriverIncidentDto 5 fields
FieldTypeNotes
incidentType *stringlength 0–255
severity *"minor" | "moderate" | "severe"
incidentDate *string
descriptionstring
vehicleIdnumberrange 1–∞
CreateDriverLoginDto 2 fields
FieldTypeNotes
email *string (email)length 0–255
password *stringlength 8–200
CreateFuelLogDto 7 fields
FieldTypeNotes
fillDate *string
volume *numberrange 0.001–∞
unit *"liters" | "gallons"
coststring
odometerKmnumberrange 0–∞
isFullTankboolean
vendorstringlength 0–255
CreateGeofenceDto 7 fields
FieldTypeNotes
name *stringlength 0–255
centerLatitude *numberrange -90–90
centerLongitude *numberrange -180–180
radiusM *numberrange 1–∞
alertOn"enter" | "exit" | "both"
isActiveboolean
yardIdnumberrange 1–∞
CreateHardwareDto 14 fields
FieldTypeNotes
manufacturer *stringlength 0–100
model *stringlength 0–100
namestringlength 0–200
category *"environmental" | "energy" | "water" | "hvac" | "security" | "occupancy" | "industrial" | "transportation" | "agriculture" | "gateway" | "controller"
connectivity *string[]
radioProtocolDefaultstringlength 0–50
capabilitiesstring[]
parserRef *"chirpstack" | "traccar"
defaultMeasurements *MeasurementDto[]
twinHintsobject
firmwareMinstringlength 0–50
certificationsstring[]
datasheetUrlstringlength 0–500
notesstringlength 0–2000
CreateInspectionTemplateDto 4 fields
FieldTypeNotes
name *stringlength 0–255
vehicleCategoryIdnumberB4: the category by id. Omit both (or null) for the company's default checklist. · range 1–∞ · nullable
vehicleCategorystringLegacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable
items *TemplateItemDto[]
CreateIntegrationSourceDto 2 fields
FieldTypeNotes
name *stringlength 0–255
type *"chirpstack_http" | "traccar_http" | "generic_http" | "mqtt"
CreateMaintenanceLogDto 7 fields
FieldTypeNotes
maintenanceScheduleIdnumberrange 1–∞
serviceType *stringlength 0–255
serviceDate *string
odometerKmnumberrange 0–∞
coststring
vendorstringlength 0–255
notesstring
CreateMaintenanceScheduleDto 7 fields
FieldTypeNotes
serviceType *stringlength 0–255
intervalDaysnumberrange 1–∞
intervalKmnumberrange 1–∞
lastServiceDatestring
lastServiceOdometerKmnumberrange 0–∞
odometerBaselineKmnumberrange 0–∞
odometerBaselineDatestring
CreateModelDto 1 fields
FieldTypeNotes
source"generated"JSON { source: 'generated' }; an upload is multipart "file" (a GLB)
CreateProductDto 4 fields
FieldTypeNotes
namestringlength 0–255
hardwareIdnumberA hardware catalog item: its measurements are preloaded, its definition version pinned. · range 1–∞
templateKeystringDevice template key — one-release alias for a platform catalog item's key. · length 0–100
purposestringlength 0–500
CreateProviderDto 15 fields
FieldTypeNotes
name *stringlength 1–100
issuer *stringlength 0–500
clientId *stringlength 1–255
clientSecret *stringlength 1–1000
scopesstringlength 0–500
emailClaimstringlength 0–64
groupsClaimstringlength 0–64 · nullable
roleMappingRoleMapDto[]
defaultRoleIdnumberrange 1–∞ · nullable
jitboolean
requiredboolean
requireIdpMfaboolean
sessionHoursnumberrange 1–24
enabledboolean
domainsstring[]
CreateUserDto 7 fields
FieldTypeNotes
firstNamestringOptional for a driver login: taken from the driver record. · length 1–100
lastNamestringlength 1–100
email *string (email)length 0–255
password *stringlength 8–200
role"admin" | "manager" | "user" | "driver" | "technician"The kind of login: a company member (admin | manager | user — the system role of that name), driver or technician. Optional with roleId: a member, its mirror derived from the role.
roleIdnumberPhase E1: a member's role (GET /api/roles) — wins over `role`, which then only says "a member" · range 1–∞
driverIdnumberRequired for role driver: the driver record this login belongs to. · range 1–∞
CreateVehicleCategoryDto 2 fields
FieldTypeNotes
name *stringlength 0–100
sortOrdernumberPosition in lists; omitted = after the last one. · range 0–1000000
CreateVehicleDto 14 fields
FieldTypeNotes
name *stringlength 0–255
vehicleCategoryIdnumberB4: the category by id (GET /vehicle-categories). Wins over vehicleCategory; null clears. · range 1–∞ · nullable
vehicleCategorystringLegacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable
makestringlength 0–255
modelstringlength 0–255
lengthMnumberrange 0–∞
widthMnumberrange 0–∞
heightMnumberrange 0–∞
acquisitionDatestring
acquisitionCoststring
plateNumberstringlength 0–50
plateTypestringlength 0–50
sequenceNumberstringlength 0–50
vehicleTypestringlength 0–100
CreateWebhookSubscriptionDto 4 fields
FieldTypeNotes
name *stringlength 0–255
url *string (uri)length 0–2000
eventTypes *"vehicle.position" | "geofence.entered" | "geofence.exited" | "vehicle.tracker.assigned" | "vehicle.tracker.unassigned" | "vehicle.device.installed" | "vehicle.device.removed" | "yard.checked_in" | "yard.checked_out" | "maintenance.due" | "maintenance.logged" | "driver.assigned" | "driver.unassigned" | "compliance.expiring" | "compliance.expired" | "device.unknown_seen" | "device.decode_failed" | "inspection.submitted" | "rule.fired" | "rule.cleared" | "rule.custom" | "alarm.raised" | "alarm.acknowledged" | "alarm.cleared" | "trip.created" | "trip.dispatched" | "trip.accepted" | "trip.declined" | "trip.started" | "trip.paused" | "trip.resumed" | "trip.completed" | "trip.cancelled" | "trip.reassigned" | "trip.exception" | "stop.en_route" | "stop.arrived" | "stop.departed" | "stop.completed" | "stop.failed" | "stop.skipped" | "stop.eta_at_risk" | "stop.eta_late" | "irrigation.started" | "irrigation.completed" | "irrigation.aborted" | "irrigation.failed" | "irrigation.no_flow" | "irrigation.valve_stuck" | "irrigation.max_run" | "irrigation.schedule_missed" | "installation.backup_failed" | "installation.backup_late" | "installation.drill_failed" | "licence.device_limit_exceeded" | "work_order.created" | "work_order.assigned" | "work_order.started" | "work_order.held" | "work_order.resumed" | "work_order.done" | "work_order.cancelled"[]
positionIntervalSnumberrange 1–86400
CreateYardDto 4 fields
FieldTypeNotes
name *stringlength 0–255
addressstring
latitudenumberrange -90–90
longitudenumberrange -180–180
CreateYardSlotDto 5 fields
FieldTypeNotes
slotNumber *stringlength 0–50
positionX *numberrange 0–1
positionY *numberrange 0–1
maxLengthMnumberrange 0–∞
allowedCategoryIdsnumber[]B4: only vehicles of these categories may check in; omitted, null or [] = any. · nullable
CropDto 3 fields
FieldTypeNotes
name *stringlength 1–255
stages *object[][{ name, fromDay, toDay (null: open-ended last stage), moistureMinPct, moistureTargetPct, moistureMaxPct, ecMaxDsM?, kc?, rootDepthCm? (5–500: where a run's target moisture is judged) }]
notesstringlength 0–2000
DeclineDto 1 fields
FieldTypeNotes
notestringlength 0–1000
DiscoverDto 1 fields
FieldTypeNotes
email *string (email)length 0–255
DispatchSettingsDto 5 fields
FieldTypeNotes
roadFactornumberstraight line × this ≈ road distance (v1 ETA) · range 1–3
atRiskMinutesnumberrange 0–240
defaultSpeedKmhnumberrange 5–150
arrivalRadiusMnumberrange 20–5000
requirePhotoboolean
DoneDto 1 fields
FieldTypeNotes
resolution *stringlength 0–5000
DriverActionDto 6 fields
FieldTypeNotes
clientIdstring (uuid)The offline queue's id for this action — a replay is answered "Already received." (duplicate: true), not 422.
atstring
latitudenumber
longitudenumber
reasonstringlength 0–1000
odometerKmnumberrange 0–∞
EraseDriverDto 1 fields
FieldTypeNotes
confirmName *stringlength 1–250
EraseUserDto 1 fields
FieldTypeNotes
confirmEmail *stringlength 1–255
ExchangeDto 1 fields
FieldTypeNotes
code *stringlength 20–200
FarmDto 7 fields
FieldTypeNotes
name *stringlength 1–255
latitudenumber
longitudenumber
areaHanumberrange 0–1000000
timezonestringIANA zone the farm's schedules run in (an IANA time zone) · length 0–64
rainHoldMmnumberRain hold (design §4): rainfall over this many mm … (null = off) · range 0–1000 · nullable
rainHoldHoursnumber… in this many hours at the farm's weather station refuses a start · range 1–168
FieldDto 7 fields
FieldTypeNotes
name *stringlength 1–255
polygonobjectGeoJSON Polygon ([lng, lat] order); the area is computed from it · nullable
soilType"sand" | "loamy_sand" | "sandy_loam" | "loam" | "clay_loam" | "clay"nullable
cropIdnumberrange 1–∞ · nullable
plantingDatestringnullable
expectedHarveststringnullable
notesstringlength 0–2000 · nullable
FieldMappingDto 8 fields
FieldTypeNotes
path *stringlength 0–255
attribute *stringlength 0–100
label *stringlength 0–255
unitstringlength 0–50
valueType *"number" | "text" | "boolean"
semanticRole"latitude" | "longitude" | "speed" | "heading" | "battery" | "ignition" | "odometer" | "alarm" | "none" | "fuel_level" | "door" | "temperature_zone" | "soil_moisture" | "soil_temperature" | "soil_ec" | "water_flow" | "valve_state" | "pump_state" | "rainfall" | "wind_speed" | "rssi" | "air_temperature" | "water_volume" | "humidity" | "co2" | "occupancy" | "leak" | "setpoint" | "illuminance" | "sound_level" | "energy"
scalenumber
requiredboolean
FloorDto 6 fields
FieldTypeNotes
name *stringlength 1–255
codestringlength 1–100 · nullable
floorIndexnumber0 = ground, negative = basement; unique in the building · range -20–300 · nullable
elevationMnumberThe 3D viewer's floor height above ground and storey height (m) · range -200–2000 · nullable
heightMnumberrange 0.5–100 · nullable
sortOrdernumber
FromTemplateDto 2 fields
FieldTypeNotes
templateKey *stringlength 0–64
namestringlength 1–100
GroupDto 9 fields
FieldTypeNotes
name *stringlength 1–255
valveDeviceId *numberrange 1–∞
pumpDeviceIdnumberrange 1–∞ · nullable
flowDeviceIdnumberrange 1–∞ · nullable
maxRunMinutesnumberrange 1–1440
minIntervalHoursnumberrange 0–168
noFlowTimeoutSnumberrange 10–86400
isEnabledboolean
zoneIdsnumber[]The zones it waters (all on the group's farm); replaces the list
ImportBuildingsDto 1 fields
FieldTypeNotes
csvstringlength 0–5000000
ImportJobsDto 1 fields
FieldTypeNotes
csvstringlength 0–5000000
InspectionAnswerDto 3 fields
FieldTypeNotes
key *stringlength 0–100
result *"pass" | "fail" | "na"
notestringlength 0–2000
InstallDeviceDto 2 fields
FieldTypeNotes
deviceId *numberrange 1–∞
role *stringlength 0–50
JobDto 12 fields
FieldTypeNotes
externalRefstringlength 0–100
type"delivery" | "pickup" | "service" | "transport" | "other"
customerName *stringlength 0–255
contactPhonestringlength 0–50
addressstringlength 0–1000
latitude *number
longitude *number
windowStartstring
windowEndstring
serviceMinutesnumberrange 0–1440
priority"low" | "normal" | "high" | "urgent"
notesstringlength 0–2000
LoginDto 2 fields
FieldTypeNotes
email *string (email)
password *stringlength 1–∞
LoginMfaDto 3 fields
FieldTypeNotes
mfaToken *stringlength 0–2000
codestringlength 6–6
recoveryCodestringlength 0–20
LogLevelDto 2 fields
FieldTypeNotes
level *"error" | "warn" | "info" | "debug"
forMinutesnumberHow long before it reverts to LOG_LEVEL (default 60 minutes, at most 8 hours). · range 1–480
MeasurementDto 23 fields
FieldTypeNotes
path *stringlength 0–255
key *stringStable key, e.g. 'temperature' — what device_values stores. · length 0–100
displayName *stringlength 0–255
unitstringlength 0–50
dataType *"number" | "text" | "boolean"
semanticRole"latitude" | "longitude" | "speed" | "heading" | "battery" | "ignition" | "odometer" | "alarm" | "none" | "fuel_level" | "door" | "temperature_zone" | "soil_moisture" | "soil_temperature" | "soil_ec" | "water_flow" | "valve_state" | "pump_state" | "rainfall" | "wind_speed" | "rssi" | "air_temperature" | "water_volume" | "humidity" | "co2" | "occupancy" | "leak" | "setpoint" | "illuminance" | "sound_level" | "energy"
scalenumberNumbers only: stored = raw × scale (0.001: metres → km).
requiredbooleanMissing required fields are noted on the packet; optional ones aren't. Default false.
measurementType"temperature" | "humidity" | "co2" | "pressure" | "flow" | "energy" | "power" | "current" | "voltage" | "level" | "distance" | "speed" | "heading" | "position" | "boolean_state" | "count" | "text" | "moisture" | "conductivity" | "precipitation" | "volume" | "illuminance" | "sound_level"
precisionnumberDecimals to show. · range 0–10
isEnabledbooleanDisabled → not decoded (default true).
expectedMinnumber
expectedMaxnumber
warningMinnumber
warningMaxnumber
criticalMinnumber
criticalMaxnumber
iconstringlength 0–64
defaultVisualization"value" | "gauge" | "timeseries" | "state" | "map"
sortOrdernumber
brickClassstringBrick class name where one exists, e.g. Air_Temperature_Sensor (Addendum). · length 0–128
staleAfterSnumberSeconds after which a reading counts as stale in the twin (default 3600). · range 1–31536000
depthCmnumberPhase D: the depth this measurement is taken at, in cm (a soil probe: one measurement per depth). · range 0–1000
MfaCodeDto 1 fields
FieldTypeNotes
code *stringlength 6–6
MfaDisableDto 2 fields
FieldTypeNotes
password *stringlength 0–200
code *stringlength 6–6
ModelBindingDto 2 fields
FieldTypeNotes
componentId *numberrange 1–∞
nodeName *stringlength 1–255
ModelBindingsDto 1 fields
FieldTypeNotes
bindings *ModelBindingDto[]Replaces the model's bindings: each floor or room of the building at most once, to a node the file has
MoveDeviceDto 3 fields
FieldTypeNotes
floorPlanIdnumberrange 1–∞
positionX *numberrange 0–1
positionY *numberrange 0–1
NoteDto 1 fields
FieldTypeNotes
note *stringlength 0–5000
OutlineDto 1 fields
FieldTypeNotes
polygon *object[[x, y], …] over the floor's plan, 0–1 from its top-left corner; null removes the outline · nullable
PhoneActionDto 5 fields
FieldTypeNotes
clientIdstring (uuid)A replay of the same clientId is "Already received." (duplicate: true), not an error
atstringWhen it happened, by the phone's clock (not ahead of the server)
notestringlength 0–5000
reasonstringlength 0–2000
resolutionstringlength 0–5000
PlaceDeviceDto 9 fields
FieldTypeNotes
deviceId *numberrange 1–∞
homeKind *"vehicle" | "asset_component" | "field_zone" | "farm"
homeId *numberrange 1–∞
rolestringOne of the home kind's allowed roles (the module registry) · length 0–64 · nullable
latitudenumber
longitudenumber
floorPlanIdnumberA position on a plan image (a floor's), 0–1 from its top-left corner — Buildings picks the room it falls in · range 1–∞
positionXnumberrange 0–1
positionYnumberrange 0–1
PlanScaleDto 1 fields
FieldTypeNotes
widthM *numberThe width the plan image covers, in metres (the viewer's scale); null clears it · range 0.01–10000 · nullable
PreferenceDto 5 fields
FieldTypeNotes
channel *"in_app" | "email"
isEnabledboolean
severityMin"info" | "warning" | "critical"
quietHoursobject{ from: 'HH:MM', to: 'HH:MM', tz?, days?: [0-6] } or null · nullable
digest"none" | "hourly" | "daily"
PreferencesDto 1 fields
FieldTypeNotes
preferences *PreferenceDto[]
ProviderDto 15 fields
FieldTypeNotes
namestringlength 1–100
issuerstringlength 0–500
clientIdstringlength 1–255
clientSecretstringlength 1–1000
scopesstringlength 0–500
emailClaimstringlength 0–64
groupsClaimstringlength 0–64 · nullable
roleMappingRoleMapDto[]
defaultRoleIdnumberrange 1–∞ · nullable
jitboolean
requiredboolean
requireIdpMfaboolean
sessionHoursnumberrange 1–24
enabledboolean
domainsstring[]
ReasonDto 1 fields
FieldTypeNotes
reasonstringlength 0–2000
ReassignDto 2 fields
FieldTypeNotes
vehicleIdnumberrange 1–∞
driverIdnumberrange 1–∞
ReorderStopsDto 1 fields
FieldTypeNotes
stopIds *number[]
ReplaceMappingsDto 1 fields
FieldTypeNotes
mappings *FieldMappingDto[]
ReplaceMeasurementsDto 1 fields
FieldTypeNotes
measurements *MeasurementDto[]
ReportIncidentDto 4 fields
FieldTypeNotes
incidentType *stringlength 0–255
severity *"minor" | "moderate" | "severe"
incidentDate *string
descriptionstringlength 0–5000
RequestCommandDto 4 fields
FieldTypeNotes
type *stringlength 0–64
paramsobject
reasonstringWhy — kept on the command and in the audit log. · length 0–500
expiresInSnumberHow long to wait for evidence before 'expired' (default 600 s). · range 30–86400
ResetPasswordDto 1 fields
FieldTypeNotes
password *stringlength 8–200
ResolveFlagDto 1 fields
FieldTypeNotes
notestringlength 0–2000
RoleDto 3 fields
FieldTypeNotes
name *stringlength 1–100
descriptionstringlength 0–1000 · nullable
scopes *string[]Scopes (GET /api/permissions); only ones you hold yourself
RoleMapDto 2 fields
FieldTypeNotes
group *stringlength 1–255
roleId *numberrange 1–∞
RoomDto 7 fields
FieldTypeNotes
name *stringlength 1–255
codestringlength 1–100 · nullable
roomType"office" | "meeting" | "open_plan" | "corridor" | "server" | "plant" | "storage" | "lobby" | "restroom" | "other"GET /room-types: its comfort band, setpoint band and occupancy hours · nullable
areaM2numberrange 0–1000000 · nullable
capacitynumberrange 0–100000 · nullable
comfortobjectOverrides of the room type's defaults, field by field: { temperatureMinC, temperatureMaxC, humidityMinPct, humidityMaxPct, co2MaxPpm, setpointMinC, setpointMaxC, occupiedFrom, occupiedTo } · nullable
sortOrdernumber
RuleDto 11 fields
FieldTypeNotes
name *stringlength 1–255
descriptionstringlength 0–2000
isEnabledboolean
trigger *object{ type: 'reading' } | { type: 'position' } | { type: 'schedule', every: '5m' | daily: '08:00', tz? } | { type: 'event', eventType }
scopeobject{ homeKind?, homeIds?, productIds?, deviceIds?, measurementKeys? }
condition *object{ type: 'threshold', key, op, value } | { type: 'all', of: [...] } | { type: 'fleet.geofence', … } …
actionsobject[]
clearActionsobject[]null / omitted = the default: clear the alarm the rule raised · nullable
hygieneobject{ forS?, cooldownS?, quietHours?, escalation?, maxActionsPerHour? }
severity"info" | "warning" | "critical"
templateKeystringStarted from a template: a shipped key ('low-fuel') or 'company:<id>' — recorded as source template. · length 0–100
RuleTemplateDto 9 fields
FieldTypeNotes
name *stringlength 1–255
descriptionstringlength 0–2000
trigger *object
scopeobject
condition *object
actionsobject[]
clearActionsobject[]nullable
hygieneobject
severity"info" | "warning" | "critical"
RunDto 3 fields
FieldTypeNotes
substringlength 0–40
format"traccar" | "chirpstack"
clock"realtime" | "workday"workday: the run's telemetry and driver actions dated across 06:00–17:00 of a working day (trip only)
ScheduleDto 4 fields
FieldTypeNotes
days *number[]0 = Sunday … 6, in the farm's time zone
startTime *string
durationMinutes *numberrange 1–1440
isEnabledboolean
SmtpSettingsDto 7 fields
FieldTypeNotes
host *stringlength 0–255
port *numberrange 1–65535
security *"tls" | "starttls" | "none"
usernamestringlength 0–255 · nullable
passwordstringomit to keep the stored password; null to remove it · length 0–500 · nullable
from *stringlength 0–255
rejectUnauthorizedboolean
SmtpTestDto 1 fields
FieldTypeNotes
to *string (email)
StartRunDto 2 fields
FieldTypeNotes
durationMinutesnumberrange 1–1440
targetMoisturePctnumberrange 1–100
StartSupportDto 4 fields
FieldTypeNotes
companyId *numberrange 1–∞
reason *stringlength 0–1000
minutesnumber
level *"read" | "full"
StopInputDto 11 fields
FieldTypeNotes
jobIdnumberFrom the job pool … · range 1–∞
kind"yard" | "waypoint"… or a bare yard / waypoint
namestringlength 0–255
latitudenumber
longitudenumber
addressstringlength 0–1000
windowStartstring
windowEndstring
serviceMinutesnumberrange 0–1440
arrivalRadiusMnumberrange 20–5000
positionnumber1-based position to insert at (default: the end) · range 1–∞
SubmitInspectionDto 6 fields
FieldTypeNotes
clientId *string (uuid)Generated on the phone; a replayed submission with the same id returns the stored one.
vehicleId *numberrange 1–∞
templateIdnumberrange 1–∞
startedAt *string
submittedAt *string
items *InspectionAnswerDto[]
TemplateItemDto 3 fields
FieldTypeNotes
key *stringlength 0–100
label *stringlength 0–255
labelArstringlength 0–255
TripDto 6 fields
FieldTypeNotes
namestringlength 0–255
vehicleIdnumberrange 1–∞ · nullable
driverIdnumberrange 1–∞ · nullable
plannedStartstring
notesstringlength 0–2000
jobIdsnumber[]Stops from the job pool, in order
UpdateBuildingDto 7 fields
FieldTypeNotes
namestringlength 1–255
codestringUnique in the company across buildings, floors and rooms, e.g. "B1" · length 1–100 · nullable
addressstringlength 0–1000 · nullable
latitudenumbernullable
longitudenumbernullable
timezonestringIANA zone occupancy hours are judged in (an IANA time zone) · length 0–64
sortOrdernumber
UpdateDriverDto 11 fields
FieldTypeNotes
firstNamestringlength 0–100
lastNamestringlength 0–100
emailstring (email)length 0–255
phonestringlength 0–50
licenseNumberstringlength 0–100
licenseClassstringlength 0–50
licenseExpiryDatestring
status"active" | "on_leave" | "suspended" | "terminated"
hireDatestring
identityNumberstringlength 0–50
identityTypestringlength 0–50
UpdateFarmDto 7 fields
FieldTypeNotes
namestringlength 1–255
latitudenumber
longitudenumber
areaHanumberrange 0–1000000
timezonestringIANA zone the farm's schedules run in (an IANA time zone) · length 0–64
rainHoldMmnumberRain hold (design §4): rainfall over this many mm … (null = off) · range 0–1000 · nullable
rainHoldHoursnumber… in this many hours at the farm's weather station refuses a start · range 1–168
UpdateFieldDto 7 fields
FieldTypeNotes
namestringlength 1–255
polygonobjectGeoJSON Polygon ([lng, lat] order); the area is computed from it · nullable
soilType"sand" | "loamy_sand" | "sandy_loam" | "loam" | "clay_loam" | "clay"nullable
cropIdnumberrange 1–∞ · nullable
plantingDatestringnullable
expectedHarveststringnullable
notesstringlength 0–2000 · nullable
UpdateFloorDto 6 fields
FieldTypeNotes
namestringlength 1–255
codestringlength 1–100 · nullable
floorIndexnumber0 = ground, negative = basement; unique in the building · range -20–300 · nullable
elevationMnumberThe 3D viewer's floor height above ground and storey height (m) · range -200–2000 · nullable
heightMnumberrange 0.5–100 · nullable
sortOrdernumber
UpdateGeofenceDto 7 fields
FieldTypeNotes
namestringlength 0–255
centerLatitudenumberrange -90–90
centerLongitudenumberrange -180–180
radiusMnumberrange 1–∞
alertOn"enter" | "exit" | "both"
isActiveboolean
yardIdnumberrange 1–∞ · nullable
UpdateGroupDto 9 fields
FieldTypeNotes
namestringlength 1–255
valveDeviceIdnumberrange 1–∞
pumpDeviceIdnumberrange 1–∞ · nullable
flowDeviceIdnumberrange 1–∞ · nullable
maxRunMinutesnumberrange 1–1440
minIntervalHoursnumberrange 0–168
noFlowTimeoutSnumberrange 10–86400
isEnabledboolean
zoneIdsnumber[]The zones it waters (all on the group's farm); replaces the list
UpdateInspectionTemplateDto 4 fields
FieldTypeNotes
namestringlength 0–255
vehicleCategoryIdnumberB4: the category by id. Omit both (or null) for the company's default checklist. · range 1–∞ · nullable
vehicleCategorystringLegacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable
itemsTemplateItemDto[]
UpdateJobDto 12 fields
FieldTypeNotes
externalRefstringlength 0–100
type"delivery" | "pickup" | "service" | "transport" | "other"
customerNamestringlength 0–255
contactPhonestringlength 0–50
addressstringlength 0–1000
latitudenumber
longitudenumber
windowStartstring
windowEndstring
serviceMinutesnumberrange 0–1440
priority"low" | "normal" | "high" | "urgent"
notesstringlength 0–2000
UpdateMeDto 1 fields
FieldTypeNotes
locale"en" | "ar"
UpdateProductDto 5 fields
FieldTypeNotes
namestringlength 0–255
purposestringlength 0–500
allowWritesbooleanRead-only by default (Addendum): commands reach this product's devices only once an admin allows writes.
integrationSourceIdnumberWhich source delivers its commands (else the source its devices last reported through). · range 1–∞
commandEvidenceobjectPer command type, the measurement that proves it: { "immobilize": { "key": "blocked", "value": true } } (B2 ruling 11).
UpdateRoleDto 3 fields
FieldTypeNotes
namestringlength 1–100
descriptionstringlength 0–1000 · nullable
scopesstring[]
UpdateRoomDto 7 fields
FieldTypeNotes
namestringlength 1–255
codestringlength 1–100 · nullable
roomType"office" | "meeting" | "open_plan" | "corridor" | "server" | "plant" | "storage" | "lobby" | "restroom" | "other"GET /room-types: its comfort band, setpoint band and occupancy hours · nullable
areaM2numberrange 0–1000000 · nullable
capacitynumberrange 0–100000 · nullable
comfortobjectOverrides of the room type's defaults, field by field: { temperatureMinC, temperatureMaxC, humidityMinPct, humidityMaxPct, co2MaxPpm, setpointMinC, setpointMaxC, occupiedFrom, occupiedTo } · nullable
sortOrdernumber
UpdateScheduleDto 4 fields
FieldTypeNotes
daysnumber[]0 = Sunday … 6, in the farm's time zone
startTimestring
durationMinutesnumberrange 1–1440
isEnabledboolean
UpdateSourceDto 3 fields
FieldTypeNotes
allowWritesbooleanRead-only by default (Addendum): commands reach devices through this source only once an admin allows writes.
outboundConfigobjectWhere the adapter sends commands, e.g. { baseUrl: 'http://traccar.local:8082' }.
outboundCredentialsobjecte.g. { token } (Traccar) or { apiToken } (ChirpStack). Stored encrypted; never returned.
UpdateStopDto 6 fields
FieldTypeNotes
windowStartstringnullable
windowEndstringnullable
serviceMinutesnumberrange 0–1440
arrivalRadiusMnumberrange 20–5000
namestringlength 0–255
addressstringlength 0–1000
UpdateTripDto 3 fields
FieldTypeNotes
namestringlength 0–255
plannedStartstring
notesstringlength 0–2000
UpdateUserDto 6 fields
FieldTypeNotes
firstNamestringlength 1–100
lastNamestringlength 1–100
emailstring (email)length 0–255
role"admin" | "manager" | "user" | "driver" | "technician"
roleIdnumberPhase E1: a member's role — wins over `role` · range 1–∞
driverIdnumberA driver login's record; null only makes sense with a role change away from driver. · range 1–∞ · nullable
UpdateVehicleCategoryDto 2 fields
FieldTypeNotes
namestringlength 0–100
sortOrdernumberPosition in lists; omitted = after the last one. · range 0–1000000
UpdateVehicleDto 14 fields
FieldTypeNotes
namestringlength 0–255
vehicleCategoryIdnumberB4: the category by id (GET /vehicle-categories). Wins over vehicleCategory; null clears. · range 1–∞ · nullable
vehicleCategorystringLegacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable
makestringlength 0–255
modelstringlength 0–255
lengthMnumberrange 0–∞
widthMnumberrange 0–∞
heightMnumberrange 0–∞
acquisitionDatestring
acquisitionCoststring
plateNumberstringlength 0–50
plateTypestringlength 0–50
sequenceNumberstringlength 0–50
vehicleTypestringlength 0–100
UpdateWebhookSubscriptionDto 5 fields
FieldTypeNotes
namestringlength 0–255
urlstring (uri)length 0–2000
eventTypes"vehicle.position" | "geofence.entered" | "geofence.exited" | "vehicle.tracker.assigned" | "vehicle.tracker.unassigned" | "vehicle.device.installed" | "vehicle.device.removed" | "yard.checked_in" | "yard.checked_out" | "maintenance.due" | "maintenance.logged" | "driver.assigned" | "driver.unassigned" | "compliance.expiring" | "compliance.expired" | "device.unknown_seen" | "device.decode_failed" | "inspection.submitted" | "rule.fired" | "rule.cleared" | "rule.custom" | "alarm.raised" | "alarm.acknowledged" | "alarm.cleared" | "trip.created" | "trip.dispatched" | "trip.accepted" | "trip.declined" | "trip.started" | "trip.paused" | "trip.resumed" | "trip.completed" | "trip.cancelled" | "trip.reassigned" | "trip.exception" | "stop.en_route" | "stop.arrived" | "stop.departed" | "stop.completed" | "stop.failed" | "stop.skipped" | "stop.eta_at_risk" | "stop.eta_late" | "irrigation.started" | "irrigation.completed" | "irrigation.aborted" | "irrigation.failed" | "irrigation.no_flow" | "irrigation.valve_stuck" | "irrigation.max_run" | "irrigation.schedule_missed" | "installation.backup_failed" | "installation.backup_late" | "installation.drill_failed" | "licence.device_limit_exceeded" | "work_order.created" | "work_order.assigned" | "work_order.started" | "work_order.held" | "work_order.resumed" | "work_order.done" | "work_order.cancelled"[]
positionIntervalSnumberrange 1–86400
isActiveboolean
UpdateWorkOrderDto 8 fields
FieldTypeNotes
titlestringOptional with alarmId: the alarm's title · length 1–255
descriptionstringlength 0–5000 · nullable
priority"low" | "normal" | "high" | "urgent"Default: from the alarm's severity (critical → urgent, warning → high), else normal
componentIdnumberA building, floor or room; with alarmId, the alarm's room · range 1–∞ · nullable
deviceIdnumberrange 1–∞ · nullable
alarmIdnumber"Create work order" on an alarm — one open work order per alarm · range 1–∞ · nullable
dueAtstringnullable
assignedTonumberA technician, manager or admin of the company · range 1–∞ · nullable
UpdateYardSlotDto 5 fields
FieldTypeNotes
slotNumberstringlength 0–50
positionXnumberrange 0–1
positionYnumberrange 0–1
maxLengthMnumberrange 0–∞
allowedCategoryIdsnumber[]B4: only vehicles of these categories may check in; omitted, null or [] = any. · nullable
UpdateZoneDto 5 fields
FieldTypeNotes
namestringlength 1–255
polygonobjectnullable
irrigationGroupIdnumberrange 1–∞ · nullable
sensorDepthsCmnumber[]The depths its soil sensors read at, e.g. [20, 40, 60]
sortOrdernumber
WorkOrderDto 8 fields
FieldTypeNotes
titlestringOptional with alarmId: the alarm's title · length 1–255
descriptionstringlength 0–5000 · nullable
priority"low" | "normal" | "high" | "urgent"Default: from the alarm's severity (critical → urgent, warning → high), else normal
componentIdnumberA building, floor or room; with alarmId, the alarm's room · range 1–∞ · nullable
deviceIdnumberrange 1–∞ · nullable
alarmIdnumber"Create work order" on an alarm — one open work order per alarm · range 1–∞ · nullable
dueAtstringnullable
assignedTonumberA technician, manager or admin of the company · range 1–∞ · nullable
ZoneDto 5 fields
FieldTypeNotes
name *stringlength 1–255
polygonobjectnullable
irrigationGroupIdnumberrange 1–∞ · nullable
sensorDepthsCmnumber[]The depths its soil sensors read at, e.g. [20, 40, 60]
sortOrdernumber

* required