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 - GET
/api/farms/{id} - PUT
/api/farms/{id} - DELETE
/api/farms/{id} - GET
/api/farms/{id}/fields - POST
/api/farms/{id}/fields - GET
/api/fields/{id} - PUT
/api/fields/{id} - DELETE
/api/fields/{id} - GET
/api/fields/{id}/twin - GET
/api/fields/{id}/zones - POST
/api/fields/{id}/zones - GET
/api/zones/{id} - PUT
/api/zones/{id} - DELETE
/api/zones/{id} - GET
/api/crops - POST
/api/crops - GET
/api/crops/{id} - GET
/api/farms/{id}/irrigation-groups - POST
/api/farms/{id}/irrigation-groups - GET
/api/irrigation-groups/{id} - PUT
/api/irrigation-groups/{id} - DELETE
/api/irrigation-groups/{id} - GET
/api/irrigation-groups/{id}/schedules - POST
/api/irrigation-groups/{id}/schedules - PUT
/api/irrigation-schedules/{id} - DELETE
/api/irrigation-schedules/{id} - POST
/api/irrigation-groups/{id}/start - POST
/api/irrigation-runs/{id}/abort - GET
/api/irrigation-runs - GET
/api/farms/{id}/water
Alarms
- GET
/api/alarms - GET
/api/alarms/{id} - POST
/api/alarms/{id}/acknowledge - POST
/api/alarms/{id}/clear - POST
/api/alarms/{id}/notes
API keys
- GET
/api/api-keys - POST
/api/api-keys - POST
/api/api-keys/{id}/revoke
Audit log
- GET
/api/audit-log - GET
/api/audit-log/export - GET
/api/auth-events
Auth
- POST
/api/auth/loginpublic - POST
/api/auth/login/mfapublic - POST
/api/auth/discoverpublic - GET
/api/auth/sso/startpublic - GET
/api/auth/sso/callbackpublic - POST
/api/auth/sso/exchangepublic - POST
/api/auth/sso/refresh
Buildings
- GET
/api/buildings - POST
/api/buildings - POST
/api/buildings/import - GET
/api/buildings/{id} - PUT
/api/buildings/{id} - DELETE
/api/buildings/{id} - GET
/api/buildings/{id}/models - POST
/api/buildings/{id}/models - GET
/api/buildings/{id}/floors - POST
/api/buildings/{id}/floors - GET
/api/floors/{id} - PUT
/api/floors/{id} - DELETE
/api/floors/{id} - GET
/api/floors/{id}/plan - POST
/api/floors/{id}/plan - PATCH
/api/floors/{id}/plan - GET
/api/floors/{id}/rooms - POST
/api/floors/{id}/rooms - GET
/api/rooms/{id}/outline - PUT
/api/rooms/{id}/outline - GET
/api/rooms/{id} - PUT
/api/rooms/{id} - DELETE
/api/rooms/{id} - GET
/api/room-types - GET
/api/models/{id} - DELETE
/api/models/{id} - GET
/api/models/{id}/bindings - PUT
/api/models/{id}/bindings - GET
/api/models/{id}/geometry
Commands
- POST
/api/devices/{id}/commands - GET
/api/commands - GET
/api/commands/{id}
Compliance documents
- GET
/api/compliance-documents - POST
/api/compliance-documents - GET
/api/compliance-documents/expiring-soon
Connectors
- GET
/api/connectors/wasl
Demo & scenarios
- GET
/api/demo - POST
/api/demo/scenarios/{key}/run - GET
/api/demo/runs/{id} - POST
/api/demo/runs/{id}/stop - POST
/api/demo/reset
Device homes
- GET
/api/device-homes - POST
/api/device-homes - PATCH
/api/device-homes/{id} - DELETE
/api/device-homes/{id}
Device packets
- GET
/api/devices/{id}/packets - POST
/api/devices/{id}/packets/replay
Devices
- GET
/api/devices - POST
/api/devices - GET
/api/devices/unassigned
Dispatch
- GET
/api/jobs - POST
/api/jobs - POST
/api/jobs/import - GET
/api/jobs/{id} - PUT
/api/jobs/{id} - DELETE
/api/jobs/{id} - GET
/api/trips - POST
/api/trips - GET
/api/trips/{id} - PUT
/api/trips/{id} - POST
/api/trips/{id}/stops - PUT
/api/trips/{id}/stops/reorder - PUT
/api/trips/{id}/stops/{stopId} - DELETE
/api/trips/{id}/stops/{stopId} - POST
/api/trips/{id}/dispatch - POST
/api/trips/{id}/cancel - POST
/api/trips/{id}/reassign - GET
/api/trips/{id}/events - GET
/api/dispatch/board - GET
/api/dispatch/history - GET
/api/dispatch/settings - PUT
/api/dispatch/settings
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 - POST
/api/inspections - GET
/api/me/trips - GET
/api/me/trips/{id} - POST
/api/me/trips/{id}/accept - POST
/api/me/trips/{id}/decline - POST
/api/me/trips/{id}/start - POST
/api/me/trips/{id}/pause - POST
/api/me/trips/{id}/resume - POST
/api/me/trips/{id}/end - POST
/api/me/trips/{id}/stops/{stopId}/arrive - POST
/api/me/trips/{id}/stops/{stopId}/depart - POST
/api/me/trips/{id}/stops/{stopId}/complete - POST
/api/me/trips/{id}/stops/{stopId}/fail - POST
/api/me/trips/{id}/stops/{stopId}/skip
Drivers
- GET
/api/drivers - POST
/api/drivers - GET
/api/drivers/{id} - PATCH
/api/drivers/{id} - POST
/api/drivers/{id}/login - POST
/api/drivers/{id}/assign-vehicle - POST
/api/drivers/{id}/unassign-vehicle - GET
/api/drivers/{id}/incidents - POST
/api/drivers/{id}/incidents
Fleet positions
- GET
/api/fleet/positions - GET
/api/fleet/devices/{deviceId}/history
Fuel
- GET
/api/vehicles/{id}/fuel-logs - POST
/api/vehicles/{id}/fuel-logs
Geofences
- GET
/api/geofences - POST
/api/geofences - GET
/api/geofences/events - GET
/api/geofences/{id} - PUT
/api/geofences/{id} - DELETE
/api/geofences/{id} - GET
/api/geofences/{id}/events
Hardware catalog
- GET
/api/hardware-catalog - POST
/api/hardware-catalog - GET
/api/hardware-catalog/{id} - GET
/api/hardware-catalog/{id}/export
Ingest (source token)
- POST
/api/ingest/chirpstack/{sourceId} - POST
/api/ingest/traccar/{sourceId}
Inspections
- GET
/api/inspections - GET
/api/inspection-templates - POST
/api/inspection-templates - PUT
/api/inspection-templates/{id} - POST
/api/maintenance-flags/{id}/resolve
Integration sources
- GET
/api/integration-sources - POST
/api/integration-sources - POST
/api/integration-sources/{id}/rotate-token - PATCH
/api/integration-sources/{id} - DELETE
/api/integration-sources/{id} - GET
/api/integration-sources/{id}/health - GET
/api/integration-sources/{id}/discover
Licence & capabilities
- GET
/api/capabilities - GET
/api/licence - POST
/api/licence - GET
/api/licence/usage
Maintenance
- GET
/api/vehicles/{id}/maintenance-schedules - POST
/api/vehicles/{id}/maintenance-schedules - GET
/api/vehicles/{id}/maintenance-logs - POST
/api/vehicles/{id}/maintenance-logs
Me
- GET
/api/me - PATCH
/api/me - GET
/api/me/driver - GET
/api/me/mfa - POST
/api/me/mfa/setup - POST
/api/me/mfa/enable - POST
/api/me/mfa/disable - POST
/api/me/mfa/recovery-codes
Meta
- GET
/api/meta/enums
Notifications
- GET
/api/notifications - POST
/api/notifications/read-all - POST
/api/notifications/{id}/read - GET
/api/me/notification-preferences - PUT
/api/me/notification-preferences
Operations
- GET
/api/metricspublic - GET
/api/healthpublic - GET
/api/readypublic - GET
/api/ops/support-bundle - GET
/api/ops/log-level - PUT
/api/ops/log-level
Privacy (PDPL)
- GET
/api/drivers/{id}/export - POST
/api/drivers/{id}/erase - POST
/api/users/{id}/erase - GET
/api/compliance-report - GET
/api/compliance-report/pdf - GET
/api/files/signedpublic
Product measurements
- GET
/api/products/{id}/measurements - PUT
/api/products/{id}/measurements - GET
/api/products/{id}/mappings - PUT
/api/products/{id}/mappings
Products
- GET
/api/device-templates - GET
/api/products - POST
/api/products - PATCH
/api/products/{id} - GET
/api/products/{id}/hardware-update - POST
/api/products/{id}/hardware-update/apply
Reports
- GET
/api/reports - GET
/api/reports/{key}
Retention
- GET
/api/retention - POST
/api/retention/run
Roles & permissions
- GET
/api/permissions - GET
/api/role-templates - GET
/api/roles - POST
/api/roles - POST
/api/roles/from-template - GET
/api/roles/{id} - PUT
/api/roles/{id} - DELETE
/api/roles/{id}
Rules
- POST
/api/rules/test - GET
/api/rules - POST
/api/rules - GET
/api/rules/types - GET
/api/rules/options/{ref} - GET
/api/rules/{id} - PUT
/api/rules/{id} - DELETE
/api/rules/{id} - POST
/api/rules/{id}/enable - POST
/api/rules/{id}/disable - POST
/api/rules/{id}/test - GET
/api/rules/{id}/states - GET
/api/rules/{id}/events - GET
/api/rule-templates - POST
/api/rule-templates
Settings
- GET
/api/settings/smtp - PUT
/api/settings/smtp - POST
/api/settings/smtp/test
Single sign-on
- GET
/api/sso-providers - POST
/api/sso-providers - GET
/api/sso-providers/{id} - PUT
/api/sso-providers/{id} - DELETE
/api/sso-providers/{id} - POST
/api/sso-providers/{id}/test
Support access
- GET
/api/support-sessions - POST
/api/support-sessions - GET
/api/support-sessions/companies - GET
/api/support-sessions/{id} - GET
/api/support-sessions/{id}/requests - POST
/api/support-sessions/{id}/token - POST
/api/support-sessions/{id}/approve - POST
/api/support-sessions/{id}/decline - POST
/api/support-sessions/{id}/end - GET
/api/support-consent - PUT
/api/support-consent - DELETE
/api/support-consent
Twin
- GET
/api/twin/{homeKind}/{homeId}/history - GET
/api/twin/{homeKind}/{homeId}
Users
- GET
/api/company-settings - PUT
/api/company-settings - GET
/api/users - POST
/api/users - GET
/api/users/{id} - PATCH
/api/users/{id} - POST
/api/users/{id}/reset-password - POST
/api/users/{id}/reset-mfa - POST
/api/users/{id}/deactivate - POST
/api/users/{id}/reactivate
Vehicle categories
- GET
/api/vehicle-categories - POST
/api/vehicle-categories - PATCH
/api/vehicle-categories/{id}
Vehicles
- GET
/api/vehicles - POST
/api/vehicles - GET
/api/vehicles/{id} - PATCH
/api/vehicles/{id} - POST
/api/vehicles/{id}/devices - DELETE
/api/vehicles/{id}/devices/{deviceId} - POST
/api/vehicles/{id}/assign-device - POST
/api/vehicles/{id}/unassign-device
Webhooks
- GET
/api/webhook-subscriptions - POST
/api/webhook-subscriptions - GET
/api/webhook-subscriptions/{id} - PUT
/api/webhook-subscriptions/{id} - DELETE
/api/webhook-subscriptions/{id} - POST
/api/webhook-subscriptions/{id}/rotate-secret - GET
/api/webhook-subscriptions/{id}/deliveries - POST
/api/webhook-subscriptions/{id}/deliveries/{deliveryId}/replay
Work orders
- GET
/api/work-orders - POST
/api/work-orders - GET
/api/work-orders/assignees - GET
/api/work-orders/{id} - PUT
/api/work-orders/{id} - POST
/api/work-orders/{id}/assign - POST
/api/work-orders/{id}/unassign - POST
/api/work-orders/{id}/start - POST
/api/work-orders/{id}/hold - POST
/api/work-orders/{id}/resume - POST
/api/work-orders/{id}/done - POST
/api/work-orders/{id}/cancel - POST
/api/work-orders/{id}/notes - POST
/api/work-orders/{id}/photos - GET
/api/me/work-orders - GET
/api/me/work-orders/{id} - POST
/api/me/work-orders/{id}/start - POST
/api/me/work-orders/{id}/hold - POST
/api/me/work-orders/{id}/resume - POST
/api/me/work-orders/{id}/done - POST
/api/me/work-orders/{id}/note - POST
/api/me/work-orders/{id}/photo
Yards
- GET
/api/yards - POST
/api/yards - GET
/api/yards/{id} - POST
/api/yards/{id}/layout - POST
/api/yards/{id}/slots - PATCH
/api/yard-slots/{id} - POST
/api/yard-slots/{id}/check-in - POST
/api/yard-slots/{id}/check-out
Schemas
AlarmNoteDto 1 fields
| Field | Type | Notes |
|---|---|---|
note | string | length 0–2000 |
AssignDeviceDto 1 fields
| Field | Type | Notes |
|---|---|---|
deviceId * | number | range 1–∞ |
AssignDto 1 fields
| Field | Type | Notes |
|---|---|---|
userId * | number | range 1–∞ |
AssignVehicleDto 1 fields
| Field | Type | Notes |
|---|---|---|
vehicleId * | number | range 1–∞ |
BuildingDto 7 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
code | string | Unique in the company across buildings, floors and rooms, e.g. "B1" · length 1–100 · nullable |
address | string | length 0–1000 · nullable |
latitude | number | nullable |
longitude | number | nullable |
timezone | string | IANA zone occupancy hours are judged in (an IANA time zone) · length 0–64 |
sortOrder | number |
CheckInDto 1 fields
| Field | Type | Notes |
|---|---|---|
vehicleId * | number | range 1–∞ |
CompanySettingsDto 2 fields
| Field | Type | Notes |
|---|---|---|
mfa | "off" | "admins" | "everyone" | |
mfaPhone | "off" | "required" |
ConsentDto 2 fields
| Field | Type | Notes |
|---|---|---|
level * | "read" | "full" | |
until * | string |
CreateApiKeyDto 3 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 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"[] | |
expiresAt | string |
CreateComplianceDocumentDto 7 fields
| Field | Type | Notes |
|---|---|---|
documentableType * | "driver" | "vehicle" | |
documentableId * | number | range 1–∞ |
documentType * | string | length 0–255 |
documentNumber | string | length 0–255 |
issueDate | string | |
expiryDate | string | |
notes | string |
CreateDeviceDto 3 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
deviceUniqueIdentifier * | string | The devEui (LoRaWAN) or IMEI / Traccar uniqueId its packets carry. · length 0–255 |
productId | number | range 1–∞ |
CreateDriverDto 11 fields
| Field | Type | Notes |
|---|---|---|
firstName * | string | length 0–100 |
lastName * | string | length 0–100 |
email | string (email) | length 0–255 |
phone | string | length 0–50 |
licenseNumber | string | length 0–100 |
licenseClass | string | length 0–50 |
licenseExpiryDate | string | |
status | "active" | "on_leave" | "suspended" | "terminated" | |
hireDate | string | |
identityNumber | string | length 0–50 |
identityType | string | length 0–50 |
CreateDriverIncidentDto 5 fields
| Field | Type | Notes |
|---|---|---|
incidentType * | string | length 0–255 |
severity * | "minor" | "moderate" | "severe" | |
incidentDate * | string | |
description | string | |
vehicleId | number | range 1–∞ |
CreateDriverLoginDto 2 fields
| Field | Type | Notes |
|---|---|---|
email * | string (email) | length 0–255 |
password * | string | length 8–200 |
CreateFuelLogDto 7 fields
| Field | Type | Notes |
|---|---|---|
fillDate * | string | |
volume * | number | range 0.001–∞ |
unit * | "liters" | "gallons" | |
cost | string | |
odometerKm | number | range 0–∞ |
isFullTank | boolean | |
vendor | string | length 0–255 |
CreateGeofenceDto 7 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
centerLatitude * | number | range -90–90 |
centerLongitude * | number | range -180–180 |
radiusM * | number | range 1–∞ |
alertOn | "enter" | "exit" | "both" | |
isActive | boolean | |
yardId | number | range 1–∞ |
CreateHardwareDto 14 fields
| Field | Type | Notes |
|---|---|---|
manufacturer * | string | length 0–100 |
model * | string | length 0–100 |
name | string | length 0–200 |
category * | "environmental" | "energy" | "water" | "hvac" | "security" | "occupancy" | "industrial" | "transportation" | "agriculture" | "gateway" | "controller" | |
connectivity * | string[] | |
radioProtocolDefault | string | length 0–50 |
capabilities | string[] | |
parserRef * | "chirpstack" | "traccar" | |
defaultMeasurements * | MeasurementDto[] | |
twinHints | object | |
firmwareMin | string | length 0–50 |
certifications | string[] | |
datasheetUrl | string | length 0–500 |
notes | string | length 0–2000 |
CreateInspectionTemplateDto 4 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
vehicleCategoryId | number | B4: the category by id. Omit both (or null) for the company's default checklist. · range 1–∞ · nullable |
vehicleCategory | string | Legacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable |
items * | TemplateItemDto[] |
CreateIntegrationSourceDto 2 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
type * | "chirpstack_http" | "traccar_http" | "generic_http" | "mqtt" |
CreateMaintenanceLogDto 7 fields
| Field | Type | Notes |
|---|---|---|
maintenanceScheduleId | number | range 1–∞ |
serviceType * | string | length 0–255 |
serviceDate * | string | |
odometerKm | number | range 0–∞ |
cost | string | |
vendor | string | length 0–255 |
notes | string |
CreateMaintenanceScheduleDto 7 fields
| Field | Type | Notes |
|---|---|---|
serviceType * | string | length 0–255 |
intervalDays | number | range 1–∞ |
intervalKm | number | range 1–∞ |
lastServiceDate | string | |
lastServiceOdometerKm | number | range 0–∞ |
odometerBaselineKm | number | range 0–∞ |
odometerBaselineDate | string |
CreateModelDto 1 fields
| Field | Type | Notes |
|---|---|---|
source | "generated" | JSON { source: 'generated' }; an upload is multipart "file" (a GLB) |
CreateProductDto 4 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
hardwareId | number | A hardware catalog item: its measurements are preloaded, its definition version pinned. · range 1–∞ |
templateKey | string | Device template key — one-release alias for a platform catalog item's key. · length 0–100 |
purpose | string | length 0–500 |
CreateProviderDto 15 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–100 |
issuer * | string | length 0–500 |
clientId * | string | length 1–255 |
clientSecret * | string | length 1–1000 |
scopes | string | length 0–500 |
emailClaim | string | length 0–64 |
groupsClaim | string | length 0–64 · nullable |
roleMapping | RoleMapDto[] | |
defaultRoleId | number | range 1–∞ · nullable |
jit | boolean | |
required | boolean | |
requireIdpMfa | boolean | |
sessionHours | number | range 1–24 |
enabled | boolean | |
domains | string[] |
CreateUserDto 7 fields
| Field | Type | Notes |
|---|---|---|
firstName | string | Optional for a driver login: taken from the driver record. · length 1–100 |
lastName | string | length 1–100 |
email * | string (email) | length 0–255 |
password * | string | length 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. |
roleId | number | Phase E1: a member's role (GET /api/roles) — wins over `role`, which then only says "a member" · range 1–∞ |
driverId | number | Required for role driver: the driver record this login belongs to. · range 1–∞ |
CreateVehicleCategoryDto 2 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–100 |
sortOrder | number | Position in lists; omitted = after the last one. · range 0–1000000 |
CreateVehicleDto 14 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
vehicleCategoryId | number | B4: the category by id (GET /vehicle-categories). Wins over vehicleCategory; null clears. · range 1–∞ · nullable |
vehicleCategory | string | Legacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable |
make | string | length 0–255 |
model | string | length 0–255 |
lengthM | number | range 0–∞ |
widthM | number | range 0–∞ |
heightM | number | range 0–∞ |
acquisitionDate | string | |
acquisitionCost | string | |
plateNumber | string | length 0–50 |
plateType | string | length 0–50 |
sequenceNumber | string | length 0–50 |
vehicleType | string | length 0–100 |
CreateWebhookSubscriptionDto 4 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 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"[] | |
positionIntervalS | number | range 1–86400 |
CreateYardDto 4 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 0–255 |
address | string | |
latitude | number | range -90–90 |
longitude | number | range -180–180 |
CreateYardSlotDto 5 fields
| Field | Type | Notes |
|---|---|---|
slotNumber * | string | length 0–50 |
positionX * | number | range 0–1 |
positionY * | number | range 0–1 |
maxLengthM | number | range 0–∞ |
allowedCategoryIds | number[] | B4: only vehicles of these categories may check in; omitted, null or [] = any. · nullable |
CropDto 3 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 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) }] |
notes | string | length 0–2000 |
DeclineDto 1 fields
| Field | Type | Notes |
|---|---|---|
note | string | length 0–1000 |
DiscoverDto 1 fields
| Field | Type | Notes |
|---|---|---|
email * | string (email) | length 0–255 |
DispatchSettingsDto 5 fields
| Field | Type | Notes |
|---|---|---|
roadFactor | number | straight line × this ≈ road distance (v1 ETA) · range 1–3 |
atRiskMinutes | number | range 0–240 |
defaultSpeedKmh | number | range 5–150 |
arrivalRadiusM | number | range 20–5000 |
requirePhoto | boolean |
DoneDto 1 fields
| Field | Type | Notes |
|---|---|---|
resolution * | string | length 0–5000 |
DriverActionDto 6 fields
| Field | Type | Notes |
|---|---|---|
clientId | string (uuid) | The offline queue's id for this action — a replay is answered "Already received." (duplicate: true), not 422. |
at | string | |
latitude | number | |
longitude | number | |
reason | string | length 0–1000 |
odometerKm | number | range 0–∞ |
EraseDriverDto 1 fields
| Field | Type | Notes |
|---|---|---|
confirmName * | string | length 1–250 |
EraseUserDto 1 fields
| Field | Type | Notes |
|---|---|---|
confirmEmail * | string | length 1–255 |
ExchangeDto 1 fields
| Field | Type | Notes |
|---|---|---|
code * | string | length 20–200 |
FarmDto 7 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
latitude | number | |
longitude | number | |
areaHa | number | range 0–1000000 |
timezone | string | IANA zone the farm's schedules run in (an IANA time zone) · length 0–64 |
rainHoldMm | number | Rain hold (design §4): rainfall over this many mm … (null = off) · range 0–1000 · nullable |
rainHoldHours | number | … in this many hours at the farm's weather station refuses a start · range 1–168 |
FieldDto 7 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
polygon | object | GeoJSON Polygon ([lng, lat] order); the area is computed from it · nullable |
soilType | "sand" | "loamy_sand" | "sandy_loam" | "loam" | "clay_loam" | "clay" | nullable |
cropId | number | range 1–∞ · nullable |
plantingDate | string | nullable |
expectedHarvest | string | nullable |
notes | string | length 0–2000 · nullable |
FieldMappingDto 8 fields
| Field | Type | Notes |
|---|---|---|
path * | string | length 0–255 |
attribute * | string | length 0–100 |
label * | string | length 0–255 |
unit | string | length 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" | |
scale | number | |
required | boolean |
FloorDto 6 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
code | string | length 1–100 · nullable |
floorIndex | number | 0 = ground, negative = basement; unique in the building · range -20–300 · nullable |
elevationM | number | The 3D viewer's floor height above ground and storey height (m) · range -200–2000 · nullable |
heightM | number | range 0.5–100 · nullable |
sortOrder | number |
FromTemplateDto 2 fields
| Field | Type | Notes |
|---|---|---|
templateKey * | string | length 0–64 |
name | string | length 1–100 |
GroupDto 9 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
valveDeviceId * | number | range 1–∞ |
pumpDeviceId | number | range 1–∞ · nullable |
flowDeviceId | number | range 1–∞ · nullable |
maxRunMinutes | number | range 1–1440 |
minIntervalHours | number | range 0–168 |
noFlowTimeoutS | number | range 10–86400 |
isEnabled | boolean | |
zoneIds | number[] | The zones it waters (all on the group's farm); replaces the list |
ImportBuildingsDto 1 fields
| Field | Type | Notes |
|---|---|---|
csv | string | length 0–5000000 |
ImportJobsDto 1 fields
| Field | Type | Notes |
|---|---|---|
csv | string | length 0–5000000 |
InspectionAnswerDto 3 fields
| Field | Type | Notes |
|---|---|---|
key * | string | length 0–100 |
result * | "pass" | "fail" | "na" | |
note | string | length 0–2000 |
InstallDeviceDto 2 fields
| Field | Type | Notes |
|---|---|---|
deviceId * | number | range 1–∞ |
role * | string | length 0–50 |
JobDto 12 fields
| Field | Type | Notes |
|---|---|---|
externalRef | string | length 0–100 |
type | "delivery" | "pickup" | "service" | "transport" | "other" | |
customerName * | string | length 0–255 |
contactPhone | string | length 0–50 |
address | string | length 0–1000 |
latitude * | number | |
longitude * | number | |
windowStart | string | |
windowEnd | string | |
serviceMinutes | number | range 0–1440 |
priority | "low" | "normal" | "high" | "urgent" | |
notes | string | length 0–2000 |
LoginDto 2 fields
| Field | Type | Notes |
|---|---|---|
email * | string (email) | |
password * | string | length 1–∞ |
LoginMfaDto 3 fields
| Field | Type | Notes |
|---|---|---|
mfaToken * | string | length 0–2000 |
code | string | length 6–6 |
recoveryCode | string | length 0–20 |
LogLevelDto 2 fields
| Field | Type | Notes |
|---|---|---|
level * | "error" | "warn" | "info" | "debug" | |
forMinutes | number | How long before it reverts to LOG_LEVEL (default 60 minutes, at most 8 hours). · range 1–480 |
MeasurementDto 23 fields
| Field | Type | Notes |
|---|---|---|
path * | string | length 0–255 |
key * | string | Stable key, e.g. 'temperature' — what device_values stores. · length 0–100 |
displayName * | string | length 0–255 |
unit | string | length 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" | |
scale | number | Numbers only: stored = raw × scale (0.001: metres → km). |
required | boolean | Missing 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" | |
precision | number | Decimals to show. · range 0–10 |
isEnabled | boolean | Disabled → not decoded (default true). |
expectedMin | number | |
expectedMax | number | |
warningMin | number | |
warningMax | number | |
criticalMin | number | |
criticalMax | number | |
icon | string | length 0–64 |
defaultVisualization | "value" | "gauge" | "timeseries" | "state" | "map" | |
sortOrder | number | |
brickClass | string | Brick class name where one exists, e.g. Air_Temperature_Sensor (Addendum). · length 0–128 |
staleAfterS | number | Seconds after which a reading counts as stale in the twin (default 3600). · range 1–31536000 |
depthCm | number | Phase D: the depth this measurement is taken at, in cm (a soil probe: one measurement per depth). · range 0–1000 |
MfaCodeDto 1 fields
| Field | Type | Notes |
|---|---|---|
code * | string | length 6–6 |
MfaDisableDto 2 fields
| Field | Type | Notes |
|---|---|---|
password * | string | length 0–200 |
code * | string | length 6–6 |
ModelBindingDto 2 fields
| Field | Type | Notes |
|---|---|---|
componentId * | number | range 1–∞ |
nodeName * | string | length 1–255 |
ModelBindingsDto 1 fields
| Field | Type | Notes |
|---|---|---|
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
| Field | Type | Notes |
|---|---|---|
floorPlanId | number | range 1–∞ |
positionX * | number | range 0–1 |
positionY * | number | range 0–1 |
NoteDto 1 fields
| Field | Type | Notes |
|---|---|---|
note * | string | length 0–5000 |
OutlineDto 1 fields
| Field | Type | Notes |
|---|---|---|
polygon * | object | [[x, y], …] over the floor's plan, 0–1 from its top-left corner; null removes the outline · nullable |
PhoneActionDto 5 fields
| Field | Type | Notes |
|---|---|---|
clientId | string (uuid) | A replay of the same clientId is "Already received." (duplicate: true), not an error |
at | string | When it happened, by the phone's clock (not ahead of the server) |
note | string | length 0–5000 |
reason | string | length 0–2000 |
resolution | string | length 0–5000 |
PlaceDeviceDto 9 fields
| Field | Type | Notes |
|---|---|---|
deviceId * | number | range 1–∞ |
homeKind * | "vehicle" | "asset_component" | "field_zone" | "farm" | |
homeId * | number | range 1–∞ |
role | string | One of the home kind's allowed roles (the module registry) · length 0–64 · nullable |
latitude | number | |
longitude | number | |
floorPlanId | number | A position on a plan image (a floor's), 0–1 from its top-left corner — Buildings picks the room it falls in · range 1–∞ |
positionX | number | range 0–1 |
positionY | number | range 0–1 |
PlanScaleDto 1 fields
| Field | Type | Notes |
|---|---|---|
widthM * | number | The width the plan image covers, in metres (the viewer's scale); null clears it · range 0.01–10000 · nullable |
PreferenceDto 5 fields
| Field | Type | Notes |
|---|---|---|
channel * | "in_app" | "email" | |
isEnabled | boolean | |
severityMin | "info" | "warning" | "critical" | |
quietHours | object | { from: 'HH:MM', to: 'HH:MM', tz?, days?: [0-6] } or null · nullable |
digest | "none" | "hourly" | "daily" |
PreferencesDto 1 fields
| Field | Type | Notes |
|---|---|---|
preferences * | PreferenceDto[] |
ProviderDto 15 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–100 |
issuer | string | length 0–500 |
clientId | string | length 1–255 |
clientSecret | string | length 1–1000 |
scopes | string | length 0–500 |
emailClaim | string | length 0–64 |
groupsClaim | string | length 0–64 · nullable |
roleMapping | RoleMapDto[] | |
defaultRoleId | number | range 1–∞ · nullable |
jit | boolean | |
required | boolean | |
requireIdpMfa | boolean | |
sessionHours | number | range 1–24 |
enabled | boolean | |
domains | string[] |
ReasonDto 1 fields
| Field | Type | Notes |
|---|---|---|
reason | string | length 0–2000 |
ReassignDto 2 fields
| Field | Type | Notes |
|---|---|---|
vehicleId | number | range 1–∞ |
driverId | number | range 1–∞ |
ReorderStopsDto 1 fields
| Field | Type | Notes |
|---|---|---|
stopIds * | number[] |
ReplaceMappingsDto 1 fields
| Field | Type | Notes |
|---|---|---|
mappings * | FieldMappingDto[] |
ReplaceMeasurementsDto 1 fields
| Field | Type | Notes |
|---|---|---|
measurements * | MeasurementDto[] |
ReportIncidentDto 4 fields
| Field | Type | Notes |
|---|---|---|
incidentType * | string | length 0–255 |
severity * | "minor" | "moderate" | "severe" | |
incidentDate * | string | |
description | string | length 0–5000 |
RequestCommandDto 4 fields
| Field | Type | Notes |
|---|---|---|
type * | string | length 0–64 |
params | object | |
reason | string | Why — kept on the command and in the audit log. · length 0–500 |
expiresInS | number | How long to wait for evidence before 'expired' (default 600 s). · range 30–86400 |
ResetPasswordDto 1 fields
| Field | Type | Notes |
|---|---|---|
password * | string | length 8–200 |
ResolveFlagDto 1 fields
| Field | Type | Notes |
|---|---|---|
note | string | length 0–2000 |
RoleDto 3 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–100 |
description | string | length 0–1000 · nullable |
scopes * | string[] | Scopes (GET /api/permissions); only ones you hold yourself |
RoleMapDto 2 fields
| Field | Type | Notes |
|---|---|---|
group * | string | length 1–255 |
roleId * | number | range 1–∞ |
RoomDto 7 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
code | string | length 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 |
areaM2 | number | range 0–1000000 · nullable |
capacity | number | range 0–100000 · nullable |
comfort | object | Overrides of the room type's defaults, field by field: { temperatureMinC, temperatureMaxC, humidityMinPct, humidityMaxPct, co2MaxPpm, setpointMinC, setpointMaxC, occupiedFrom, occupiedTo } · nullable |
sortOrder | number |
RuleDto 11 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
description | string | length 0–2000 |
isEnabled | boolean | |
trigger * | object | { type: 'reading' } | { type: 'position' } | { type: 'schedule', every: '5m' | daily: '08:00', tz? } | { type: 'event', eventType } |
scope | object | { homeKind?, homeIds?, productIds?, deviceIds?, measurementKeys? } |
condition * | object | { type: 'threshold', key, op, value } | { type: 'all', of: [...] } | { type: 'fleet.geofence', … } … |
actions | object[] | |
clearActions | object[] | null / omitted = the default: clear the alarm the rule raised · nullable |
hygiene | object | { forS?, cooldownS?, quietHours?, escalation?, maxActionsPerHour? } |
severity | "info" | "warning" | "critical" | |
templateKey | string | Started from a template: a shipped key ('low-fuel') or 'company:<id>' — recorded as source template. · length 0–100 |
RuleTemplateDto 9 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
description | string | length 0–2000 |
trigger * | object | |
scope | object | |
condition * | object | |
actions | object[] | |
clearActions | object[] | nullable |
hygiene | object | |
severity | "info" | "warning" | "critical" |
RunDto 3 fields
| Field | Type | Notes |
|---|---|---|
sub | string | length 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
| Field | Type | Notes |
|---|---|---|
days * | number[] | 0 = Sunday … 6, in the farm's time zone |
startTime * | string | |
durationMinutes * | number | range 1–1440 |
isEnabled | boolean |
SmtpSettingsDto 7 fields
| Field | Type | Notes |
|---|---|---|
host * | string | length 0–255 |
port * | number | range 1–65535 |
security * | "tls" | "starttls" | "none" | |
username | string | length 0–255 · nullable |
password | string | omit to keep the stored password; null to remove it · length 0–500 · nullable |
from * | string | length 0–255 |
rejectUnauthorized | boolean |
SmtpTestDto 1 fields
| Field | Type | Notes |
|---|---|---|
to * | string (email) |
StartRunDto 2 fields
| Field | Type | Notes |
|---|---|---|
durationMinutes | number | range 1–1440 |
targetMoisturePct | number | range 1–100 |
StartSupportDto 4 fields
| Field | Type | Notes |
|---|---|---|
companyId * | number | range 1–∞ |
reason * | string | length 0–1000 |
minutes | number | |
level * | "read" | "full" |
StopInputDto 11 fields
| Field | Type | Notes |
|---|---|---|
jobId | number | From the job pool … · range 1–∞ |
kind | "yard" | "waypoint" | … or a bare yard / waypoint |
name | string | length 0–255 |
latitude | number | |
longitude | number | |
address | string | length 0–1000 |
windowStart | string | |
windowEnd | string | |
serviceMinutes | number | range 0–1440 |
arrivalRadiusM | number | range 20–5000 |
position | number | 1-based position to insert at (default: the end) · range 1–∞ |
SubmitInspectionDto 6 fields
| Field | Type | Notes |
|---|---|---|
clientId * | string (uuid) | Generated on the phone; a replayed submission with the same id returns the stored one. |
vehicleId * | number | range 1–∞ |
templateId | number | range 1–∞ |
startedAt * | string | |
submittedAt * | string | |
items * | InspectionAnswerDto[] |
TemplateItemDto 3 fields
| Field | Type | Notes |
|---|---|---|
key * | string | length 0–100 |
label * | string | length 0–255 |
labelAr | string | length 0–255 |
TripDto 6 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
vehicleId | number | range 1–∞ · nullable |
driverId | number | range 1–∞ · nullable |
plannedStart | string | |
notes | string | length 0–2000 |
jobIds | number[] | Stops from the job pool, in order |
UpdateBuildingDto 7 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
code | string | Unique in the company across buildings, floors and rooms, e.g. "B1" · length 1–100 · nullable |
address | string | length 0–1000 · nullable |
latitude | number | nullable |
longitude | number | nullable |
timezone | string | IANA zone occupancy hours are judged in (an IANA time zone) · length 0–64 |
sortOrder | number |
UpdateDriverDto 11 fields
| Field | Type | Notes |
|---|---|---|
firstName | string | length 0–100 |
lastName | string | length 0–100 |
email | string (email) | length 0–255 |
phone | string | length 0–50 |
licenseNumber | string | length 0–100 |
licenseClass | string | length 0–50 |
licenseExpiryDate | string | |
status | "active" | "on_leave" | "suspended" | "terminated" | |
hireDate | string | |
identityNumber | string | length 0–50 |
identityType | string | length 0–50 |
UpdateFarmDto 7 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
latitude | number | |
longitude | number | |
areaHa | number | range 0–1000000 |
timezone | string | IANA zone the farm's schedules run in (an IANA time zone) · length 0–64 |
rainHoldMm | number | Rain hold (design §4): rainfall over this many mm … (null = off) · range 0–1000 · nullable |
rainHoldHours | number | … in this many hours at the farm's weather station refuses a start · range 1–168 |
UpdateFieldDto 7 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
polygon | object | GeoJSON Polygon ([lng, lat] order); the area is computed from it · nullable |
soilType | "sand" | "loamy_sand" | "sandy_loam" | "loam" | "clay_loam" | "clay" | nullable |
cropId | number | range 1–∞ · nullable |
plantingDate | string | nullable |
expectedHarvest | string | nullable |
notes | string | length 0–2000 · nullable |
UpdateFloorDto 6 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
code | string | length 1–100 · nullable |
floorIndex | number | 0 = ground, negative = basement; unique in the building · range -20–300 · nullable |
elevationM | number | The 3D viewer's floor height above ground and storey height (m) · range -200–2000 · nullable |
heightM | number | range 0.5–100 · nullable |
sortOrder | number |
UpdateGeofenceDto 7 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
centerLatitude | number | range -90–90 |
centerLongitude | number | range -180–180 |
radiusM | number | range 1–∞ |
alertOn | "enter" | "exit" | "both" | |
isActive | boolean | |
yardId | number | range 1–∞ · nullable |
UpdateGroupDto 9 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
valveDeviceId | number | range 1–∞ |
pumpDeviceId | number | range 1–∞ · nullable |
flowDeviceId | number | range 1–∞ · nullable |
maxRunMinutes | number | range 1–1440 |
minIntervalHours | number | range 0–168 |
noFlowTimeoutS | number | range 10–86400 |
isEnabled | boolean | |
zoneIds | number[] | The zones it waters (all on the group's farm); replaces the list |
UpdateInspectionTemplateDto 4 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
vehicleCategoryId | number | B4: the category by id. Omit both (or null) for the company's default checklist. · range 1–∞ · nullable |
vehicleCategory | string | Legacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable |
items | TemplateItemDto[] |
UpdateJobDto 12 fields
| Field | Type | Notes |
|---|---|---|
externalRef | string | length 0–100 |
type | "delivery" | "pickup" | "service" | "transport" | "other" | |
customerName | string | length 0–255 |
contactPhone | string | length 0–50 |
address | string | length 0–1000 |
latitude | number | |
longitude | number | |
windowStart | string | |
windowEnd | string | |
serviceMinutes | number | range 0–1440 |
priority | "low" | "normal" | "high" | "urgent" | |
notes | string | length 0–2000 |
UpdateMeDto 1 fields
| Field | Type | Notes |
|---|---|---|
locale | "en" | "ar" |
UpdateProductDto 5 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
purpose | string | length 0–500 |
allowWrites | boolean | Read-only by default (Addendum): commands reach this product's devices only once an admin allows writes. |
integrationSourceId | number | Which source delivers its commands (else the source its devices last reported through). · range 1–∞ |
commandEvidence | object | Per command type, the measurement that proves it: { "immobilize": { "key": "blocked", "value": true } } (B2 ruling 11). |
UpdateRoleDto 3 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–100 |
description | string | length 0–1000 · nullable |
scopes | string[] |
UpdateRoomDto 7 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
code | string | length 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 |
areaM2 | number | range 0–1000000 · nullable |
capacity | number | range 0–100000 · nullable |
comfort | object | Overrides of the room type's defaults, field by field: { temperatureMinC, temperatureMaxC, humidityMinPct, humidityMaxPct, co2MaxPpm, setpointMinC, setpointMaxC, occupiedFrom, occupiedTo } · nullable |
sortOrder | number |
UpdateScheduleDto 4 fields
| Field | Type | Notes |
|---|---|---|
days | number[] | 0 = Sunday … 6, in the farm's time zone |
startTime | string | |
durationMinutes | number | range 1–1440 |
isEnabled | boolean |
UpdateSourceDto 3 fields
| Field | Type | Notes |
|---|---|---|
allowWrites | boolean | Read-only by default (Addendum): commands reach devices through this source only once an admin allows writes. |
outboundConfig | object | Where the adapter sends commands, e.g. { baseUrl: 'http://traccar.local:8082' }. |
outboundCredentials | object | e.g. { token } (Traccar) or { apiToken } (ChirpStack). Stored encrypted; never returned. |
UpdateStopDto 6 fields
| Field | Type | Notes |
|---|---|---|
windowStart | string | nullable |
windowEnd | string | nullable |
serviceMinutes | number | range 0–1440 |
arrivalRadiusM | number | range 20–5000 |
name | string | length 0–255 |
address | string | length 0–1000 |
UpdateTripDto 3 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
plannedStart | string | |
notes | string | length 0–2000 |
UpdateUserDto 6 fields
| Field | Type | Notes |
|---|---|---|
firstName | string | length 1–100 |
lastName | string | length 1–100 |
email | string (email) | length 0–255 |
role | "admin" | "manager" | "user" | "driver" | "technician" | |
roleId | number | Phase E1: a member's role — wins over `role` · range 1–∞ |
driverId | number | A driver login's record; null only makes sense with a role change away from driver. · range 1–∞ · nullable |
UpdateVehicleCategoryDto 2 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–100 |
sortOrder | number | Position in lists; omitted = after the last one. · range 0–1000000 |
UpdateVehicleDto 14 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 0–255 |
vehicleCategoryId | number | B4: the category by id (GET /vehicle-categories). Wins over vehicleCategory; null clears. · range 1–∞ · nullable |
vehicleCategory | string | Legacy free text: matched to a category case-insensitively, created if new. · length 0–100 · nullable |
make | string | length 0–255 |
model | string | length 0–255 |
lengthM | number | range 0–∞ |
widthM | number | range 0–∞ |
heightM | number | range 0–∞ |
acquisitionDate | string | |
acquisitionCost | string | |
plateNumber | string | length 0–50 |
plateType | string | length 0–50 |
sequenceNumber | string | length 0–50 |
vehicleType | string | length 0–100 |
UpdateWebhookSubscriptionDto 5 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 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"[] | |
positionIntervalS | number | range 1–86400 |
isActive | boolean |
UpdateWorkOrderDto 8 fields
| Field | Type | Notes |
|---|---|---|
title | string | Optional with alarmId: the alarm's title · length 1–255 |
description | string | length 0–5000 · nullable |
priority | "low" | "normal" | "high" | "urgent" | Default: from the alarm's severity (critical → urgent, warning → high), else normal |
componentId | number | A building, floor or room; with alarmId, the alarm's room · range 1–∞ · nullable |
deviceId | number | range 1–∞ · nullable |
alarmId | number | "Create work order" on an alarm — one open work order per alarm · range 1–∞ · nullable |
dueAt | string | nullable |
assignedTo | number | A technician, manager or admin of the company · range 1–∞ · nullable |
UpdateYardSlotDto 5 fields
| Field | Type | Notes |
|---|---|---|
slotNumber | string | length 0–50 |
positionX | number | range 0–1 |
positionY | number | range 0–1 |
maxLengthM | number | range 0–∞ |
allowedCategoryIds | number[] | B4: only vehicles of these categories may check in; omitted, null or [] = any. · nullable |
UpdateZoneDto 5 fields
| Field | Type | Notes |
|---|---|---|
name | string | length 1–255 |
polygon | object | nullable |
irrigationGroupId | number | range 1–∞ · nullable |
sensorDepthsCm | number[] | The depths its soil sensors read at, e.g. [20, 40, 60] |
sortOrder | number |
WorkOrderDto 8 fields
| Field | Type | Notes |
|---|---|---|
title | string | Optional with alarmId: the alarm's title · length 1–255 |
description | string | length 0–5000 · nullable |
priority | "low" | "normal" | "high" | "urgent" | Default: from the alarm's severity (critical → urgent, warning → high), else normal |
componentId | number | A building, floor or room; with alarmId, the alarm's room · range 1–∞ · nullable |
deviceId | number | range 1–∞ · nullable |
alarmId | number | "Create work order" on an alarm — one open work order per alarm · range 1–∞ · nullable |
dueAt | string | nullable |
assignedTo | number | A technician, manager or admin of the company · range 1–∞ · nullable |
ZoneDto 5 fields
| Field | Type | Notes |
|---|---|---|
name * | string | length 1–255 |
polygon | object | nullable |
irrigationGroupId | number | range 1–∞ · nullable |
sensorDepthsCm | number[] | The depths its soil sensors read at, e.g. [20, 40, 60] |
sortOrder | number |
* required