{"openapi":"3.0.0","paths":{"/health":{"get":{"operationId":"AppController_getHealth","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Health check detalhado com status dos bancos","tags":["Health"]}},"/status":{"get":{"operationId":"AppController_getServiceStatus","parameters":[],"responses":{"200":{"description":""}},"summary":"Status básico da API (para health check Docker)","tags":["Health"]}},"/live":{"get":{"operationId":"AppController_getLiveness","parameters":[],"responses":{"200":{"description":""}},"summary":"Liveness probe - verifica se a aplicação está viva","tags":["Health"]}},"/ready":{"get":{"operationId":"AppController_getReadiness","parameters":[],"responses":{"200":{"description":""}},"summary":"Readiness probe - verifica se está pronta para tráfego","tags":["Health"]}},"/":{"get":{"operationId":"DocController_getPortal","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/docs":{"get":{"operationId":"DocController_getDocsAlias","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/swagger":{"get":{"operationId":"DocController_getSwagger","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/swagger/json":{"get":{"operationId":"DocController_getSwaggerJson","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/docs/guide":{"get":{"operationId":"DocController_getGuide","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/docs/guide.md":{"get":{"operationId":"DocController_getGuideMarkdown","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Doc"]}},"/auth/register":{"post":{"operationId":"AuthController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAuthUserDto"}}}},"responses":{"201":{"description":"User registered successfully"},"400":{"description":"Invalid request data"}},"summary":"Register a new user and link them to a company","tags":["Auth"]}},"/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"Login successful"},"401":{"description":"Invalid credentials"}},"summary":"Authenticate and return a JWT token","tags":["Auth"]}},"/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordDto"}}}},"responses":{"200":{"description":"Request processed successfully"}},"summary":"Request a password reset with a neutral security response","tags":["Auth"]}},"/auth/reset-password":{"post":{"operationId":"AuthController_resetPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordDto"}}}},"responses":{"200":{"description":"Password reset successfully"},"401":{"description":"Invalid or expired token"}},"summary":"Reset a password with a temporary token","tags":["Auth"]}},"/auth/password":{"patch":{"operationId":"AuthController_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeAuthPasswordDto"}}}},"responses":{"200":{"description":"Password changed successfully"},"401":{"description":"Unauthorized or old password is incorrect"}},"security":[{"JWT-auth":[]}],"summary":"Change the authenticated user password","tags":["Auth"]}},"/auth/{id}":{"delete":{"operationId":"AuthController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Authentication record inactivated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Inactivate an authentication record","tags":["Auth"]}},"/auth/refresh-token":{"get":{"operationId":"AuthController_refreshToken","parameters":[],"responses":{"200":{"description":"Token refreshed successfully"},"401":{"description":"Invalid or expired token"}},"security":[{"JWT-auth":[]}],"summary":"Refresh the user JWT token","tags":["Auth"]}},"/address":{"post":{"description":"Create a new address with a simple input payload.","operationId":"AddressController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSimpleAddressDto"}}}},"responses":{"201":{"description":"Address created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create address","tags":["Address"]},"get":{"description":"Return all registered addresses.","operationId":"AddressController_findAll","parameters":[],"responses":{"200":{"description":"Address list"}},"security":[{"JWT-auth":[]}],"summary":"List addresses","tags":["Address"]}},"/address/user/{userID}":{"get":{"description":"Return the single address associated with a user.","operationId":"AddressController_findByUser","parameters":[{"name":"userID","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User address"}},"security":[{"JWT-auth":[]}],"summary":"Get a user address","tags":["Address"]}},"/address/company/{companyID}":{"get":{"description":"Return the single address associated with a company.","operationId":"AddressController_findByCompany","parameters":[{"name":"companyID","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Company address"}},"security":[{"JWT-auth":[]}],"summary":"Get a company address","tags":["Address"]}},"/address/{id}":{"get":{"description":"Return a specific address by ID.","operationId":"AddressController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Address details"}},"security":[{"JWT-auth":[]}],"summary":"Get address","tags":["Address"]},"patch":{"description":"Update an existing address.","operationId":"AddressController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddressDto"}}}},"responses":{"200":{"description":"Address updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update address","tags":["Address"]},"delete":{"description":"Delete an address by ID.","operationId":"AddressController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Address deleted successfully"}},"security":[{"JWT-auth":[]}],"summary":"Delete address","tags":["Address"]}},"/status-type":{"post":{"operationId":"StatusTypeController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStatusTypeDto"}}}},"responses":{"201":{"description":"Status type created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a new status type","tags":["Status"]},"get":{"operationId":"StatusTypeController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all status types","tags":["Status"]}},"/status-type/{id}":{"get":{"operationId":"StatusTypeController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a status type by ID","tags":["Status"]},"patch":{"operationId":"StatusTypeController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStatusTypeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a status type","tags":["Status"]},"delete":{"operationId":"StatusTypeController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Delete a status type","tags":["Status"]}},"/user":{"post":{"operationId":"UserController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"User created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a new user","tags":["User"]},"get":{"operationId":"UserController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"User list"}},"security":[{"JWT-auth":[]}],"summary":"List all users with pagination","tags":["User"]}},"/user/{id}":{"get":{"operationId":"UserController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User details"}},"security":[{"JWT-auth":[]}],"summary":"Get a user by ID","tags":["User"]},"patch":{"operationId":"UserController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":"User updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update a user","tags":["User"]},"delete":{"operationId":"UserController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"User inactivated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a user","tags":["User"]}},"/default-permissions":{"get":{"operationId":"DefaultPermissionsController_findAll","parameters":[],"responses":{"200":{"description":"Default permission profiles"}},"security":[{"JWT-auth":[]}],"summary":"List default permission profiles by role","tags":["Default Permissions"]}},"/default-permissions/{roleName}":{"get":{"operationId":"DefaultPermissionsController_findByRole","parameters":[{"name":"roleName","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Default role permissions"}},"security":[{"JWT-auth":[]}],"summary":"Get the default permissions for a role","tags":["Default Permissions"]},"put":{"operationId":"DefaultPermissionsController_upsertByRole","parameters":[{"name":"roleName","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertDefaultPermissionsDto"}}}},"responses":{"200":{"description":"Default permissions updated"}},"security":[{"JWT-auth":[]}],"summary":"Create or update the default permissions for a role","tags":["Default Permissions"]}},"/user-activity":{"get":{"description":"Return user activity logs with filters and pagination","operationId":"UserActivityController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}},{"name":"action","required":false,"in":"query","description":"Filter by a specific activity action","schema":{"type":"string","enum":["login","logout","register","authentication_failed","token_refresh","password_change","password_reset_request","password_reset","create","read","update","delete","api_key_regenerate","permission_denied","owner_access_denied","api_key_denied","device_assign","device_unassign","notification_send","notification_read","notification_read_all","fcm_token_register","fcm_token_delete","fcm_token_delete_all"]}},{"name":"category","required":false,"in":"query","description":"Filter by activity category","schema":{"type":"string","enum":["authentication","write","read","notification","security"]}},{"name":"statusCode","required":false,"in":"query","description":"Filter by HTTP status code","schema":{"type":"number"}},{"name":"startDate","required":false,"in":"query","description":"Start date in ISO 8601 format","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date in ISO 8601 format","schema":{"type":"string"}}],"responses":{"200":{"description":"User activity log list"}},"security":[{"JWT-auth":[]}],"summary":"List user activity logs","tags":["User Activity"]}},"/user-activity/user/{userID}":{"get":{"description":"Return user activity logs for a specific user","operationId":"UserActivityController_findByUser","parameters":[{"name":"userID","required":true,"in":"path","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"User activity log list"}},"security":[{"JWT-auth":[]}],"summary":"List logs for a specific user","tags":["User Activity"]}},"/user-company-register":{"post":{"operationId":"UserCompanyRegisterController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserCompanyRegisterDto"}}}},"responses":{"201":{"description":"Binding created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a user-company binding with role and type","tags":["User Company Register"]}},"/user-company-register/{id}":{"delete":{"operationId":"UserCompanyRegisterController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Binding inactivated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a user-company binding","tags":["User Company Register"]}},"/parameters/default":{"get":{"operationId":"ParametersController_getDefaultParameters","parameters":[],"responses":{"200":{"description":"Default parameters"}},"security":[{"JWT-auth":[]}],"summary":"Return the system default parameters","tags":["Parameters"]}},"/parameters":{"get":{"operationId":"ParametersController_getUserParameters","parameters":[],"responses":{"200":{"description":"User parameters"}},"security":[{"JWT-auth":[]}],"summary":"Return the current user alert parameters","tags":["Parameters"]},"patch":{"operationId":"ParametersController_updateUserParameters","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertParametersDto"}}}},"responses":{"200":{"description":"Parameters updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update the current user alert parameters","tags":["Parameters"]}},"/user-role":{"post":{"operationId":"UserRoleController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRoleDto"}}}},"responses":{"201":{"description":"Cargo criado com sucesso"}},"security":[{"JWT-auth":[]}],"summary":"Cria um novo cargo/papel de usuário","tags":["User Role"]},"get":{"operationId":"UserRoleController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Lista todos os cargos acessíveis pelo usuário","tags":["User Role"]}},"/user-role/{id}":{"get":{"operationId":"UserRoleController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Busca um cargo por ID","tags":["User Role"]},"patch":{"operationId":"UserRoleController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Atualiza as permissões de um cargo","tags":["User Role"]},"delete":{"operationId":"UserRoleController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Remove um cargo","tags":["User Role"]}},"/fcm-token/register":{"post":{"operationId":"FcmTokenController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterFcmTokenDto"}}}},"responses":{"201":{"description":"FCM token registered successfully"}},"security":[{"JWT-auth":[]}],"summary":"Register a new FCM token for push notifications","tags":["FCM Token"]}},"/fcm-token":{"delete":{"operationId":"FcmTokenController_delete","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteFcmTokenDto"}}}},"responses":{"200":{"description":"FCM token removed successfully"}},"security":[{"JWT-auth":[]}],"summary":"Remove a specific FCM token","tags":["FCM Token"]}},"/fcm-token/all":{"delete":{"operationId":"FcmTokenController_deleteAll","parameters":[],"responses":{"200":{"description":"FCM tokens removed successfully"}},"security":[{"JWT-auth":[]}],"summary":"Remove all FCM tokens for the authenticated user","tags":["FCM Token"]}},"/event":{"get":{"operationId":"EventController_getEvents","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Paginated event list for all users in the company scope"}},"security":[{"JWT-auth":[]}],"summary":"List company events and notifications","tags":["Event"]}},"/binding":{"post":{"operationId":"DeviceCompanyRegisterController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceCompanyRegisterDto"}}}},"responses":{"201":{"description":"Device binding created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Assign one or more devices to a company","tags":["Device Company Register"]},"get":{"operationId":"DeviceCompanyRegisterController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all device-company bindings","tags":["Device Company Register"]}},"/binding/{id}":{"get":{"operationId":"DeviceCompanyRegisterController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"404":{"description":"Device binding not found"}},"security":[{"JWT-auth":[]}],"summary":"Get a device-company binding by ID","tags":["Device Company Register"]},"patch":{"operationId":"DeviceCompanyRegisterController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeviceCompanyRegisterDto"}}}},"responses":{"404":{"description":"Device binding not found"}},"security":[{"JWT-auth":[]}],"summary":"Update a device-company binding","tags":["Device Company Register"]},"delete":{"operationId":"DeviceCompanyRegisterController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Device binding removed successfully"},"404":{"description":"Device binding not found"}},"security":[{"JWT-auth":[]}],"summary":"Delete a device-company binding","tags":["Device Company Register"]}},"/device":{"post":{"operationId":"DeviceCrudController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceDto"}}}},"responses":{"201":{"description":"Device created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a new device","tags":["Device"]},"get":{"operationId":"DeviceCrudController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Device list"}},"security":[{"JWT-auth":[]}],"summary":"List all registered devices with pagination","tags":["Device"]}},"/device/by-id/{id}":{"get":{"operationId":"DeviceCrudController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a device by internal ID","tags":["Device"]}},"/device/{id}":{"patch":{"operationId":"DeviceCrudController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeviceDto"}}}},"responses":{"200":{"description":"Device updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update a device","tags":["Device"]},"delete":{"operationId":"DeviceCrudController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Device inactivated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a device","tags":["Device"]}},"/device/change-activity-status/{id}":{"patch":{"operationId":"DeviceCrudController_changeActivityStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Change a device status","tags":["Device"]}},"/device/last-positions":{"get":{"operationId":"DeviceConsumerController_getConsumerDevicePositions","parameters":[{"name":"startDate","required":false,"in":"query","description":"Start date (ISO 8601)","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date (ISO 8601)","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get the latest known positions for customer devices","tags":["Device","Consumer"]}},"/device/unknown":{"get":{"operationId":"DeviceConsumerController_findAllUnknown","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List devices that sent packets but are not registered in the system","tags":["Device","Consumer"]}},"/device/route/{deviceId}":{"get":{"operationId":"DeviceConsumerController_getDeviceRoute","parameters":[{"name":"deviceId","required":true,"in":"path","schema":{"type":"string"}},{"name":"startDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a device route history for a time range","tags":["Device","Consumer"]}},"/device/types":{"get":{"operationId":"DeviceTypesController_getDeviceTypes","parameters":[],"responses":{"200":{"description":"Device type list"}},"security":[{"JWT-auth":[]}],"summary":"Get all available device types","tags":["Device"]}},"/device/type":{"post":{"operationId":"DeviceTypesController_createType","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceTypeDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a new device type","tags":["Device"]}},"/device/logistic-status":{"post":{"operationId":"DeviceLogisticStatusController_createLogisticStatusType","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceLogisticStatusTypeDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a new device logistic status","tags":["Device"]},"get":{"operationId":"DeviceLogisticStatusController_geLogisticStatusTypes","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all device logistic statuses","tags":["Device"]}},"/device/logistic-status/{id}":{"get":{"operationId":"DeviceLogisticStatusController_getLogisticStatusTypeById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a device logistic status by ID","tags":["Device"]},"patch":{"operationId":"DeviceLogisticStatusController_updateLogisticStatusType","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeviceLogisticStatusTypeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a device logistic status","tags":["Device"]},"delete":{"operationId":"DeviceLogisticStatusController_deleteLogisticStatusType","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Delete a device logistic status","tags":["Device"]}},"/device/manufacturers":{"post":{"operationId":"DeviceManufacturerController_createManufacturer","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateManufacturerDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a new device manufacturer","tags":["Device"]},"get":{"operationId":"DeviceManufacturerController_findAllManufacturers","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all registered device manufacturers","tags":["Device"]}},"/device/manufacturers/{id}":{"get":{"operationId":"DeviceManufacturerController_findManufacturerById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a manufacturer by ID","tags":["Device"]},"patch":{"operationId":"DeviceManufacturerController_updateManufacturer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateManufacturerDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a manufacturer","tags":["Device"]},"delete":{"operationId":"DeviceManufacturerController_inactivateManufacturer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a manufacturer","tags":["Device"]}},"/device/device-models/{id}":{"get":{"operationId":"DeviceModelController_findDeviceModelsByManufacturer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List device models by manufacturer","tags":["Device"]}},"/notification":{"get":{"operationId":"NotificationController_getNotifications","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Unread notification list"}},"security":[{"JWT-auth":[]}],"summary":"List unread notifications for the authenticated user","tags":["Notification"]}},"/notification/notify":{"post":{"operationId":"NotificationController_sendTestNotification","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendNotificationDto"}}}},"responses":{"201":{"description":"Notification queued successfully"}},"security":[{"JWT-auth":[]}],"summary":"Send a test notification to the authenticated user","tags":["Notification"]}},"/notification/history":{"get":{"operationId":"NotificationController_getHistory","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Notification history"}},"security":[{"JWT-auth":[]}],"summary":"Get notification history for the authenticated user","tags":["Notification"]}},"/notification/read-all":{"patch":{"operationId":"NotificationController_markAllAsRead","parameters":[],"responses":{"200":{"description":"Notifications marked as read"}},"security":[{"JWT-auth":[]}],"summary":"Mark all notifications as read for the authenticated user","tags":["Notification"]}},"/notification/{id}/read":{"patch":{"operationId":"NotificationController_markAsRead","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Notification marked as read"}},"security":[{"JWT-auth":[]}],"summary":"Mark a specific notification as read","tags":["Notification"]}},"/activation-key/generate":{"get":{"operationId":"ActivationKeyController_generate","parameters":[],"responses":{"200":{"description":"Activation key generated"}},"security":[{"JWT-auth":[]}],"summary":"Generate a new activation key for the authenticated user","tags":["Activation Key"]}},"/activation-key/use":{"post":{"operationId":"ActivationKeyController_use","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UseActivationKeyDto"}}}},"responses":{"200":{"description":"Activation key consumed"},"400":{"description":"Invalid or expired activation key"}},"security":[{"JWT-auth":[]}],"summary":"Validate and consume an activation key","tags":["Activation Key"]}},"/activation-key":{"get":{"operationId":"ActivationKeyController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all activation keys","tags":["Activation Key"]}},"/activation-key/{id}":{"get":{"operationId":"ActivationKeyController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"404":{"description":"Activation key not found"}},"security":[{"JWT-auth":[]}],"summary":"Get an activation key by ID","tags":["Activation Key"]},"delete":{"operationId":"ActivationKeyController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"404":{"description":"Activation key not found"}},"security":[{"JWT-auth":[]}],"summary":"Delete an activation key","tags":["Activation Key"]}},"/color":{"post":{"operationId":"ColorController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateColorDto"}}}},"responses":{"201":{"description":"Color created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a color","tags":["Color"]},"get":{"operationId":"ColorController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all colors","tags":["Color"]}},"/color/{id}":{"get":{"operationId":"ColorController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a color by id","tags":["Color"]},"patch":{"operationId":"ColorController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateColorDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a color","tags":["Color"]},"delete":{"operationId":"ColorController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Delete a color","tags":["Color"]}},"/vehicle":{"post":{"operationId":"VehicleController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVehicleDto"}}}},"responses":{"201":{"description":"Vehicle created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a vehicle","tags":["Vehicle"]},"get":{"operationId":"VehicleController_findAllPaginated","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Vehicle list"}},"security":[{"JWT-auth":[]}],"summary":"List vehicles with pagination","tags":["Vehicle"]}},"/vehicle/all":{"get":{"operationId":"VehicleController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List all vehicles without pagination","tags":["Vehicle"]}},"/vehicle/driver/{driverID}":{"get":{"operationId":"VehicleController_findByDriver","parameters":[{"name":"driverID","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List vehicles assigned to a driver","tags":["Vehicle"]}},"/vehicle/{id}":{"get":{"operationId":"VehicleController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Vehicle details"}},"security":[{"JWT-auth":[]}],"summary":"Get a vehicle by id","tags":["Vehicle"]},"patch":{"operationId":"VehicleController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVehicleDto"}}}},"responses":{"200":{"description":"Vehicle updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update a vehicle","tags":["Vehicle"]},"delete":{"operationId":"VehicleController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Vehicle inactivated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a vehicle","tags":["Vehicle"]}},"/vehicle/{vehicleID}/available-devices":{"get":{"operationId":"VehicleController_findAvailableDevices","parameters":[{"name":"vehicleID","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Available devices from the same company scope"}},"security":[{"JWT-auth":[]}],"summary":"List devices available to install on the vehicle","tags":["Vehicle"]}},"/vehicle-brand":{"post":{"operationId":"VehicleBrandController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVehicleBrandDto"}}}},"responses":{"201":{"description":"Vehicle brand created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a vehicle brand","tags":["Vehicle Brand"]},"get":{"operationId":"VehicleBrandController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List vehicle brands","tags":["Vehicle Brand"]}},"/vehicle-brand/{id}":{"get":{"operationId":"VehicleBrandController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a vehicle brand by id","tags":["Vehicle Brand"]},"patch":{"operationId":"VehicleBrandController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVehicleBrandDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a vehicle brand","tags":["Vehicle Brand"]},"delete":{"operationId":"VehicleBrandController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a vehicle brand","tags":["Vehicle Brand"]}},"/vehicle-model":{"post":{"operationId":"VehicleModelController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVehicleModelDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a vehicle model","tags":["Vehicle Model"]},"get":{"operationId":"VehicleModelController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List vehicle models","tags":["Vehicle Model"]}},"/vehicle-model/by-brand/{brandID}":{"get":{"operationId":"VehicleModelController_findByBrand","parameters":[{"name":"brandID","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"List models by brand","tags":["Vehicle Model"]}},"/vehicle-model/{id}":{"get":{"operationId":"VehicleModelController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a vehicle model by id","tags":["Vehicle Model"]},"patch":{"operationId":"VehicleModelController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVehicleModelDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update a vehicle model","tags":["Vehicle Model"]},"delete":{"operationId":"VehicleModelController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Inactivate a vehicle model","tags":["Vehicle Model"]}},"/vehicle-type":{"get":{"operationId":"VehicleTypeController_findAll","parameters":[],"responses":{"200":{"description":"Vehicle type list"}},"security":[{"JWT-auth":[]}],"summary":"List vehicle types","tags":["Vehicle Type"]}},"/installation":{"post":{"operationId":"InstallationController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInstallationDto"}}}},"responses":{"201":{"description":"Installation created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a new installation","tags":["Installation"]},"get":{"operationId":"InstallationController_findAll","parameters":[],"responses":{"200":{"description":"Installation list"}},"security":[{"JWT-auth":[]}],"summary":"List all installations","tags":["Installation"]}},"/installation/remove-from-vehicle":{"patch":{"operationId":"InstallationController_removeFromVehicle","parameters":[],"responses":{"200":{"description":"Device removed from the vehicle successfully"}},"security":[{"JWT-auth":[]}],"summary":"Remove a device from a vehicle","tags":["Installation"]}},"/installation/{id}":{"get":{"operationId":"InstallationController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Installation details"}},"security":[{"JWT-auth":[]}],"summary":"Get an installation by ID","tags":["Installation"]},"patch":{"operationId":"InstallationController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInstallationDto"}}}},"responses":{"200":{"description":"Installation updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update an installation","tags":["Installation"]},"delete":{"operationId":"InstallationController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Installation deleted successfully"}},"security":[{"JWT-auth":[]}],"summary":"Delete an installation","tags":["Installation"]}},"/installation-type":{"post":{"operationId":"InstallationTypeController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInstallationTypeDto"}}}},"responses":{"201":{"description":"Installation type created successfully"}},"security":[{"JWT-auth":[]}],"summary":"Create a new installation type","tags":["Installation Type"]},"get":{"operationId":"InstallationTypeController_findAll","parameters":[],"responses":{"200":{"description":"Installation type list"}},"security":[{"JWT-auth":[]}],"summary":"List all installation types","tags":["Installation Type"]}},"/installation-type/{id}":{"patch":{"operationId":"InstallationTypeController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInstallationTypeDto"}}}},"responses":{"200":{"description":"Installation type updated successfully"}},"security":[{"JWT-auth":[]}],"summary":"Update an installation type","tags":["Installation Type"]},"delete":{"operationId":"InstallationTypeController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Installation type deleted successfully"}},"security":[{"JWT-auth":[]}],"summary":"Delete an installation type","tags":["Installation Type"]}},"/user-type":{"post":{"operationId":"UserTypeController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserTypeDto"}}}},"responses":{"201":{"description":"Tipo criado com sucesso"}},"security":[{"JWT-auth":[]}],"summary":"Cria um novo tipo de usuário","tags":["User Type"]},"get":{"operationId":"UserTypeController_findAll","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Lista todos os tipos de usuários","tags":["User Type"]}},"/user-type/{id}":{"get":{"operationId":"UserTypeController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Busca um tipo de usuário por ID","tags":["User Type"]},"patch":{"operationId":"UserTypeController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserTypeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Atualiza um tipo de usuário","tags":["User Type"]},"delete":{"operationId":"UserTypeController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Remove um tipo de usuário","tags":["User Type"]}},"/map/ws-docs":{"get":{"description":"\n      ### 1. Connection\n      - **Endpoint:** /location-stream namespace\n      - **Protocol:** Socket.io\n      - **Authentication:** Send a JWT via 'auth: { token: \"JWT\" }' or the 'Authorization' header\n      \n      ### 2. Events Received (Client <= Server)\n      - **location-update**: Receives incremental real-time updates for the subscribed target. Historical trail data must be loaded from the HTTP vehicle details endpoint.\n      - **subscribed**: Subscription confirmation { vehicleId } or { deviceId }\n      - **unsubscribed**: Unsubscription confirmation { vehicleId } or { deviceId }\n      - **error**: Socket or validation errors\n      \n      ### 3. Events Sent (Client => Server)\n      - **subscribe-vehicle**: { vehicleId: number, deviceIds?: string[], trailLimit?: number } for vehicles or { deviceId: string } for standalone devices\n      - **unsubscribe-vehicle**: { vehicleId: number, deviceIds?: string[], trailLimit?: number } for vehicles or { deviceId: string } for standalone devices\n    ","operationId":"MapController_getWsDocs","parameters":[],"responses":{"200":{"description":"WebSocket integration guide"}},"security":[{"JWT-auth":[]}],"summary":"Get the WebSocket connection guide for the live location stream","tags":["Map"]}},"/map/positions":{"get":{"operationId":"MapController_getPositions","parameters":[{"name":"startDate","required":false,"in":"query","description":"Start date (ISO 8601)","schema":{"format":"date-time","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"End date (ISO 8601)","schema":{"format":"date-time","type":"string"}},{"name":"vehiclesOnly","required":false,"in":"query","description":"When true, only aggregated vehicle positions are returned and standalone infrastructure points are omitted.","schema":{"default":true,"example":true,"type":"boolean"}}],"responses":{"200":{"description":"List of lightweight map overview positions for vehicles and standalone infrastructure points.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MapPositionsDto"}}}}}},"security":[{"JWT-auth":[]}],"summary":"Get map overview positions","tags":["Map"]}},"/map/vehicles/{vehicleId}":{"get":{"operationId":"MapController_getVehiclePosition","parameters":[{"name":"vehicleId","required":true,"in":"path","schema":{"type":"number"}},{"name":"deviceIds","required":false,"in":"query","description":"Optional device IDs used to restrict the returned vehicle trail and live positions.","schema":{"example":["tracker-1","shield-1"],"type":"array","items":{"type":"string"}}},{"name":"trailLimit","required":false,"in":"query","description":"Maximum number of trail points returned by the backend.","schema":{"minimum":1,"maximum":1000,"example":100,"type":"number"}}],"responses":{"200":{"description":"Detailed vehicle map payload with backend-computed trail, installed device positions, and lastRegisteredPosition independent of filters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapVehicleDetailsDto"}}}}},"security":[{"JWT-auth":[]}],"summary":"Get a single vehicle map payload with backend-computed trail","tags":["Map"]}},"/command":{"get":{"operationId":"CommandController_getAllCommands","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Generic search term","schema":{"type":"string"}},{"name":"all","required":false,"in":"query","description":"Return all items without pagination","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Command list"}},"security":[{"JWT-auth":[]}],"summary":"List sent commands","tags":["Command"]},"post":{"operationId":"CommandController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommandDto"}}}},"responses":{"201":{"description":"Command queued successfully"}},"security":[{"JWT-auth":[]}],"summary":"Send a command to a device","tags":["Command"]}},"/command/cancel":{"post":{"operationId":"CommandController_cancel","parameters":[],"responses":{"200":{"description":"Command cancellation processed"}},"security":[{"JWT-auth":[]}],"summary":"Cancel a previously sent command","tags":["Command"]}},"/overview/home":{"get":{"operationId":"OverviewController_getHomeOverview","parameters":[],"responses":{"200":{"description":"Aggregated dashboard overview scoped to the active company"}},"security":[{"JWT-auth":[]}],"summary":"Return the aggregated home overview payload","tags":["Overview"]}}},"info":{"title":"KNShield API - Sistema de Monitoramento e Controle","description":"\n  ### Bem-vindo à API KNShield\n\n  O KNShield é uma plataforma robusta de controle e monitoramento de dispositivos, projetada para oferecer visibilidade em tempo real e gestão eficiente de ativos.\n\n  #### Principais Funcionalidades:\n  *   **Monitoramento Multisectorial**: Suporte a diversos tipos de dispositivos como antenas, domos e rastreadores.\n  *   **Gestão de Frotas**: Veículos integrados com rastreadores para rastreamento preciso no mapa.\n  *   **Arquitetura Multi-empresa (Multi-tenancy)**: Isolamento completo de dados entre diferentes empresas, gerenciado centralmente pela Knov.\n  *   **Segurança Baseada em Roles (RBAC)**: Controle de acesso granular via tokens JWT e permissões por papel de usuário.\n  *   **Chaves de Ativação**: Sistema de desbloqueio de dispositivos via chaves geradas dinamicamente.\n  *   **Integração de Dados**: Sincronização com bancos de dados externos, WebSocket operacional e mensageria interna da plataforma.\n  *   **Notificações Push**: Integração com Firebase para alertas e logs de eventos.\n\n  ---\n  *Desenvolvido por KNOV®*\n  \n\nPublic documentation view. Administrative OwnerOnly operations are hidden unless a master token is provided.","version":"1.1.0","contact":{}},"tags":[{"name":"Auth","description":"Autenticação e controle de acesso"},{"name":"User","description":"Gestão de usuários do sistema"},{"name":"Device","description":"Gerenciamento e monitoramento de dispositivos"},{"name":"Activation Key","description":"Segurança e chaves de desbloqueio"},{"name":"Vehicle","description":"Gestão de veículos e ativos rastreados"},{"name":"Installation","description":"Vínculo entre dispositivos e veículos"},{"name":"Address","description":"Consulta de endereços e geocodificação"},{"name":"User Company Register","description":"Registro de usuários por empresa"},{"name":"User Activity","description":"Relatório de atividades dos usuários"},{"name":"FCM Token","description":"Token de notificação push"},{"name":"User Role","description":"Gerenciamento de permissões dos usuários"},{"name":"Device Company Register","description":"Registro de dispositivos por empresa"},{"name":"Color","description":"Cores"},{"name":"User Type","description":"Tipos de usuários"},{"name":"Map","description":"Mapas"}],"servers":[{"url":"http://localhost:3000","description":"Dev"},{"url":"https://api.knsh.com.br","description":"Production"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"JWT-auth":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Informe o token JWT"}},"schemas":{"CreateAuthUserDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"User Name"},"cpf":{"type":"string","example":"12345678901"},"phone":{"type":"string","example":"11999999999"},"email":{"type":"string","example":"user@knov.io"},"roleID":{"type":"number","example":2},"typeID":{"type":"number","example":3},"password":{"type":"string","example":"strongPassword123"},"authEmail":{"type":"string","example":"user@email.com","description":"Email for authentication"},"companyID":{"type":"number","example":1},"userID":{"type":"number","example":4}},"required":["name","cpf","phone","email","password","authEmail","companyID","userID"]},"LoginDto":{"type":"object","properties":{"email":{"type":"string","example":"example@email.com"},"password":{"type":"string","example":"strongPassword123"}},"required":["email","password"]},"ForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string","example":"user@email.com","description":"User authentication email"}},"required":["email"]},"ResetPasswordDto":{"type":"object","properties":{"token":{"type":"string","example":"qf3xwS4j8n8L6x6nD8JdfJ9lSvQv9QfYgL2QhmnD8C8","description":"Password reset token received by email"},"password":{"type":"string","example":"NewStrongPassword123!","description":"New password (minimum 6 characters)"}},"required":["token","password"]},"ChangeAuthPasswordDto":{"type":"object","properties":{"oldPassword":{"type":"string","example":"oldPassword123","description":"Current password"},"password":{"type":"string","example":"newStrongPassword123","description":"New password (minimum 6 characters)"}},"required":["oldPassword","password"]},"CreateSimpleAddressDto":{"type":"object","properties":{"street":{"type":"string","example":"Rua das Flores","description":"Street name"},"number":{"type":"string","example":"100","description":"Street number"},"complement":{"type":"string","example":"Apto 201"},"district":{"type":"string","example":"Centro","description":"District name"},"city":{"type":"string","example":"Florianópolis","description":"City name"},"state":{"type":"string","example":"Santa Catarina","description":"State name"},"stateAbbr":{"type":"string","example":"SC","description":"State abbreviation"},"zipCode":{"type":"string","example":"88015-500","description":"ZIP code"},"country":{"type":"string","example":"Brasil","description":"Country name"},"latitude":{"type":"number","example":-27.5954,"description":"Address latitude"},"longitude":{"type":"number","example":-48.548,"description":"Address longitude"},"userID":{"type":"number","example":1,"description":"Associated user ID"},"companyID":{"type":"number","example":1,"description":"Associated company ID"}},"required":["street","district","city","state","zipCode"]},"UpdateAddressDto":{"type":"object","properties":{"street":{"type":"string","example":"Rua das Flores","description":"Street name"},"number":{"type":"string","example":"100","description":"Street number"},"complement":{"type":"string","example":"Apto 201"},"district":{"type":"string","example":"Centro","description":"District name"},"city":{"type":"string","example":"Florianópolis","description":"City name"},"state":{"type":"string","example":"Santa Catarina","description":"State name"},"stateAbbr":{"type":"string","example":"SC","description":"State abbreviation"},"zipCode":{"type":"string","example":"88015-500","description":"ZIP code"},"country":{"type":"string","example":"Brasil","description":"Country name"},"latitude":{"type":"number","example":-27.5954,"description":"Address latitude"},"longitude":{"type":"number","example":-48.548,"description":"Address longitude"},"userID":{"type":"number","example":1,"description":"Associated user ID"},"companyID":{"type":"number","example":1,"description":"Associated company ID"}}},"CreateStatusTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"active"}},"required":["name"]},"UpdateStatusTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"active"}}},"CreateUserDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"User Name"},"cpf":{"type":"string","example":"12345678901"},"phone":{"type":"string","example":"11999999999"},"email":{"type":"string","example":"user@knov.io"},"roleID":{"type":"number","example":1},"typeID":{"type":"number","example":1}},"required":["name","cpf","phone","email"]},"UpdateUserDto":{"type":"object","properties":{}},"UpsertDefaultPermissionsDto":{"type":"object","properties":{"permissions":{"type":"object","description":"Permissions map by module. Each module must contain an array of allowed actions.","example":{"company":["create","read"],"user":["read"]}}},"required":["permissions"]},"CreateUserCompanyRegisterDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"permissions":{"type":"object","example":{"company":["read","update"]}},"roleID":{"type":"number","example":1},"typeID":{"type":"number","example":1},"userID":{"type":"number","example":1},"companyID":{"type":"number","example":1}},"required":["roleID","typeID","userID","companyID"]},"AlertParametersDto":{"type":"object","properties":{}},"CreateUserRoleDto":{"type":"object","properties":{"name":{"type":"string","example":"Admin"}},"required":["name"]},"UpdateUserRoleDto":{"type":"object","properties":{"name":{"type":"string","example":"Admin"}}},"RegisterFcmTokenDto":{"type":"object","properties":{"token":{"type":"string","example":"fcm-token-value"},"deviceType":{"type":"string","example":"web"}},"required":["token"]},"DeleteFcmTokenDto":{"type":"object","properties":{"token":{"type":"string","example":"fcm-token-value"}},"required":["token"]},"CreateCompanyDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"Example Company LLC"},"cnpj":{"type":"string","example":"12345678000199"},"email":{"type":"string","example":"company@knov.io"},"phone":{"type":"string","example":"+5511999999999"}},"required":["name","cnpj","phone"]},"UpdateCompanyDto":{"type":"object","properties":{"name":{"type":"string","example":"Example Company LLC"},"cnpj":{"type":"string","example":"12345678000199"},"email":{"type":"string","example":"company@knov.io"},"phone":{"type":"string","example":"+5511999999999"},"statusID":{"type":"number","example":1}},"required":["name","cnpj","phone"]},"CreateDeviceCompanyRegisterDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."}}},"ApiKeyListResponseDto":{"type":"object","properties":{"id":{"type":"number","example":1},"name":{"type":"string","example":"Example Company LLC"},"cnpj":{"type":"string","example":"12345678000199"},"hasApiKey":{"type":"boolean","example":true},"apiKeyPreview":{"type":"string","example":"knshield_abc...xyz","nullable":true},"createdAt":{"format":"date-time","type":"string","example":"2024-01-15T10:30:00Z"}},"required":["id","name","cnpj","hasApiKey","apiKeyPreview","createdAt"]},"ApiKeyInfoResponseDto":{"type":"object","properties":{"companyId":{"type":"number","example":1},"companyName":{"type":"string","example":"Example Company LLC"},"hasApiKey":{"type":"boolean","example":true},"apiKeyPreview":{"type":"string","example":"knshield_abc...xyz","nullable":true},"fullApiKey":{"type":"string","example":"knshield_abc123def456...","nullable":true,"description":"Full API key (owner/master only)"}},"required":["companyId","companyName","hasApiKey","apiKeyPreview","fullApiKey"]},"ApiKeyResponseDto":{"type":"object","properties":{"apiKey":{"type":"string","example":"knshield_abc123..."},"companyId":{"type":"number","example":1},"companyName":{"type":"string","example":"Example Company LLC"},"generatedAt":{"format":"date-time","type":"string","example":"2024-01-15T10:30:00Z"}},"required":["apiKey","companyId","companyName","generatedAt"]},"UpdateDeviceCompanyRegisterDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."}}},"CreateDeviceDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"idDevice":{"type":"string","example":"865959064232320"},"version":{"type":"string","example":"1.0.0"},"timeInit":{"type":"string","example":"08:00:27:12:34:56"},"nickname":{"type":"string","example":"My Device"},"localID":{"type":"string","example":"local-001"},"latitude":{"type":"number","example":-27.595377},"longitude":{"type":"number","example":-48.54805},"logisticStatusID":{"type":"number","example":1},"modelID":{"type":"number","example":1},"typeID":{"type":"number","example":1},"companyID":{"type":"number","example":1,"description":"Company ID used to link the device"}},"required":["idDevice","version","timeInit","nickname","localID","latitude","longitude","logisticStatusID","modelID","typeID","companyID"]},"UpdateDeviceDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"idDevice":{"type":"string","example":"865959064232320"},"version":{"type":"string","example":"1.0.0"},"timeInit":{"type":"string","example":"08:00:27:12:34:56"},"nickname":{"type":"string","example":"My Device"},"localID":{"type":"string","example":"local-001"},"latitude":{"type":"number","example":-27.595377},"longitude":{"type":"number","example":-48.54805},"logisticStatusID":{"type":"number","example":1},"modelID":{"type":"number","example":1},"typeID":{"type":"number","example":1},"companyID":{"type":"number","example":1,"description":"Company ID used to link the device"}}},"CreateDeviceTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"shield"}},"required":["name"]},"CreateDeviceLogisticStatusTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"in_transit","enum":["in_transit","manufacturer_warehouse","client_warehouse","installer","installed","removed","maintenance"]}},"required":["name"]},"CreateManufacturerDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"Manufacturer Name"}},"required":["name"]},"UpdateManufacturerDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"Manufacturer Name"}}},"SendNotificationDto":{"type":"object","properties":{"title":{"type":"string","example":"Vehicle alert"},"body":{"type":"string","example":"The vehicle has left the defined area."},"data":{"type":"object"},"deviceID":{"type":"string","example":"tracker-1"},"notificationType":{"type":"string","example":"manual"}},"required":["title","body"]},"UseActivationKeyDto":{"type":"object","properties":{"key":{"type":"string","example":"A1B2C3"}},"required":["key"]},"CreateColorDto":{"type":"object","properties":{"name":{"type":"string","example":"Blue"},"hex":{"type":"string","example":"#0D47A1"}},"required":["name","hex"]},"UpdateColorDto":{"type":"object","properties":{"name":{"type":"string","example":"Blue"},"hex":{"type":"string","example":"#0D47A1"}}},"CreateVehicleDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"plate":{"type":"string","example":"ABC1D23"},"year":{"type":"number","example":2024},"chassis":{"type":"string","example":"9BWZZZ377VT004251"},"document":{"type":"string","example":"12345678901"},"modelID":{"type":"number","example":3},"colorID":{"type":"number","example":5},"typeID":{"type":"number","example":1}},"required":["plate","year","chassis","document","modelID","colorID"]},"UpdateVehicleDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"plate":{"type":"string","example":"ABC1D23"},"year":{"type":"number","example":2024},"chassis":{"type":"string","example":"9BWZZZ377VT004251"},"document":{"type":"string","example":"12345678901"},"modelID":{"type":"number","example":3},"colorID":{"type":"number","example":5},"typeID":{"type":"number","example":1}}},"CreateVehicleBrandDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"Volkswagen"}},"required":["name"]},"CreateVehicleModelDto":{"type":"object","properties":{"statusID":{"type":"number","example":1,"default":1,"description":"Status ID to filter by (e.g., 1 for active). If not provided, no status filtering will be applied."},"name":{"type":"string","example":"Gol"},"brandID":{"type":"number","example":2}},"required":["name","brandID"]},"CreateInstallationDto":{"type":"object","properties":{}},"UpdateInstallationDto":{"type":"object","properties":{"typeID":{"type":"number","example":2},"order":{"type":"number","example":1},"assignedBy":{"type":"number","example":15}}},"CreateInstallationTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"tracker"}},"required":["name"]},"UpdateInstallationTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"tracker"}},"required":["name"]},"CreateUserTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"Standard"}},"required":["name"]},"UpdateUserTypeDto":{"type":"object","properties":{"name":{"type":"string","example":"Standard"}}},"MapPositionDeviceDto":{"type":"object","properties":{"id":{"type":"string","example":"tracker-1"},"order":{"type":"number","example":0},"isPrimary":{"type":"boolean","example":true},"type":{"type":"string","enum":["tracker","gateway","dome","handle_antenna","shield","tag"]},"deviceModel":{"type":"string","example":"TK103"},"lastUpdate":{"format":"date-time","type":"string","example":"2026-03-30T10:00:00.000Z"},"lat":{"type":"number","example":-23.5505},"lng":{"type":"number","example":-46.6333},"time":{"type":"number","example":1711792800000},"speed":{"type":"number","example":45},"moving":{"type":"boolean","example":true},"satellites":{"type":"number","example":8},"isPrecise":{"type":"boolean","example":true},"inputVoltCommon":{"type":"number","example":13.5},"batteryVoltCommon":{"type":"number","example":4.1},"signalStrength":{"type":"number","example":85},"networkType":{"type":"number","example":4},"hdopGps":{"type":"number","example":0.7},"registeredDeviceId":{"type":"number","example":123},"deviceVersion":{"type":"string","example":"v1.2.0"}},"required":["id","lastUpdate","lat","lng","speed","moving","satellites","isPrecise"]},"MapPositionsDto":{"type":"object","properties":{"vehicleId":{"type":"number","example":42},"time":{"type":"number","example":1711792800000},"identification":{"type":"string","example":"ABC-1234"},"deviceId":{"type":"string","example":"tracker-1"},"deviceType":{"type":"string","enum":["tracker","gateway","dome","handle_antenna","shield","tag"]},"deviceModel":{"type":"string","example":"TK103"},"lastUpdate":{"format":"date-time","type":"string","example":"2026-03-30T10:00:00.000Z"},"lat":{"type":"number","example":-23.5505},"lng":{"type":"number","example":-46.6333},"positionType":{"type":"string","enum":["vehicle","antenna"],"example":"vehicle","description":"Semantic map item type returned by the API. The wire format stays as a string code."},"moving":{"type":"boolean","example":true},"satellites":{"type":"number","example":8},"isPrecise":{"type":"boolean","example":true},"speed":{"type":"number","example":45},"direction":{"type":"number","example":180},"isOnline":{"type":"boolean","example":true},"plate":{"type":"string","example":"ABC-1234"},"vehicleType":{"type":"string","example":"car"},"vehicleColor":{"type":"string","example":"#1D4ED8"},"vehicleColorName":{"type":"string","example":"Blue"},"vehicleLabel":{"type":"string","example":"Volkswagen Gol"},"timestamp":{"type":"string","example":"2026-03-30T10:00:00.000Z"},"positions":{"type":"array","items":{"$ref":"#/components/schemas/MapPositionDeviceDto"}},"rssi":{"type":"number","example":-68},"signalStrength":{"type":"number","example":90},"networkType":{"type":"number","example":4}},"required":["time","identification","deviceId","lat","lng","positionType"]},"MapColorReferenceDto":{"type":"object","properties":{"id":{"type":"number","example":1},"name":{"type":"string","example":"Blue"},"hex":{"type":"string","example":"#1D4ED8"}},"required":["id","name","hex"]},"MapEntityReferenceDto":{"type":"object","properties":{"id":{"type":"number","example":1},"name":{"type":"string","example":"Cargo"}},"required":["id","name"]},"MapVehicleTrailPointDto":{"type":"object","properties":{"deviceId":{"type":"string","example":"tracker-1"},"timestamp":{"format":"date-time","type":"string","example":"2026-03-30T10:00:00.000Z"},"lat":{"type":"number","example":-23.5505},"lng":{"type":"number","example":-46.6333},"speed":{"type":"number","example":45},"direction":{"type":"number","example":180},"time":{"type":"number","example":1711792800000},"deviceType":{"type":"string","enum":["tracker","gateway","dome","handle_antenna","shield","tag"]}},"required":["deviceId","timestamp","lat","lng","time"]},"MapVehicleLastRegisteredPositionDto":{"type":"object","properties":{"deviceId":{"type":"string","example":"tracker-1"},"deviceType":{"type":"string","enum":["tracker","gateway","dome","handle_antenna","shield","tag"]},"deviceModel":{"type":"string","example":"TK103"},"timestamp":{"type":"string","example":"2026-03-30T10:00:00.000Z"},"lastUpdate":{"format":"date-time","type":"string","example":"2026-03-30T10:00:00.000Z"},"lat":{"type":"number","example":-23.5505},"lng":{"type":"number","example":-46.6333},"time":{"type":"number","example":1711792800000},"speed":{"type":"number","example":45},"direction":{"type":"number","example":180},"moving":{"type":"boolean","example":true},"satellites":{"type":"number","example":8},"isPrecise":{"type":"boolean","example":true},"isOnline":{"type":"boolean","example":true}},"required":["deviceId","timestamp","lat","lng","time"]},"MapVehicleDetailsDto":{"type":"object","properties":{"vehicleId":{"type":"number","example":42},"time":{"type":"number","example":1711792800000},"identification":{"type":"string","example":"ABC-1234"},"deviceId":{"type":"string","example":"tracker-1"},"deviceType":{"type":"string","enum":["tracker","gateway","dome","handle_antenna","shield","tag"]},"deviceModel":{"type":"string","example":"TK103"},"lastUpdate":{"format":"date-time","type":"string","example":"2026-03-30T10:00:00.000Z"},"lat":{"type":"number","example":-23.5505},"lng":{"type":"number","example":-46.6333},"positionType":{"type":"string","enum":["vehicle","antenna"],"example":"vehicle","description":"Semantic map item type returned by the API. The wire format stays as a string code."},"moving":{"type":"boolean","example":true},"satellites":{"type":"number","example":8},"isPrecise":{"type":"boolean","example":true},"speed":{"type":"number","example":45},"direction":{"type":"number","example":180},"isOnline":{"type":"boolean","example":true},"plate":{"type":"string","example":"ABC-1234"},"vehicleType":{"type":"string","example":"car"},"vehicleColor":{"type":"string","example":"#1D4ED8"},"vehicleColorName":{"type":"string","example":"Blue"},"vehicleLabel":{"type":"string","example":"Volkswagen Gol"},"timestamp":{"type":"string","example":"2026-03-30T10:00:00.000Z"},"positions":{"type":"array","items":{"$ref":"#/components/schemas/MapPositionDeviceDto"}},"rssi":{"type":"number","example":-68},"signalStrength":{"type":"number","example":90},"networkType":{"type":"number","example":4},"color":{"$ref":"#/components/schemas/MapColorReferenceDto"},"year":{"type":"string","example":"2024"},"chassis":{"type":"string","example":"9BWZZZ377VT004251"},"document":{"type":"string","example":"12345678901"},"model":{"$ref":"#/components/schemas/MapEntityReferenceDto"},"brand":{"$ref":"#/components/schemas/MapEntityReferenceDto"},"type":{"$ref":"#/components/schemas/MapEntityReferenceDto"},"trail":{"type":"array","items":{"$ref":"#/components/schemas/MapVehicleTrailPointDto"}},"lastRegisteredPosition":{"description":"Latest vehicle position considering all installed devices, regardless of any active device filter.","allOf":[{"$ref":"#/components/schemas/MapVehicleLastRegisteredPositionDto"}]}},"required":["time","identification","deviceId","lat","lng","positionType","trail"]},"CreateCommandDto":{"type":"object","properties":{}}}}}