{"openapi":"3.1.0","info":{"title":"Routario Platform API","description":"High-performance GPS tracking and IoT platform.\n\nAuthentication: create an API key in User Settings -> API Keys, click Authorize in Swagger, and paste the `rt_...` key. Swagger adds the Bearer prefix automatically.","version":"1.0.0"},"paths":{"/api/alerts/types":{"get":{"tags":["alerts"],"summary":"Get Alert Types","description":"Return all registered alert type definitions. Any authenticated user.","operationId":"get_alert_types_api_alerts_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/alerts/report":{"get":{"tags":["alerts"],"summary":"Get Alerts Report","description":"Alert report with cross-user scoping.\n- Super admin  : all users by default; filter with user_ids.\n- Company admin: scoped to their company; filter with user_ids.\n- Regular user : always own alerts only; user_ids ignored.","operationId":"get_alerts_report_api_alerts_report_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"default":[],"title":"User Ids"}},{"name":"device_ids","in":"query","required":false,"schema":{"type":"array","items":{"type":"integer"},"default":[],"title":"Device Ids"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"alert_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alert Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts":{"get":{"tags":["alerts"],"summary":"Get Alerts","operationId":"get_alerts_api_alerts_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"read_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Read Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertResponse"},"title":"Response Get Alerts Api Alerts Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts/{alert_id}/read":{"post":{"tags":["alerts"],"summary":"Mark Alert Read","operationId":"mark_alert_read_api_alerts__alert_id__read_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"integer","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/alerts/{alert_id}":{"delete":{"tags":["alerts"],"summary":"Delete Alert","operationId":"delete_alert_api_alerts__alert_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"integer","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/api-keys/scopes":{"get":{"tags":["api-keys"],"summary":"List Api Key Scopes","operationId":"list_api_key_scopes_api_api_keys_scopes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/api-keys":{"get":{"tags":["api-keys"],"summary":"List Api Keys","operationId":"list_api_keys_api_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["api-keys"],"summary":"Create Api Key","operationId":"create_api_key_api_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/api-keys/{key_id}":{"put":{"tags":["api-keys"],"summary":"Update Api Key","operationId":"update_api_key_api_api_keys__key_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["api-keys"],"summary":"Revoke Api Key","operationId":"revoke_api_key_api_api_keys__key_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/audit-logs":{"get":{"tags":["audit"],"summary":"List Audit Logs","operationId":"list_audit_logs_api_audit_logs_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"actor_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Actor User Id"}},{"name":"company_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/backup/download":{"get":{"tags":["backup"],"summary":"Download Backup","operationId":"download_backup_api_admin_backup_download_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/admin/backup/restore":{"post":{"tags":["backup"],"summary":"Restore Backup","operationId":"restore_backup_api_admin_backup_restore_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_restore_backup_api_admin_backup_restore_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/billing/plans":{"get":{"tags":["billing"],"summary":"List Plans","operationId":"list_plans_api_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["billing"],"summary":"Create Plan","operationId":"create_plan_api_billing_plans_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPlanIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/billing/plans/{plan_id}":{"put":{"tags":["billing"],"summary":"Update Plan","operationId":"update_plan_api_billing_plans__plan_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingPlanIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["billing"],"summary":"Delete Plan","operationId":"delete_plan_api_billing_plans__plan_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/companies/{company_id}":{"put":{"tags":["billing"],"summary":"Update Company Billing","operationId":"update_company_billing_api_billing_companies__company_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyBillingIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/companies/{company_id}/usage":{"get":{"tags":["billing"],"summary":"Company Usage","operationId":"company_usage_api_billing_companies__company_id__usage_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":2000,"title":"Year"}},{"name":"month","in":"query","required":true,"schema":{"type":"integer","maximum":12,"minimum":1,"title":"Month"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/usage-events":{"post":{"tags":["billing"],"summary":"Record Usage Event","operationId":"record_usage_event_api_billing_usage_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageEventIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/billing/companies/{company_id}/invoices":{"post":{"tags":["billing"],"summary":"Generate Invoice","operationId":"generate_invoice_api_billing_companies__company_id__invoices_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":2000,"title":"Year"}},{"name":"month","in":"query","required":true,"schema":{"type":"integer","maximum":12,"minimum":1,"title":"Month"}},{"name":"plan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["billing"],"summary":"List Invoices","operationId":"list_invoices_api_billing_companies__company_id__invoices_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/command":{"post":{"tags":["commands"],"summary":"Send Command","description":"Queue or send a command for a GPS device.","operationId":"send_command_api_devices__device_id__command_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommandCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/command/preview":{"post":{"tags":["commands"],"summary":"Preview Command","description":"Preview encoding of a command before sending.","operationId":"preview_command_api_devices__device_id__command_preview_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Command Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/protocol/{protocol}/command/preview":{"post":{"tags":["commands"],"summary":"Preview Command For Protocol","description":"Preview encoding of a command for a given protocol (no device required).","operationId":"preview_command_for_protocol_api_devices_protocol__protocol__command_preview_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"protocol","in":"path","required":true,"schema":{"type":"string","title":"Protocol"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Command Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/commands/{command_id}":{"delete":{"tags":["commands"],"summary":"Cancel Command","description":"Cancel a pending command.","operationId":"cancel_command_api_devices__device_id__commands__command_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"command_id","in":"path","required":true,"schema":{"type":"integer","title":"Command Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/commands/{command_id}/history":{"delete":{"tags":["commands"],"summary":"Delete Command History","description":"Delete a command history entry (Super Admin only).","operationId":"delete_command_history_api_devices__device_id__commands__command_id__history_delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"command_id","in":"path","required":true,"schema":{"type":"integer","title":"Command Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/commands":{"get":{"tags":["commands"],"summary":"Get Device Commands","description":"Get command history for a device.","operationId":"get_device_commands_api_devices__device_id__commands_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/companies":{"get":{"tags":["companies"],"summary":"Get All Companies","operationId":"get_all_companies_api_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CompanyResponse"},"type":"array","title":"Response Get All Companies Api Companies Get"}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["companies"],"summary":"Create Company","operationId":"create_company_api_companies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/companies/{company_id}":{"get":{"tags":["companies"],"summary":"Get Company","operationId":"get_company_api_companies__company_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["companies"],"summary":"Update Company","operationId":"update_company_api_companies__company_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["companies"],"summary":"Delete Company","operationId":"delete_company_api_companies__company_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/companies/{company_id}/branding/icon":{"post":{"tags":["companies"],"summary":"Upload Company Icon","operationId":"upload_company_icon_api_companies__company_id__branding_icon_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_company_icon_api_companies__company_id__branding_icon_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["companies"],"summary":"Delete Company Icon","operationId":"delete_company_icon_api_companies__company_id__branding_icon_delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/companies/{company_id}/branding/badge":{"post":{"tags":["companies"],"summary":"Upload Company Badge","operationId":"upload_company_badge_api_companies__company_id__branding_badge_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_company_badge_api_companies__company_id__branding_badge_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["companies"],"summary":"Delete Company Badge","operationId":"delete_company_badge_api_companies__company_id__branding_badge_delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/companies/{company_id}/users":{"get":{"tags":["companies"],"summary":"Get Company Users","operationId":"get_company_users_api_companies__company_id__users_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserResponse"},"title":"Response Get Company Users Api Companies  Company Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["companies"],"summary":"Assign User To Company","description":"Assign or remove a user from a company.","operationId":"assign_user_to_company_api_companies__company_id__users_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"user_id","in":"query","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","default":"add","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/companies/{company_id}/devices":{"get":{"tags":["companies"],"summary":"Get Company Devices","operationId":"get_company_devices_api_companies__company_id__devices_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceResponse"},"title":"Response Get Company Devices Api Companies  Company Id  Devices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["companies"],"summary":"Assign Device To Company","description":"Assign or remove a device from a company.","operationId":"assign_device_to_company_api_companies__company_id__devices_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"device_id","in":"query","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","default":"add","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/currency/rates":{"get":{"tags":["currency"],"summary":"List Rates","operationId":"list_rates_api_currency_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]},"put":{"tags":["currency"],"summary":"Save Rates","operationId":"save_rates_api_currency_rates_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrencyRatesIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/currency/rates/refresh":{"post":{"tags":["currency"],"summary":"Refresh Rates","operationId":"refresh_rates_api_currency_rates_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CurrencyRefreshIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/dashcam/upload":{"post":{"tags":["dashcam"],"summary":"Upload Clip","description":"Teltonika DualCam / generic HTTP camera upload.\nConfigure the camera's media server URL to point here.\nRequired field: imei. Optional: timestamp (Unix ms or s), type (Teltonika\nevent int), event_type (string), channel (0=front,1=rear,2=interior),\nlat, lon, speed, file.","operationId":"upload_clip_api_dashcam_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_clip_api_dashcam_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashcam/clips":{"get":{"tags":["dashcam"],"summary":"List Clips","operationId":"list_clips_api_dashcam_clips_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VideoClipResponse"},"title":"Response List Clips Api Dashcam Clips Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashcam/clips/{clip_id}":{"delete":{"tags":["dashcam"],"summary":"Delete Clip","operationId":"delete_clip_api_dashcam_clips__clip_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"integer","title":"Clip Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashcam/clips/{clip_id}/video":{"get":{"tags":["dashcam"],"summary":"Serve Video","operationId":"serve_video_api_dashcam_clips__clip_id__video_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"integer","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/dashcam/clips/{clip_id}/thumbnail":{"get":{"tags":["dashcam"],"summary":"Serve Thumbnail","operationId":"serve_thumbnail_api_dashcam_clips__clip_id__thumbnail_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"clip_id","in":"path","required":true,"schema":{"type":"integer","title":"Clip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/all":{"get":{"tags":["devices"],"summary":"Get All Devices","description":"Return devices. Super admin sees all; company admin sees their company's.","operationId":"get_all_devices_api_devices_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DeviceResponse"},"type":"array","title":"Response Get All Devices Api Devices All Get"}}}}},"security":[{"Routario API Key":[]}]}},"/api/devices":{"get":{"tags":["devices"],"summary":"Get Devices","description":"Return devices for the caller. Company admins see all company devices.","operationId":"get_devices_api_devices_get","security":[{"Routario API Key":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceResponse"},"title":"Response Get Devices Api Devices Get"}}}}}},"post":{"tags":["devices"],"summary":"Create Device","description":"Create a new device.","operationId":"create_device_api_devices_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"assign_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"User ID to assign device to","title":"Assign To"},"description":"User ID to assign device to"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}":{"get":{"tags":["devices"],"summary":"Get Device","operationId":"get_device_api_devices__device_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["devices"],"summary":"Update Device","operationId":"update_device_api_devices__device_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"new_odometer","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Odometer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["devices"],"summary":"Delete Device","description":"Delete a device and all associated data.","operationId":"delete_device_api_devices__device_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/state":{"get":{"tags":["devices"],"summary":"Get Device State","operationId":"get_device_state_api_devices__device_id__state_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/statistics":{"get":{"tags":["devices"],"summary":"Get Device Statistics","operationId":"get_device_statistics_api_devices__device_id__statistics_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/trips":{"get":{"tags":["devices"],"summary":"Get Device Trips","operationId":"get_device_trips_api_devices__device_id__trips_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TripResponse"},"title":"Response Get Device Trips Api Devices  Device Id  Trips Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/users":{"get":{"tags":["devices"],"summary":"Get Device Users","description":"Get users assigned to this device. Admin or company admin.","operationId":"get_device_users_api_devices__device_id__users_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserResponse"},"title":"Response Get Device Users Api Devices  Device Id  Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["devices"],"summary":"Assign User To Device","description":"Assign or remove a user from a device. Admin or company admin.","operationId":"assign_user_to_device_api_devices__device_id__users_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"user_id","in":"query","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","default":"add","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/command-support":{"get":{"tags":["devices"],"summary":"Check Command Support","operationId":"check_command_support_api_devices__device_id__command_support_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/user-commands":{"post":{"tags":["devices"],"summary":"Add User Command","operationId":"add_user_command_api_devices__device_id__user_commands_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Cmd Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/user-commands/{cmd_id}":{"delete":{"tags":["devices"],"summary":"Delete User Command","operationId":"delete_user_command_api_devices__device_id__user_commands__cmd_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"cmd_id","in":"path","required":true,"schema":{"type":"string","title":"Cmd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/protocol/{protocol}/command-support":{"get":{"tags":["devices"],"summary":"Check Protocol Command Support","operationId":"check_protocol_command_support_api_devices_protocol__protocol__command_support_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"protocol","in":"path","required":true,"schema":{"type":"string","title":"Protocol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/drivers":{"get":{"tags":["drivers"],"summary":"List Drivers","operationId":"list_drivers_api_drivers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DriverResponse"},"type":"array","title":"Response List Drivers Api Drivers Get"}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["drivers"],"summary":"Create Driver","operationId":"create_driver_api_drivers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/drivers/{driver_id}":{"put":{"tags":["drivers"],"summary":"Update Driver","operationId":"update_driver_api_drivers__driver_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"driver_id","in":"path","required":true,"schema":{"type":"integer","title":"Driver Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriverResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["drivers"],"summary":"Delete Driver","operationId":"delete_driver_api_drivers__driver_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"driver_id","in":"path","required":true,"schema":{"type":"integer","title":"Driver Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/drivers/assign":{"post":{"tags":["drivers"],"summary":"Assign Driver","description":"Assign (or unassign) a driver to a device's active state.","operationId":"assign_driver_api_drivers_assign_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"query","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"driver_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Driver Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/fuel":{"get":{"tags":["fuel"],"summary":"List Fuel Logs","operationId":"list_fuel_logs_api_devices__device_id__fuel_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FuelLogResponse"},"title":"Response List Fuel Logs Api Devices  Device Id  Fuel Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["fuel"],"summary":"Create Fuel Log","operationId":"create_fuel_log_api_devices__device_id__fuel_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/fuel/{log_id}":{"put":{"tags":["fuel"],"summary":"Update Fuel Log","operationId":"update_fuel_log_api_devices__device_id__fuel__log_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"integer","title":"Log Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fuel"],"summary":"Delete Fuel Log","operationId":"delete_fuel_log_api_devices__device_id__fuel__log_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"log_id","in":"path","required":true,"schema":{"type":"integer","title":"Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geofences":{"get":{"tags":["geofences"],"summary":"Get Geofences","operationId":"get_geofences_api_geofences_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["geofences"],"summary":"Create Geofence","operationId":"create_geofence_api_geofences_post","security":[{"Routario API Key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/geofences/navigation-preview":{"post":{"tags":["geofences"],"summary":"Navigation Preview","operationId":"navigation_preview_api_geofences_navigation_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceNavigationPreviewIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/geofences/{geofence_id}":{"put":{"tags":["geofences"],"summary":"Update Geofence","operationId":"update_geofence_api_geofences__geofence_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"geofence_id","in":"path","required":true,"schema":{"type":"integer","title":"Geofence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeofenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["geofences"],"summary":"Delete Geofence","operationId":"delete_geofence_api_geofences__geofence_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"geofence_id","in":"path","required":true,"schema":{"type":"integer","title":"Geofence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health/live":{"get":{"tags":["health"],"summary":"Live","operationId":"live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Ready","operationId":"ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["health"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/integrations/providers":{"get":{"tags":["integrations"],"summary":"List Providers","description":"Return metadata for all registered integration providers.","operationId":"list_providers_api_integrations_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/integrations/accounts":{"get":{"tags":["integrations"],"summary":"List Accounts","operationId":"list_accounts_api_integrations_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AccountResponse"},"type":"array","title":"Response List Accounts Api Integrations Accounts Get"}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["integrations"],"summary":"Create Account","description":"Create a new IntegrationAccount or return the existing one if credentials\nfor this (provider, label) already exist — enabling credential sharing.","operationId":"create_account_api_integrations_accounts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/integrations/accounts/{account_id}":{"delete":{"tags":["integrations"],"summary":"Delete Account","operationId":"delete_account_api_integrations_accounts__account_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/integrations/accounts/test":{"post":{"tags":["integrations"],"summary":"Test Credentials","description":"Test credentials without saving them.","operationId":"test_credentials_api_integrations_accounts_test_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestCredentialsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/integrations/accounts/{account_id}/devices":{"get":{"tags":["integrations"],"summary":"List Account Devices","description":"List remote devices available on an integration account.","operationId":"list_account_devices_api_integrations_accounts__account_id__devices_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/llm/providers":{"get":{"tags":["llm"],"summary":"Get Llm Providers","description":"Return metadata and field schemas for all registered LLM providers.","operationId":"get_llm_providers_api_llm_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/llm/chat":{"post":{"tags":["llm"],"summary":"Handle Llm Chat","description":"Execute a Copilot query over fleet telemetry.","operationId":"handle_llm_chat_api_llm_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/llm/report":{"post":{"tags":["llm"],"summary":"Handle Llm Report","description":"Generate a custom AI Fleet Report.","operationId":"handle_llm_report_api_llm_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LLMReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/devices/{device_id}/logbook":{"get":{"tags":["logbook"],"summary":"List Logbook","operationId":"list_logbook_api_devices__device_id__logbook_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LogbookEntryResponse"},"title":"Response List Logbook Api Devices  Device Id  Logbook Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["logbook"],"summary":"Create Logbook Entry","operationId":"create_logbook_entry_api_devices__device_id__logbook_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_logbook_entry_api_devices__device_id__logbook_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogbookEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/logbook/{entry_id}":{"put":{"tags":["logbook"],"summary":"Update Logbook Entry","operationId":"update_logbook_entry_api_devices__device_id__logbook__entry_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"integer","title":"Entry Id"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_update_logbook_entry_api_devices__device_id__logbook__entry_id__put"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogbookEntryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["logbook"],"summary":"Delete Logbook Entry","operationId":"delete_logbook_entry_api_devices__device_id__logbook__entry_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"entry_id","in":"path","required":true,"schema":{"type":"integer","title":"Entry Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/devices/{device_id}/maintenance/service":{"post":{"tags":["maintenance"],"summary":"Log Service","description":"Mark a maintenance alert row as just serviced.\nAdvances next_service_km and next_service_date by one interval.","operationId":"log_service_api_devices__device_id__maintenance_service_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"integer","title":"Device Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceLogRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mfa/setup":{"post":{"tags":["mfa"],"summary":"Setup Mfa","operationId":"setup_mfa_api_mfa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/mfa/enable":{"post":{"tags":["mfa"],"summary":"Enable Mfa","operationId":"enable_mfa_api_mfa_enable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/mfa/disable":{"post":{"tags":["mfa"],"summary":"Disable Mfa","operationId":"disable_mfa_api_mfa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/mfa/status":{"get":{"tags":["mfa"],"summary":"Mfa Status","operationId":"mfa_status_api_mfa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/mfa/users/{user_id}/status":{"get":{"tags":["mfa"],"summary":"User Mfa Status","operationId":"user_mfa_status_api_mfa_users__user_id__status_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mfa/users/{user_id}/setup":{"post":{"tags":["mfa"],"summary":"Setup User Mfa","operationId":"setup_user_mfa_api_mfa_users__user_id__setup_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mfa/users/{user_id}/enable":{"post":{"tags":["mfa"],"summary":"Enable User Mfa","operationId":"enable_user_mfa_api_mfa_users__user_id__enable_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mfa/users/{user_id}/disable":{"post":{"tags":["mfa"],"summary":"Disable User Mfa","operationId":"disable_user_mfa_api_mfa_users__user_id__disable_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MfaOptionalVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/passkeys":{"get":{"tags":["passkeys"],"summary":"List Passkeys","operationId":"list_passkeys_api_passkeys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/passkeys/users/{user_id}":{"get":{"tags":["passkeys"],"summary":"List User Passkeys","operationId":"list_user_passkeys_api_passkeys_users__user_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/passkeys/{passkey_id}":{"patch":{"tags":["passkeys"],"summary":"Update Passkey","operationId":"update_passkey_api_passkeys__passkey_id__patch","security":[{"Routario API Key":[]}],"parameters":[{"name":"passkey_id","in":"path","required":true,"schema":{"type":"integer","title":"Passkey Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["passkeys"],"summary":"Delete Passkey","operationId":"delete_passkey_api_passkeys__passkey_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"passkey_id","in":"path","required":true,"schema":{"type":"integer","title":"Passkey Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/passkeys/users/{user_id}/{passkey_id}":{"patch":{"tags":["passkeys"],"summary":"Update User Passkey","operationId":"update_user_passkey_api_passkeys_users__user_id___passkey_id__patch","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"passkey_id","in":"path","required":true,"schema":{"type":"integer","title":"Passkey Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["passkeys"],"summary":"Delete User Passkey","operationId":"delete_user_passkey_api_passkeys_users__user_id___passkey_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"passkey_id","in":"path","required":true,"schema":{"type":"integer","title":"Passkey Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/passkeys/register/options":{"post":{"tags":["passkeys"],"summary":"Register Options","operationId":"register_options_api_passkeys_register_options_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/passkeys/register/verify":{"post":{"tags":["passkeys"],"summary":"Register Verify","operationId":"register_verify_api_passkeys_register_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/passkeys/login/options":{"post":{"tags":["passkeys"],"summary":"Login Options","operationId":"login_options_api_passkeys_login_options_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyOptionsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/passkeys/login/verify":{"post":{"tags":["passkeys"],"summary":"Login Verify","operationId":"login_verify_api_passkeys_login_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasskeyVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/positions/history":{"post":{"tags":["positions"],"summary":"Get Position History","operationId":"get_position_history_api_positions_history_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositionHistoryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositionHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/users/{user_id}/push-subscription":{"post":{"tags":["push-notifications"],"summary":"Save Push Subscription","description":"Called by pwa.js after the user grants notification permission.\nSaves the browser's push subscription to the DB.\nUser can only register their own subscription.","operationId":"save_push_subscription_api_users__user_id__push_subscription_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushSubscriptionPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["push-notifications"],"summary":"Remove Push Subscription","description":"Called by pwa.js when the user disables notifications.","operationId":"remove_push_subscription_api_users__user_id__push_subscription_delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}/notify":{"post":{"tags":["push-notifications"],"summary":"Admin Notify User","description":"Send a manual notification to a user. Accessible by super admins and company admins.","operationId":"admin_notify_user_api_users__user_id__notify_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminNotifyPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report-schedules/triggers":{"get":{"tags":["report-schedules"],"summary":"List Schedule Triggers","operationId":"list_schedule_triggers_api_report_schedules_triggers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/report-schedules":{"get":{"tags":["report-schedules"],"summary":"List Schedules","operationId":"list_schedules_api_report_schedules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["report-schedules"],"summary":"Create Schedule","operationId":"create_schedule_api_report_schedules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/report-schedules/{schedule_id}":{"put":{"tags":["report-schedules"],"summary":"Update Schedule","operationId":"update_schedule_api_report_schedules__schedule_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["report-schedules"],"summary":"Delete Schedule","operationId":"delete_schedule_api_report_schedules__schedule_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report-schedules/{schedule_id}/runs":{"get":{"tags":["report-schedules"],"summary":"List Runs","operationId":"list_runs_api_report_schedules__schedule_id__runs_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report-schedules/{schedule_id}/runs/{run_id}":{"get":{"tags":["report-schedules"],"summary":"Get Run","operationId":"get_run_api_report_schedules__schedule_id__runs__run_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"integer","title":"Schedule Id"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/types":{"get":{"tags":["reports"],"summary":"Report Types","operationId":"report_types_api_reports_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/reports/sensor_graphs/keys":{"get":{"tags":["reports"],"summary":"Sensor Keys","operationId":"sensor_keys_api_reports_sensor_graphs_keys_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/sensor-keys":{"get":{"tags":["reports"],"summary":"Sensor Keys","operationId":"sensor_keys_api_reports_sensor_keys_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/fleet":{"get":{"tags":["reports"],"summary":"Fleet Report","operationId":"fleet_report_api_reports_fleet_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated device IDs; omit for all","title":"Device Ids"},"description":"Comma-separated device IDs; omit for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/fleet/csv":{"get":{"tags":["reports"],"summary":"Fleet Report Csv","operationId":"fleet_report_csv_api_reports_fleet_csv_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/users":{"get":{"tags":["reports"],"summary":"Users Report","operationId":"users_report_api_reports_users_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"user_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated user IDs; omit for all","title":"User Ids"},"description":"Comma-separated user IDs; omit for all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/trips":{"get":{"tags":["reports"],"summary":"Trips Report","operationId":"trips_report_api_reports_trips_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"Start Date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","title":"End Date"}},{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/billing/details":{"get":{"tags":["reports"],"summary":"Billing Report Details","operationId":"billing_report_details_api_reports_billing_details_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"query","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/billing/details/pdf":{"get":{"tags":["reports"],"summary":"Billing Report Details Pdf","operationId":"billing_report_details_pdf_api_reports_billing_details_pdf_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"company_id","in":"query","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"this_month","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/export/pdf":{"post":{"tags":["reports"],"summary":"Report Pdf From Payload","operationId":"report_pdf_from_payload_api_reports_export_pdf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPdfPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/reports/{report_key}/pdf":{"get":{"tags":["reports"],"summary":"Report Pdf By Key","operationId":"report_pdf_by_key_api_reports__report_key__pdf_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"report_key","in":"path","required":true,"schema":{"type":"string","title":"Report Key"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}},{"name":"user_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Ids"}},{"name":"driver_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Ids"}},{"name":"historical","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Historical"}},{"name":"all_rows","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"All Rows"}},{"name":"timezone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/{report_key}":{"get":{"tags":["reports"],"summary":"Report By Key","operationId":"report_by_key_api_reports__report_key__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"report_key","in":"path","required":true,"schema":{"type":"string","title":"Report Key"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"device_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Ids"}},{"name":"user_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Ids"}},{"name":"driver_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Ids"}},{"name":"historical","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Historical"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/planned-routes":{"get":{"tags":["route-planning"],"summary":"List Routes","operationId":"list_routes_api_planned_routes_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"company_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["route-planning"],"summary":"Create Route","operationId":"create_route_api_planned_routes_post","security":[{"Routario API Key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlannedRouteIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/planned-routes/preview":{"post":{"tags":["route-planning"],"summary":"Preview Route","operationId":"preview_route_api_planned_routes_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutePreviewIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/planned-routes/{route_id}":{"get":{"tags":["route-planning"],"summary":"Get Route","operationId":"get_route_api_planned_routes__route_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"integer","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["route-planning"],"summary":"Update Route","operationId":"update_route_api_planned_routes__route_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"integer","title":"Route Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlannedRouteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["route-planning"],"summary":"Delete Route","operationId":"delete_route_api_planned_routes__route_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"integer","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/planned-routes/{route_id}/stops/{stop_id}":{"put":{"tags":["route-planning"],"summary":"Update Stop Status","operationId":"update_stop_status_api_planned_routes__route_id__stops__stop_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"integer","title":"Route Id"}},{"name":"stop_id","in":"path","required":true,"schema":{"type":"integer","title":"Stop Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopStatusIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runtime-logs":{"get":{"tags":["runtime-logs"],"summary":"Get Runtime Logs","operationId":"get_runtime_logs_api_runtime_logs_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/runtime-logs/debug-mode":{"get":{"tags":["runtime-logs"],"summary":"Get Debug Mode","operationId":"get_debug_mode_api_runtime_logs_debug_mode_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["runtime-logs"],"summary":"Toggle Debug Mode","operationId":"toggle_debug_mode_api_runtime_logs_debug_mode_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugModeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/share":{"post":{"tags":["share"],"summary":"Create Share","description":"Generate a unique share token for a device. User must have access to the device.","operationId":"create_share_api_share_post","security":[{"Routario API Key":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["share"],"summary":"List Shares","description":"List all active, non-expired share links for a device.","operationId":"list_shares_api_share_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"device_id","in":"query","required":true,"schema":{"type":"integer","title":"Device Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShareListItem"},"title":"Response List Shares Api Share Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/share/{token}":{"delete":{"tags":["share"],"summary":"Revoke Share","description":"Revoke a share token early. Only the creator or an admin can revoke.","operationId":"revoke_share_api_share__token__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/share/{token}/renew":{"patch":{"tags":["share"],"summary":"Renew Share","description":"Extend the expiry of a share link from now.","operationId":"renew_share_api_share__token__renew_patch","security":[{"Routario API Key":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShareRenewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/share/{token}/position":{"get":{"tags":["share"],"summary":"Get Shared Position","description":"Public endpoint. Returns the live position of the shared device.\nNo authentication required — validated only by the token + expiry.","operationId":"get_shared_position_api_share__token__position_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sso/config":{"get":{"tags":["sso"],"summary":"Sso Config","operationId":"sso_config_api_sso_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/sso/login":{"get":{"tags":["sso"],"summary":"Sso Login","operationId":"sso_login_api_sso_login_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/sso/callback":{"get":{"tags":["sso"],"summary":"Sso Callback","operationId":"sso_callback_api_sso_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/system-settings/public":{"get":{"tags":["system-settings"],"summary":"Get Public System Settings","description":"Retrieve public non-secret client settings for all authenticated users.","operationId":"get_public_system_settings_api_system_settings_public_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Public System Settings Api System Settings Public Get"}}}}}}},"/api/system-settings":{"get":{"tags":["system-settings"],"summary":"Get System Settings","description":"Retrieve all system settings grouped by category (Superuser only).","operationId":"get_system_settings_api_system_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get System Settings Api System Settings Get"}}}}},"security":[{"Routario API Key":[]}]},"put":{"tags":["system-settings"],"summary":"Update System Settings","description":"Batch update system settings (Superuser only).","operationId":"update_system_settings_api_system_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSettingsUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update System Settings Api System Settings Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/system-settings/purge-history":{"post":{"tags":["system-settings"],"summary":"Trigger History Purge","description":"Manually trigger truncation of historical position data older than specified or configured days.","operationId":"trigger_history_purge_api_system_settings_purge_history_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Trigger History Purge Api System Settings Purge History Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets":{"get":{"tags":["tickets"],"summary":"List Tickets","operationId":"list_tickets_api_tickets_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"assigned_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned To"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["tickets"],"summary":"Create Ticket","operationId":"create_ticket_api_tickets_post","security":[{"Routario API Key":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tickets/assignees":{"get":{"tags":["tickets"],"summary":"List Ticket Assignees","operationId":"list_ticket_assignees_api_tickets_assignees_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/tickets/{ticket_id}":{"get":{"tags":["tickets"],"summary":"Get Ticket","operationId":"get_ticket_api_tickets__ticket_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["tickets"],"summary":"Update Ticket","operationId":"update_ticket_api_tickets__ticket_id__patch","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/attachments/{attachment_index}":{"delete":{"tags":["tickets"],"summary":"Delete Ticket Attachment","operationId":"delete_ticket_attachment_api_tickets__ticket_id__attachments__attachment_index__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}},{"name":"attachment_index","in":"path","required":true,"schema":{"type":"integer","title":"Attachment Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/comments":{"post":{"tags":["tickets"],"summary":"Add Ticket Comment","operationId":"add_ticket_comment_api_tickets__ticket_id__comments_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/comments/{comment_id}":{"patch":{"tags":["tickets"],"summary":"Update Ticket Comment","operationId":"update_ticket_comment_api_tickets__ticket_id__comments__comment_id__patch","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"integer","title":"Comment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/comments/{comment_id}/attachments/{attachment_index}":{"delete":{"tags":["tickets"],"summary":"Delete Ticket Comment Attachment","operationId":"delete_ticket_comment_attachment_api_tickets__ticket_id__comments__comment_id__attachments__attachment_index__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"integer","title":"Ticket Id"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"integer","title":"Comment Id"}},{"name":"attachment_index","in":"path","required":true,"schema":{"type":"integer","title":"Attachment Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users":{"get":{"tags":["users"],"summary":"Get All Users","description":"Return all users. Super admin sees all; company admin sees own company.","operationId":"get_all_users_api_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserResponse"},"type":"array","title":"Response Get All Users Api Users Get"}}}}},"security":[{"Routario API Key":[]}]},"post":{"tags":["users"],"summary":"Create User","description":"Create a new user. Permissions are capped to the creator's own permissions.","operationId":"create_user_api_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"Routario API Key":[]}]}},"/api/users/{user_id}/devices":{"get":{"tags":["users"],"summary":"Get User Devices","description":"Get devices assigned to a specific user. Admin or company admin.","operationId":"get_user_devices_api_users__user_id__devices_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeviceResponse"},"title":"Response Get User Devices Api Users  User Id  Devices Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["users"],"summary":"Assign Device","description":"Assign or remove a device from a user. Admin or company admin.","operationId":"assign_device_api_users__user_id__devices_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"device_id","in":"query","required":true,"schema":{"type":"integer","title":"Device Id"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","default":"add","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}/notifications/test":{"post":{"tags":["users"],"summary":"Test User Notification Channel","description":"Send a test message through one of the user's saved notification channels.","operationId":"test_user_notification_channel_api_users__user_id__notifications_test_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}":{"get":{"tags":["users"],"summary":"Get User","operationId":"get_user_api_users__user_id__get","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["users"],"summary":"Update User","description":"Update user details. Permissions are capped to the editor's own permissions.","operationId":"update_user_api_users__user_id__put","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","description":"Delete a user. Company admin can delete users in their company.","operationId":"delete_user_api_users__user_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users/{user_id}/impersonate":{"post":{"tags":["users"],"summary":"Impersonate User","description":"Issue a token for another user. Super admin can impersonate anyone; company admin can impersonate regular users in their company.","operationId":"impersonate_user_api_users__user_id__impersonate_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/users":{"get":{"tags":["voice"],"summary":"Voice Users","operationId":"voice_users_api_voice_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/voice/messages":{"get":{"tags":["voice"],"summary":"List Messages","operationId":"list_messages_api_voice_messages_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["voice"],"summary":"Delete All Messages","description":"Delete every voice message and its audio file. Super admin only.","operationId":"delete_all_messages_api_voice_messages_delete","security":[{"Routario API Key":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/voice/messages/read-all":{"post":{"tags":["voice"],"summary":"Mark All Read","operationId":"mark_all_read_api_voice_messages_read_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"Routario API Key":[]}]}},"/api/voice/messages/{message_id}/read":{"post":{"tags":["voice"],"summary":"Mark Read","operationId":"mark_read_api_voice_messages__message_id__read_post","security":[{"Routario API Key":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/messages/{message_id}/audio":{"get":{"tags":["voice"],"summary":"Get Audio","operationId":"get_audio_api_voice_messages__message_id__audio_get","security":[{"Routario API Key":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/voice/messages/{message_id}":{"delete":{"tags":["voice"],"summary":"Delete Message","operationId":"delete_message_api_voice_messages__message_id__delete","security":[{"Routario API Key":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"integer","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/{token}":{"get":{"tags":["share-page"],"summary":"Share Page","operationId":"share_page_share__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/protocols":{"get":{"summary":"Get Protocols","operationId":"get_protocols_api_protocols_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/login.html":{"get":{"summary":"Login Page","operationId":"login_page_login_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/login/{company_slug}":{"get":{"summary":"Company Login Page","operationId":"company_login_page_login__company_slug__get","parameters":[{"name":"company_slug","in":"path","required":true,"schema":{"type":"string","title":"Company Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share.html":{"get":{"summary":"Share Html Page","operationId":"share_html_page_share_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/device-management.html":{"get":{"summary":"Devices Page","operationId":"devices_page_device_management_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/user-settings.html":{"get":{"summary":"Settings Page","operationId":"settings_page_user_settings_html_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/branding/company/{company_id}/metadata":{"get":{"summary":"Company Branding Metadata","operationId":"company_branding_metadata_branding_company__company_id__metadata_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/branding/login/{company_slug}/metadata":{"get":{"summary":"Company Login Branding Metadata","operationId":"company_login_branding_metadata_branding_login__company_slug__metadata_get","parameters":[{"name":"company_slug","in":"path","required":true,"schema":{"type":"string","title":"Company Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/branding/company/{company_id}/{asset_name}":{"get":{"summary":"Company Branding Asset","operationId":"company_branding_asset_branding_company__company_id___asset_name__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"asset_name","in":"path","required":true,"schema":{"type":"string","title":"Asset Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/manifest.json":{"get":{"summary":"Web Manifest","operationId":"web_manifest_manifest_json_get","parameters":[{"name":"company_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"}},{"name":"company_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountCreate":{"properties":{"provider_id":{"type":"string","title":"Provider Id"},"account_label":{"type":"string","title":"Account Label"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials"}},"type":"object","required":["provider_id","account_label","credentials"],"title":"AccountCreate"},"AccountResponse":{"properties":{"id":{"type":"integer","title":"Id"},"provider_id":{"type":"string","title":"Provider Id"},"account_label":{"type":"string","title":"Account Label"},"is_active":{"type":"boolean","title":"Is Active"},"last_auth_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Auth At"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","provider_id","account_label","is_active","last_auth_at","last_error","created_at"],"title":"AccountResponse"},"AdminNotifyPayload":{"properties":{"title":{"type":"string","title":"Title"},"message":{"type":"string","title":"Message"}},"type":"object","required":["title","message"],"title":"AdminNotifyPayload"},"AlertResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"device_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"},"alert_type":{"type":"string","title":"Alert Type"},"severity":{"type":"string","title":"Severity"},"message":{"type":"string","title":"Message"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"alert_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Alert Metadata"},"is_read":{"type":"boolean","title":"Is Read"},"is_acknowledged":{"type":"boolean","title":"Is Acknowledged"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","alert_type","severity","message","alert_metadata","is_read","is_acknowledged","created_at"],"title":"AlertResponse"},"AlertRow":{"properties":{"uid":{"type":"integer","title":"Uid"},"alertKey":{"type":"string","title":"Alertkey"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule"},"channels":{"items":{"type":"string"},"type":"array","title":"Channels"},"schedule":{"anyOf":[{"$ref":"#/components/schemas/AlertSchedule"},{"type":"null"}]},"duration":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Duration"},"notify_user_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Notify User Ids"},"send_push":{"type":"boolean","title":"Send Push","default":true},"send_email":{"type":"boolean","title":"Send Email","default":false},"action_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Command"},"action_command_payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Command Payload"}},"type":"object","required":["uid","alertKey"],"title":"AlertRow","description":"One row from the frontend alert table."},"AlertSchedule":{"properties":{"days":{"items":{"type":"integer"},"type":"array","title":"Days"},"hourStart":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Hourstart","default":0},"hourEnd":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Hourend","default":23}},"type":"object","title":"AlertSchedule","description":"Active-window schedule for an alert rule."},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},"type":"object","required":["name"],"title":"ApiKeyCreate"},"ApiKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"ApiKeyUpdate"},"BillingPlanIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"EUR"},"base_price_cents":{"type":"integer","minimum":0.0,"title":"Base Price Cents","default":0},"included_devices":{"type":"integer","minimum":0.0,"title":"Included Devices","default":0},"included_positions":{"type":"integer","minimum":0.0,"title":"Included Positions","default":0},"included_api_calls":{"type":"integer","minimum":0.0,"title":"Included Api Calls","default":0},"price_per_device_cents":{"type":"integer","minimum":0.0,"title":"Price Per Device Cents","default":0},"price_per_1000_positions_cents":{"type":"integer","minimum":0.0,"title":"Price Per 1000 Positions Cents","default":0},"price_per_1000_api_calls_cents":{"type":"integer","minimum":0.0,"title":"Price Per 1000 Api Calls Cents","default":0},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name"],"title":"BillingPlanIn"},"Body_create_logbook_entry_api_devices__device_id__logbook_post":{"properties":{"description":{"type":"string","title":"Description"},"odometer":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer"},"date":{"type":"string","format":"date-time","title":"Date"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"documents":{"items":{"type":"string","format":"binary"},"type":"array","title":"Documents","default":[]}},"type":"object","required":["description","date"],"title":"Body_create_logbook_entry_api_devices__device_id__logbook_post"},"Body_restore_backup_api_admin_backup_restore_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_restore_backup_api_admin_backup_restore_post"},"Body_update_logbook_entry_api_devices__device_id__logbook__entry_id__put":{"properties":{"description":{"type":"string","title":"Description"},"odometer":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer"},"date":{"type":"string","format":"date-time","title":"Date"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"}},"type":"object","required":["description","date"],"title":"Body_update_logbook_entry_api_devices__device_id__logbook__entry_id__put"},"Body_upload_clip_api_dashcam_upload_post":{"properties":{"imei":{"type":"string","title":"Imei"},"timestamp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Timestamp"},"type":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Type"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"channel":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Channel","default":0},"lat":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lat"},"lon":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lon"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["imei","file"],"title":"Body_upload_clip_api_dashcam_upload_post"},"Body_upload_company_badge_api_companies__company_id__branding_badge_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_company_badge_api_companies__company_id__branding_badge_post"},"Body_upload_company_icon_api_companies__company_id__branding_icon_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_company_icon_api_companies__company_id__branding_icon_post"},"CommandCreate":{"properties":{"device_id":{"type":"integer","title":"Device Id"},"command_type":{"type":"string","title":"Command Type"},"payload":{"type":"string","title":"Payload","description":"Hex or ASCII command string"},"max_retries":{"type":"integer","maximum":10.0,"minimum":0.0,"title":"Max Retries","default":3}},"type":"object","required":["device_id","command_type","payload"],"title":"CommandCreate"},"CompanyBillingIn":{"properties":{"plan_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Plan Id"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"billing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Status"}},"type":"object","title":"CompanyBillingIn"},"CompanyCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"app_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"App Name"},"login_slug":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Login Slug"},"billing_plan_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Billing Plan Id"}},"type":"object","required":["name"],"title":"CompanyCreate"},"CompanyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Name"},"login_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Login Slug"},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"badge_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Badge Url"},"branding_version":{"type":"integer","title":"Branding Version","default":1},"billing_plan_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Billing Plan Id"},"billing_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Email"},"billing_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"user_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Count"},"device_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Count"}},"type":"object","required":["id","name","created_at"],"title":"CompanyResponse"},"CompanyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"app_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"App Name"},"login_slug":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Login Slug"},"billing_plan_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Billing Plan Id"}},"type":"object","title":"CompanyUpdate"},"CurrencyRateIn":{"properties":{"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency"},"rate":{"type":"number","exclusiveMinimum":0.0,"title":"Rate"}},"type":"object","required":["currency","rate"],"title":"CurrencyRateIn"},"CurrencyRatesIn":{"properties":{"rates":{"items":{"$ref":"#/components/schemas/CurrencyRateIn"},"type":"array","title":"Rates"}},"type":"object","required":["rates"],"title":"CurrencyRatesIn"},"CurrencyRefreshIn":{"properties":{"currencies":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Currencies"}},"type":"object","title":"CurrencyRefreshIn"},"CustomRule":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"rule":{"type":"string","minLength":1,"title":"Rule"},"channels":{"items":{"type":"string"},"type":"array","title":"Channels"}},"type":"object","required":["name","rule"],"title":"CustomRule","description":"Definition for a custom alert rule"},"DebugModeRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"DebugModeRequest"},"DeviceConfig":{"properties":{"offline_timeout_hours":{"anyOf":[{"type":"integer","maximum":720.0,"minimum":1.0},{"type":"null"}],"title":"Offline Timeout Hours"},"speed_tolerance":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Speed Tolerance"},"speed_duration_seconds":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Speed Duration Seconds","default":30},"idle_timeout_minutes":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Idle Timeout Minutes"},"towing_threshold_meters":{"anyOf":[{"type":"integer","minimum":10.0},{"type":"null"}],"title":"Towing Threshold Meters"},"alert_channels":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object","title":"Alert Channels"},"alert_rows":{"items":{"$ref":"#/components/schemas/AlertRow"},"type":"array","title":"Alert Rows"},"custom_rules":{"items":{"anyOf":[{"$ref":"#/components/schemas/CustomRule"},{"type":"string"}]},"type":"array","title":"Custom Rules"},"sensors":{"additionalProperties":{"type":"string"},"type":"object","title":"Sensors"},"maintenance":{"additionalProperties":{"type":"integer"},"type":"object","title":"Maintenance"},"integration":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Integration"},"user_commands":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"User Commands"},"has_camera":{"type":"boolean","title":"Has Camera","default":false},"auto_clear_driver":{"type":"boolean","title":"Auto Clear Driver","default":false}},"type":"object","title":"DeviceConfig","description":"Device configuration schema. ALL ALERT FIELDS ARE OPTIONAL AND DEFAULT TO None (DISABLED)."},"DeviceCreate":{"properties":{"imei":{"type":"string","maxLength":64,"minLength":1,"title":"Imei"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"protocol":{"type":"string","title":"Protocol","default":"teltonika"},"vehicle_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Type","default":"car"},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate"},"custom_attributes":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Custom Attributes"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"config":{"$ref":"#/components/schemas/DeviceConfig"}},"type":"object","required":["imei","name"],"title":"DeviceCreate"},"DeviceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"imei":{"type":"string","title":"Imei"},"name":{"type":"string","title":"Name"},"protocol":{"type":"string","title":"Protocol"},"vehicle_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vehicle Type"},"license_plate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Plate"},"custom_attributes":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Custom Attributes"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"state":{"anyOf":[{"$ref":"#/components/schemas/DeviceStateResponse"},{"type":"null"}]}},"type":"object","required":["id","imei","name","protocol","vehicle_type","license_plate","is_active","created_at"],"title":"DeviceResponse"},"DeviceStateResponse":{"properties":{"device_id":{"type":"integer","title":"Device Id"},"last_latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Latitude"},"last_longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Longitude"},"last_altitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Altitude"},"last_speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Speed"},"last_course":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Course"},"last_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Address"},"ignition_on":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ignition On"},"is_moving":{"type":"boolean","title":"Is Moving"},"is_online":{"type":"boolean","title":"Is Online"},"total_odometer":{"type":"number","title":"Total Odometer"},"last_update":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Update"},"sensors":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sensors"},"current_driver_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Driver Id"},"current_driver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Driver Name"}},"type":"object","required":["device_id","last_latitude","last_longitude","last_altitude","last_speed","last_course","last_address","is_moving","is_online","total_odometer","last_update"],"title":"DeviceStateResponse"},"DriverCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"license_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Number"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"assignment_rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Rule"},"assignment_vehicles":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Assignment Vehicles"},"assignment_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Mode"},"assignment_grace_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assignment Grace Period"},"assignment_clear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Clear"}},"type":"object","required":["name"],"title":"DriverCreate"},"DriverResponse":{"properties":{"id":{"type":"integer","title":"Id"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"name":{"type":"string","title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"license_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Number"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"assignment_rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Rule"},"assignment_vehicles":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Assignment Vehicles"},"assignment_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Mode"},"assignment_grace_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assignment Grace Period"},"assignment_clear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Clear"}},"type":"object","required":["id","company_id","name","phone","license_number","notes","created_at"],"title":"DriverResponse"},"DriverUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"license_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License Number"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"assignment_rule":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Rule"},"assignment_vehicles":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Assignment Vehicles"},"assignment_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Mode"},"assignment_grace_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assignment Grace Period"},"assignment_clear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assignment Clear"}},"type":"object","title":"DriverUpdate"},"FuelLogCreate":{"properties":{"date":{"type":"string","format":"date-time","title":"Date"},"liters":{"type":"number","exclusiveMinimum":0.0,"title":"Liters"},"odometer_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer Km"},"trip_distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Distance Km"},"price_per_liter":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Liter"},"full_tank":{"type":"boolean","title":"Full Tank","default":true},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["date","liters"],"title":"FuelLogCreate"},"FuelLogResponse":{"properties":{"id":{"type":"integer","title":"Id"},"device_id":{"type":"integer","title":"Device Id"},"date":{"type":"string","format":"date-time","title":"Date"},"liters":{"type":"number","title":"Liters"},"odometer_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer Km"},"trip_distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Distance Km"},"price_per_liter":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Liter"},"currency":{"type":"string","title":"Currency","default":"EUR"},"exchange_rate":{"type":"number","title":"Exchange Rate","default":1.0},"full_tank":{"type":"boolean","title":"Full Tank"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","device_id","date","liters","price_per_liter","full_tank","notes","created_at"],"title":"FuelLogResponse"},"FuelLogUpdate":{"properties":{"date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Date"},"liters":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Liters"},"odometer_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer Km"},"trip_distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trip Distance Km"},"price_per_liter":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Per Liter"},"full_tank":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Full Tank"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"FuelLogUpdate"},"GeofenceCreate":{"properties":{"device_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"polygon":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Polygon"},"alert_on_enter":{"type":"boolean","title":"Alert On Enter","default":false},"alert_on_exit":{"type":"boolean","title":"Alert On Exit","default":false},"color":{"type":"string","title":"Color","default":"#3388ff"},"geometry_type":{"type":"string","title":"Geometry Type","default":"polygon"},"buffer_meters":{"type":"integer","title":"Buffer Meters","default":50}},"type":"object","required":["name","polygon"],"title":"GeofenceCreate"},"GeofenceNavigationPreviewIn":{"properties":{"points":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Points"}},"type":"object","title":"GeofenceNavigationPreviewIn"},"GeofenceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"device_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"alert_on_enter":{"type":"boolean","title":"Alert On Enter"},"alert_on_exit":{"type":"boolean","title":"Alert On Exit"},"is_active":{"type":"boolean","title":"Is Active"},"color":{"type":"string","title":"Color"},"geometry_type":{"type":"string","title":"Geometry Type","default":"polygon"},"buffer_meters":{"type":"integer","title":"Buffer Meters","default":50},"coordinates":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Coordinates"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","device_id","name","description","alert_on_enter","alert_on_exit","is_active","color","created_at"],"title":"GeofenceResponse"},"GeofenceUpdate":{"properties":{"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"polygon":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Polygon"},"alert_on_enter":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alert On Enter"},"alert_on_exit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alert On Exit"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"geometry_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geometry Type"},"buffer_meters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Buffer Meters"}},"type":"object","title":"GeofenceUpdate"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LLMChatRequest":{"properties":{"prompt":{"type":"string","maxLength":5000,"minLength":1,"title":"Prompt"},"history":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"History"}},"type":"object","required":["prompt"],"title":"LLMChatRequest"},"LLMReportRequest":{"properties":{"prompt":{"type":"string","maxLength":5000,"minLength":1,"title":"Prompt"},"device_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Device Ids"},"start_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Time"},"end_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Time"}},"type":"object","required":["prompt"],"title":"LLMReportRequest"},"LogbookEntryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"device_id":{"type":"integer","title":"Device Id"},"description":{"type":"string","title":"Description"},"odometer":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Odometer"},"date":{"type":"string","format":"date-time","title":"Date"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"type":"string","title":"Currency","default":"EUR"},"exchange_rate":{"type":"number","title":"Exchange Rate","default":1.0},"documents":{"items":{"type":"string"},"type":"array","title":"Documents"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by":{"type":"integer","title":"Created By"}},"type":"object","required":["id","device_id","description","odometer","date","price","documents","created_at","created_by"],"title":"LogbookEntryResponse"},"MfaOptionalVerifyRequest":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},"type":"object","title":"MfaOptionalVerifyRequest"},"MfaVerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"MfaVerifyRequest"},"NotificationTestRequest":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"}},"type":"object","required":["name","url"],"title":"NotificationTestRequest"},"PasskeyOptionsRequest":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},"type":"object","title":"PasskeyOptionsRequest"},"PasskeyUpdateRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"PasskeyUpdateRequest"},"PasskeyVerifyRequest":{"properties":{"state":{"type":"string","title":"State"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["state","credential"],"title":"PasskeyVerifyRequest"},"PlannedRouteIn":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"device_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"},"status":{"type":"string","title":"Status","default":"draft"},"stops":{"items":{"$ref":"#/components/schemas/RouteStopIn"},"type":"array","title":"Stops"}},"type":"object","required":["name"],"title":"PlannedRouteIn"},"PlannedRouteUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"device_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Device Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"stops":{"anyOf":[{"items":{"$ref":"#/components/schemas/RouteStopIn"},"type":"array"},{"type":"null"}],"title":"Stops"}},"type":"object","title":"PlannedRouteUpdate"},"PositionGeoJSON":{"properties":{"type":{"type":"string","title":"Type","default":"Feature"},"geometry":{"additionalProperties":true,"type":"object","title":"Geometry"},"properties":{"additionalProperties":true,"type":"object","title":"Properties"}},"type":"object","required":["geometry","properties"],"title":"PositionGeoJSON","description":"GeoJSON Point Feature for positions"},"PositionHistoryRequest":{"properties":{"device_id":{"type":"integer","title":"Device Id"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"type":"string","format":"date-time","title":"End Time"},"max_points":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Max Points","default":2000},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0},"order":{"type":"string","pattern":"^(asc|desc)$","title":"Order","default":"asc"}},"type":"object","required":["device_id","start_time","end_time"],"title":"PositionHistoryRequest","description":"Request for position history"},"PositionHistoryResponse":{"properties":{"type":{"type":"string","title":"Type","default":"FeatureCollection"},"features":{"items":{"$ref":"#/components/schemas/PositionGeoJSON"},"type":"array","title":"Features"},"truncated":{"type":"boolean","title":"Truncated","default":false},"summary":{"additionalProperties":true,"type":"object","title":"Summary"}},"type":"object","required":["features"],"title":"PositionHistoryResponse","description":"GeoJSON FeatureCollection for history playback"},"PushKeys":{"properties":{"p256dh":{"type":"string","title":"P256Dh"},"auth":{"type":"string","title":"Auth"}},"type":"object","required":["p256dh","auth"],"title":"PushKeys"},"PushSubscriptionPayload":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"keys":{"$ref":"#/components/schemas/PushKeys"},"expirationTime":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expirationtime"}},"type":"object","required":["endpoint","keys"],"title":"PushSubscriptionPayload"},"ReportPdfPayload":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"report_type":{"type":"string","title":"Report Type","default":"report"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"},"all_rows":{"type":"boolean","title":"All Rows","default":false},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},"type":"object","required":["payload"],"title":"ReportPdfPayload"},"RoutePreviewIn":{"properties":{"stops":{"items":{"$ref":"#/components/schemas/RouteStopIn"},"type":"array","title":"Stops"}},"type":"object","title":"RoutePreviewIn"},"RouteStopIn":{"properties":{"sequence":{"type":"integer","minimum":0.0,"title":"Sequence"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"latitude":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Latitude"},"longitude":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Longitude"},"planned_arrival":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Planned Arrival"},"service_minutes":{"type":"integer","minimum":0.0,"title":"Service Minutes","default":0},"stop_kind":{"type":"string","pattern":"^(stop|waypoint)$","title":"Stop Kind","default":"stop"},"arrival_radius_m":{"type":"integer","maximum":5000.0,"minimum":5.0,"title":"Arrival Radius M","default":50},"dwell_seconds":{"type":"integer","maximum":86400.0,"minimum":0.0,"title":"Dwell Seconds","default":0},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["sequence","latitude","longitude"],"title":"RouteStopIn"},"ScheduleCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"report_type":{"type":"string","title":"Report Type"},"filter_device_ids":{"items":{"type":"integer"},"type":"array","title":"Filter Device Ids","default":[]},"filter_user_ids":{"items":{"type":"integer"},"type":"array","title":"Filter User Ids","default":[]},"options":{"additionalProperties":true,"type":"object","title":"Options"},"notification_channels":{"items":{"type":"string"},"type":"array","title":"Notification Channels","default":[]},"attach_results":{"type":"boolean","title":"Attach Results","default":true},"attach_documents":{"type":"boolean","title":"Attach Documents","default":true},"sensors_historical":{"type":"boolean","title":"Sensors Historical","default":false},"date_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Range"},"trigger_type":{"type":"string","title":"Trigger Type","default":"time"},"trigger_options":{"additionalProperties":true,"type":"object","title":"Trigger Options"},"frequency":{"type":"string","title":"Frequency","default":"daily"},"run_time":{"type":"string","title":"Run Time","default":"07:00"},"day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"timezone":{"type":"string","title":"Timezone","default":"UTC"},"keep_runs":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Keep Runs","default":10},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","report_type"],"title":"ScheduleCreate"},"ScheduleUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"filter_device_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Filter Device Ids"},"filter_user_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Filter User Ids"},"options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Options"},"notification_channels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notification Channels"},"attach_results":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Attach Results"},"attach_documents":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Attach Documents"},"sensors_historical":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sensors Historical"},"date_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Range"},"trigger_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Type"},"trigger_options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Trigger Options"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency"},"run_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Time"},"day_of_week":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Week"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"keep_runs":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Keep Runs"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ScheduleUpdate"},"ServiceLogRequest":{"properties":{"uid":{"type":"integer","title":"Uid"},"current_odometer_km":{"type":"number","title":"Current Odometer Km"}},"type":"object","required":["uid","current_odometer_km"],"title":"ServiceLogRequest"},"ShareCreateRequest":{"properties":{"device_id":{"type":"integer","title":"Device Id"},"duration_minutes":{"type":"integer","title":"Duration Minutes"}},"type":"object","required":["device_id","duration_minutes"],"title":"ShareCreateRequest"},"ShareCreateResponse":{"properties":{"token":{"type":"string","title":"Token"},"url":{"type":"string","title":"Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"device_name":{"type":"string","title":"Device Name"}},"type":"object","required":["token","url","expires_at","device_name"],"title":"ShareCreateResponse"},"ShareListItem":{"properties":{"token":{"type":"string","title":"Token"},"url":{"type":"string","title":"Url"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["token","url","expires_at","created_at"],"title":"ShareListItem"},"ShareRenewRequest":{"properties":{"duration_minutes":{"type":"integer","title":"Duration Minutes"}},"type":"object","required":["duration_minutes"],"title":"ShareRenewRequest"},"StopStatusIn":{"properties":{"status":{"type":"string","title":"Status"},"arrived_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Arrived At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["status"],"title":"StopStatusIn"},"SystemSettingsUpdateRequest":{"properties":{"settings":{"additionalProperties":true,"type":"object","title":"Settings"}},"type":"object","required":["settings"],"title":"SystemSettingsUpdateRequest"},"TestCredentialsRequest":{"properties":{"provider_id":{"type":"string","title":"Provider Id"},"credentials":{"additionalProperties":true,"type":"object","title":"Credentials"}},"type":"object","required":["provider_id","credentials"],"title":"TestCredentialsRequest"},"Token":{"properties":{"access_token":{"type":"string","title":"Access Token","default":""},"token_type":{"type":"string","title":"Token Type"},"user_id":{"type":"integer","title":"User Id"},"username":{"type":"string","title":"Username"},"is_admin":{"type":"boolean","title":"Is Admin"},"mfa_required":{"type":"boolean","title":"Mfa Required","default":false},"is_company_admin":{"type":"boolean","title":"Is Company Admin","default":false},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"units":{"type":"string","title":"Units","default":"metric"},"currency":{"type":"string","title":"Currency","default":"EUR"},"theme":{"type":"string","title":"Theme","default":"dark"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"}},"type":"object","required":["token_type","user_id","username","is_admin"],"title":"Token"},"TripResponse":{"properties":{"id":{"type":"integer","title":"Id"},"device_id":{"type":"integer","title":"Device Id"},"start_time":{"type":"string","format":"date-time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time"},"start_latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start Latitude"},"start_longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Start Longitude"},"end_latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End Latitude"},"end_longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"End Longitude"},"distance_km":{"type":"number","title":"Distance Km"},"max_speed":{"type":"number","title":"Max Speed"},"avg_speed":{"type":"number","title":"Avg Speed"},"duration_minutes":{"type":"number","title":"Duration Minutes"},"start_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Address"},"end_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Address"},"driver_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Driver Id"},"driver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Driver Name"}},"type":"object","required":["id","device_id","start_time","end_time","start_latitude","start_longitude","end_latitude","end_longitude","distance_km","max_speed","avg_speed","duration_minutes","start_address","end_address"],"title":"TripResponse"},"UsageEventIn":{"properties":{"company_id":{"type":"integer","title":"Company Id"},"metric":{"type":"string","title":"Metric"},"quantity":{"type":"integer","minimum":1.0,"title":"Quantity","default":1},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["company_id","metric"],"title":"UsageEventIn"},"UserCreate":{"properties":{"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username"},"email":{"type":"string","pattern":"^[^@]+@[^@]+\\.[^@]+$","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"notification_channels":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Notification Channels"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","default":"en"},"units":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Units","default":"metric"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","default":"EUR"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme","default":"dark"},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"is_company_admin":{"type":"boolean","title":"Is Company Admin","default":false},"permissions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Permissions"}},"type":"object","required":["username","email","password"],"title":"UserCreate"},"UserLogin":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"mfa_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mfa Code"}},"type":"object","required":["username","password"],"title":"UserLogin"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"is_company_admin":{"type":"boolean","title":"Is Company Admin","default":false},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","default":"en"},"units":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Units","default":"metric"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","default":"EUR"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme","default":"dark"},"timezone":{"type":"string","title":"Timezone","default":"UTC"},"notification_channels":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Notification Channels"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"webhook_urls":{"items":{"type":"string"},"type":"array","title":"Webhook Urls"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"mfa_enabled":{"type":"boolean","title":"Mfa Enabled","default":false}},"type":"object","required":["id","username","email","created_at"],"title":"UserResponse","description":"Schema for returning user details"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","pattern":"^[^@]+@[^@]+\\.[^@]+$"},{"type":"null"}],"title":"Email"},"password":{"anyOf":[{"type":"string","minLength":8},{"type":"null"}],"title":"Password"},"notification_channels":{"anyOf":[{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array"},{"type":"null"}],"title":"Notification Channels"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"units":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Units"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Theme"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"is_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"},"is_company_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Company Admin"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"webhook_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Webhook Urls"},"permissions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Permissions"}},"type":"object","title":"UserUpdate","description":"Schema for updating user details"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VideoClipResponse":{"properties":{"id":{"type":"integer","title":"Id"},"device_id":{"type":"integer","title":"Device Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"event_type":{"type":"string","title":"Event Type"},"camera":{"type":"string","title":"Camera"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"},"speed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Speed"},"file_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path"},"thumbnail_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Path"},"file_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Size"},"duration":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","device_id","timestamp","event_type","camera","created_at"],"title":"VideoClipResponse"}},"securitySchemes":{"Routario API Key":{"type":"http","description":"Paste a Routario API key created in User Settings -> API Keys, for example `rt_...`. JWT bearer tokens from `/api/login` are also accepted. Do not include the `Bearer` prefix; Swagger adds it automatically.","scheme":"bearer"}}}}