{"openapi":"3.0.0","paths":{"/health":{"get":{"operationId":"HealthController_get","parameters":[],"responses":{"200":{"description":""}},"tags":["health"]}},"/v1/devices":{"get":{"operationId":"V1Controller_listDevices","parameters":[{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Exact IMEI. Unlike `search`, this matches a single device."},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["active","inactive","blocked"]},"description":"Filter by device status."},{"name":"search","required":false,"in":"query","schema":{"type":"string"},"description":"Case-insensitive substring over name, IMEI and plate."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/devices/{device_id}":{"get":{"operationId":"V1Controller_getDevice","parameters":[{"name":"device_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/positions/latest":{"get":{"operationId":"V1Controller_latestPositions","parameters":[{"name":"if-none-match","required":true,"in":"header","schema":{"type":"string"}},{"name":"If-None-Match","in":"header","description":"The ETag from a previous response. Returns 304 with no body when nothing has moved, and a 304 does not count against the daily quota.","required":false,"schema":{"type":"string"}},{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/positions/history":{"get":{"operationId":"V1Controller_positionHistory","parameters":[{"name":"valid_only","required":false,"in":"query","schema":{"type":"boolean","default":true},"description":"Drop frames the quality filter rejected (no fix, implausible jumps). Leave on unless you are debugging."},{"name":"device_id","required":true,"in":"query","schema":{"type":"string","format":"uuid"},"description":"The device to read. Either this or `imei`."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"The device to read, by IMEI. Either this or `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/trips":{"get":{"operationId":"V1Controller_listTrips","parameters":[{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/alerts":{"get":{"operationId":"V1Controller_listAlerts","parameters":[{"name":"acknowledged","required":false,"in":"query","schema":{"type":"string","enum":["true","false"]},"description":"Only acknowledged, or only un-acknowledged. Omit for both."},{"name":"severity","required":false,"in":"query","schema":{"type":"string","enum":["info","warning","critical"]}},{"name":"alert_type","required":false,"in":"query","schema":{"type":"string"},"description":"Exact alert type, e.g. `speeding`. Not validated against a list: an unknown type matches nothing and returns an empty page."},{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/sensors/{kind}":{"get":{"operationId":"V1Controller_listSensors","parameters":[{"name":"kind","required":true,"in":"path","schema":{"type":"string"}},{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/geofences":{"get":{"operationId":"V1Controller_listGeofences","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/geofence-events":{"get":{"operationId":"V1Controller_listGeofenceEvents","parameters":[{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/devices/{device_id}/alert-settings":{"get":{"operationId":"V1Controller_deviceAlertSettings","parameters":[{"name":"device_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/devices/{device_id}/geofences":{"get":{"operationId":"V1Controller_deviceGeofences","parameters":[{"name":"device_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/users":{"get":{"operationId":"V1Controller_listUsers","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Rows per page. Max 500."},{"name":"cursor","required":false,"in":"query","schema":{"type":"string"},"description":"Opaque cursor from a previous response’s `next_cursor`. Do not construct or parse it."}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/users/{user_id}":{"get":{"operationId":"V1Controller_getUser","parameters":[{"name":"user_id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["v1"]}},"/v1/reports/mileage":{"get":{"operationId":"V1Controller_mileageReport","parameters":[{"name":"device_id","required":false,"in":"query","schema":{"type":"string","format":"uuid"},"description":"Narrow to one device. Omit for every device the key can see."},{"name":"imei","required":false,"in":"query","schema":{"type":"string"},"description":"Narrow to one device by IMEI, instead of `device_id`."},{"name":"from","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"Start of the window, ISO 8601. Defaults to 24 hours before `to`. The span is capped at 31 days by moving this forward, never by moving `to` back."},{"name":"to","required":false,"in":"query","schema":{"type":"string","format":"date-time"},"description":"End of the window, ISO 8601. Defaults to now."}],"responses":{"200":{"description":""}},"tags":["v1"]}}},"info":{"title":"Sensoit Open API","description":"Read access to your fleet: devices, live positions, history, trips, alerts, sensors and geofences. Authenticate with `Authorization: Bearer <api key>`. Poll `GET /v1/positions/latest` and send its ETag back as `If-None-Match` — a 304 costs no daily quota.","version":"1.0.0","contact":{}},"tags":[],"servers":[{"url":"https://stage-app.sensoitgps.com/api/v1","description":"Sensoit Open API"}],"components":{"securitySchemes":{"apiKey":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Your API key, created in the portal."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{}}}