Every API here is available over the APIs.io API and to AI agents over MCP.
{"openapi":"3.1.0","info":{"title":"ThingsBoard REST API","description":" ThingsBoard open-source IoT platform REST API documentation.","contact":{"name":"ThingsBoard team","url":"https://thingsboard.io","email":"info@thingsboard.io"},"license":{"name":"Apache License Version 2.0","url":"https://github.com/thingsboard/thingsboard/blob/master/LICENSE"},"version":"3.7.0"},"servers":[{"url":"https://vista.viridiparente.com","description":"Generated server url"}],"paths":{"/api/auth/login":{"post":{"tags":["login-endpoint"],"summary":"Login method to get user JWT token data","description":"Login method used to authenticate user and get JWT token data.\n\nValue of the response **token** field can be used as **X-Authorization** header value:\n\n`X-Authorization: Bearer $JWT_TOKEN_VALUE`.","requestBody":{"description":"Login request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThingsboardErrorResponse"},"examples":{"account-disabled":{"summary":"Disabled account","value":{"status":401,"message":"User account is not active","errorCode":10,"timestamp":1780487377412}},"bad-credentials":{"summary":"Bad credentials","value":{"status":401,"message":"Invalid username or password","errorCode":10,"timestamp":1780487377412}},"account-locked":{"summary":"Locked account","value":{"status":401,"message":"User account is locked due to security policy","errorCode":10,"timestamp":1780487377412}},"token-expired":{"summary":"JWT token expired","value":{"status":401,"message":"Token has expired","errorCode":11,"timestamp":1780487377412}},"authentication-failed":{"summary":"General authentication error","value":{"status":401,"message":"Authentication failed","errorCode":10,"timestamp":1780487377412}}}}}},"401 ":{"description":"Unauthorized (**Expired credentials**)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThingsboardCredentialsExpiredResponse"},"examples":{"credentials-expired":{"summary":"Expired credentials","value":{"status":401,"message":"User password expired!","errorCode":15,"timestamp":1780487377414,"resetToken":"DptQdE9EqUSxzSoDkOPVOhOHe7WGFy"}}}}}}}}},"/api/user/settings":{"get":{"tags":["user-controller"],"summary":"Get user settings (getUserSettings)","description":"Fetch the User settings based on authorized user. ","operationId":"getUserSettings","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}}}}},"put":{"tags":["user-controller"],"summary":"Update user settings (saveUserSettings)","description":"Update user settings for authorized user. Only specified json elements will be updated.Example: you have such settings: {A:5, B:{C:10, D:20}}. Updating it with {B:{C:10, D:30}} will result in{A:5, B:{C:10, D:30}}. The same could be achieved by putting {B.D:30}","operationId":"putUserSettings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}},"required":true},"responses":{"200":{"description":"OK"}}},"post":{"tags":["user-controller"],"summary":"Save user settings (saveUserSettings)","description":"Save user settings represented in json format for authorized user. ","operationId":"saveUserSettings","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}}}}}},"/api/user/settings/{type}":{"get":{"tags":["user-controller"],"summary":"Get user settings (getUserSettings)","description":"Fetch the User settings based on authorized user. ","operationId":"getUserSettings_1","parameters":[{"name":"type","in":"path","description":"Settings type, case insensitive, one of: \"general\", \"quick_links\", \"doc_links\" or \"dashboards\".","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}}}}},"put":{"tags":["user-controller"],"summary":"Update user settings (saveUserSettings)","description":"Update user settings for authorized user. Only specified json elements will be updated.Example: you have such settings: {A:5, B:{C:10, D:20}}. Updating it with {B:{C:10, D:30}} will result in{A:5, B:{C:10, D:30}}. The same could be achieved by putting {B.D:30}","operationId":"putUserSettings_1","parameters":[{"name":"type","in":"path","description":"Settings type, case insensitive, one of: \"general\", \"quick_links\", \"doc_links\" or \"dashboards\".","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/notifications/read":{"put":{"tags":["notification-controller"],"summary":"Mark all notifications as read (markAllNotificationsAsRead)","description":"Marks all unread notifications as read.\n\nAvailable for any authorized user. ","operationId":"markAllNotificationsAsRead","parameters":[{"name":"deliveryMethod","in":"query","description":"Delivery method","required":false,"schema":{"enum":["WEB","MOBILE_APP"]}}],"responses":{"200":{"description":"OK"}}}},"/api/notification/{id}/read":{"put":{"tags":["notification-controller"],"summary":"Mark notification as read (markNotificationAsRead)","description":"Marks notification as read by its id.\n\nAvailable for any authorized user. ","operationId":"markNotificationAsRead","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK"}}}},"/api/images/{type}/{key}":{"get":{"tags":["image-controller"],"operationId":"downloadImage","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}},{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"image/*":{"schema":{"type":"string","format":"binary"}}}}}},"put":{"tags":["image-controller"],"operationId":"updateImage","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}}}}},"delete":{"tags":["image-controller"],"operationId":"deleteImage","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbImageDeleteResult"}}}}}}},"/api/images/{type}/{key}/public/{isPublic}":{"put":{"tags":["image-controller"],"operationId":"updateImagePublicStatus","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}},{"name":"isPublic","in":"path","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}}}}}},"/api/images/{type}/{key}/info":{"get":{"tags":["image-controller"],"operationId":"getImageInfo","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}}}}},"put":{"tags":["image-controller"],"operationId":"updateImageInfo","parameters":[{"name":"type","in":"path","description":"Type of the image: tenant or system","required":true,"schema":{"enum":["tenant","system"]}},{"name":"key","in":"path","description":"Image resource key, for example thermostats_dashboard_background.jpeg","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}}}}}},"/api/image/import":{"put":{"tags":["image-controller"],"operationId":"importImage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageExportData"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TbResourceInfo"}}}}}}},"/api/2fa/account/config":{"put":{"tags":["two-factor-auth-config-controller"],"summary":"Update 2FA account config (updateTwoFaAccountConfig)","description":"Update config for a given provider type. \nUpdate request example:\n```\n{\n \"useByDefault\": true\n}\n```\nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ","operationId":"updateTwoFaAccountConfig","parameters":[{"name":"providerType","in":"query","required":true,"schema":{"type":"string","enum":["TOTP","SMS","EMAIL","BACKUP_CODE"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFaAccountConfigUpdateRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountTwoFaSettings"}}}}}},"post":{"tags":["two-factor-auth-config-controller"],"summary":"Verify and save 2FA account config (verifyAndSaveTwoFaAccountConfig)","description":"Checks the verification code for submitted config, and if it is correct, saves the provided account config. \n\nReturns whole account's 2FA settings object.\nWill throw an error (Bad Request) if the provider is not configured for usage. \n\nAvailable for any authorized user. ","operationId":"verifyAndSaveTwoFaAccountConfig","parameters":[{"name":"verificationCode","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BackupCodeTwoFaAccountConfig"},{"$ref":"#/components/schemas/EmailTwoFaAccountConfig"},{"$ref":"#/components/schemas/SmsTwoFaAccountConfig"},{"$ref":"#/components/schemas/TotpTwoFaAccountConfig"}]}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountTwoFaSettings"}}}}}},"delete":{"tags":["two-factor-auth-config-controller"],"summary":"Delete 2FA account config (deleteTwoFaAccountConfig)","description":"Delete 2FA config for a given 2FA provider type. \nReturns whole account's 2FA settings object.\n\n\nAvailable for any authorized user. ","operationId":"deleteTwoFaAccountConfig","parameters":[{"name":"providerType","in":"query","required":true,"schema":{"type":"string","enum":["TOTP","SMS","EMAIL","BACKUP_CODE"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountTwoFaSettings"}}}}}}},"/api/widgetsBundle":{"post":{"tags":["widgets-bundle-controller"],"summary":"Create Or Update Widget Bundle (saveWidgetsBundle)","description":"Create or update the Widget Bundle. Widget Bundle represents a group(bundle) of widgets. Widgets are grouped into bundle by type or use case. When creating the bundle, platform generates Widget Bundle Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Widget Bundle Id will be present in the response. Specify existing Widget Bundle id to update the Widget Bundle. Referencing non-existing Widget Bundle Id will cause 'Not Found' error.\n\nWidget Bundle alias is unique in the scope of tenant. Special Tenant Id '13814000-1dd2-11b2-8080-808080808080' is automatically used if the create bundle request is sent by user with 'SYS_ADMIN' authority.Remove 'id', 'tenantId' from the request body example (below) to create new Widgets Bundle entity.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.","operationId":"saveWidgetsBundle","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetsBundle"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetsBundle"}}}}}}},"/api/widgetsBundle/{widgetsBundleId}/widgetTypes":{"post":{"tags":["widgets-bundle-controller"],"summary":"Update widgets bundle widgets types list (updateWidgetsBundleWidgetTypes)","description":"Updates widgets bundle widgets list.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.","operationId":"updateWidgetsBundleWidgetTypes","parameters":[{"name":"widgetsBundleId","in":"path","description":"A string value representing the widget bundle id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","description":"Ordered list of widget type Ids to be included by widgets bundle","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/widgetsBundle/{widgetsBundleId}/widgetTypeFqns":{"post":{"tags":["widgets-bundle-controller"],"summary":"Update widgets bundle widgets list from widget type FQNs list (updateWidgetsBundleWidgetFqns)","description":"Updates widgets bundle widgets list from widget type FQNs list.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.","operationId":"updateWidgetsBundleWidgetFqns","parameters":[{"name":"widgetsBundleId","in":"path","description":"A string value representing the widget bundle id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","description":"Ordered list of widget type FQNs to be included by widgets bundle","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/widgetType":{"get":{"tags":["widget-type-controller"],"summary":"Get Widget Type (getWidgetType)","description":"Get the Widget Type by FQN. Widget Type represents the template for widget creation. Widget Type and Widget are similar to class and object in OOP theory.\n\nAvailable for any authorized user. ","operationId":"getWidgetTypeByBundleAliasAndTypeAlias_1","parameters":[{"name":"isSystem","in":"query","description":"System or Tenant","required":true,"schema":{"type":"boolean"}},{"name":"bundleAlias","in":"query","description":"Widget Bundle alias","required":true,"schema":{"type":"string"}},{"name":"alias","in":"query","description":"Widget Type alias","required":true,"schema":{"type":"string"}},{"name":"fqn","in":"query","description":"Widget Type fqn","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetType"}}}}},"deprecated":true},"post":{"tags":["widget-type-controller"],"summary":"Create Or Update Widget Type (saveWidgetType)","description":"Create or update the Widget Type. Widget Type represents the template for widget creation. Widget Type and Widget are similar to class and object in OOP theory. When creating the Widget Type, platform generates Widget Type Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Widget Type Id will be present in the response. Specify existing Widget Type id to update the Widget Type. Referencing non-existing Widget Type Id will cause 'Not Found' error.\n\nWidget Type fqn is unique in the scope of System or Tenant. Special Tenant Id '13814000-1dd2-11b2-8080-808080808080' is automatically used if the create request is sent by user with 'SYS_ADMIN' authority.Remove 'id', 'tenantId' rom the request body example (below) to create new Widget Type entity.\n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.","operationId":"saveWidgetType","parameters":[{"name":"updateExistingByFqn","in":"query","description":"Optional boolean parameter indicating whether to update existing widget type by FQN if present instead of creating new one","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetTypeDetails"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetTypeDetails"}}}}}}},"/api/user":{"post":{"tags":["user-controller"],"summary":"Save Or update User (saveUser)","description":"Create or update the User. When creating user, platform generates User Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created User Id will be present in the response. Specify existing User Id to update the device. Referencing non-existing User Id will cause 'Not Found' error.\n\nDevice email is unique for entire platform setup.Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new User entity.\n\nAvailable for users with 'SYS_ADMIN', 'TENANT_ADMIN' or 'CUSTOMER_USER' authority.","operationId":"saveUser","parameters":[{"name":"sendActivationMail","in":"query","description":"Send activation email (or use activation link)","required":false,"schema":{"default":"true"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}}}}},"/api/user/{userId}/userCredentialsEnabled":{"post":{"tags":["user-controller"],"summary":"Enable/Disable User credentials (setUserCredentialsEnabled)","description":"Enables or Disables user credentials. Useful when you would like to block user account without deleting it. You can specify parameters to filter the results. The result is wrapped with PageData object that allows you to iterate over result set using pagination. See the 'Model' tab of the Response Class for more details. \n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"setUserCredentialsEnabled","parameters":[{"name":"userId","in":"path","description":"A string value representing the user id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}},{"name":"userCredentialsEnabled","in":"query","description":"Enable (\"true\") or disable (\"false\") the credentials.","required":false,"schema":{"default":"true"}}],"responses":{"200":{"description":"OK"}}}},"/api/user/sendActivationMail":{"post":{"tags":["user-controller"],"summary":"Send or re-send the activation email","description":"Force send the activation email to the user. Useful to resend the email if user has accidentally deleted it. \n\nAvailable for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.","operationId":"sendActivationEmail","parameters":[{"name":"email","in":"query","description":"Email of the user","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/api/user/mobile/session":{"get":{"tags":["user-controller"],"operationId":"getMobileSession","parameters":[{"name":"X-Mobile-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileSessionInfo"}}}}}},"post":{"tags":["user-controller"],"operationId":"saveMobileSession","parameters":[{"name":"X-Mobile-Token","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileSessionInfo"}}},"required":true},"responses":{"200":{"description":"OK"}}},"delete":{"tags":["user-controller"],"operationId":"removeMobileSession","parameters":[{"name":"X-Mobile-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/api/tenant":{"post":{"tags":["tenant-controller"],"summary":"Create Or update Tenant (saveTenant)","description":"Create or update the Tenant. When creating tenant, platform generates Tenant Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). Default Rule Chain and Device profile are also generated for the new tenants automatically. The newly created Tenant Id will be present in the response. Specify existing Tenant Id id to update the Tenant. Referencing non-existing Tenant Id will cause 'Not Found' error.Remove 'id', 'tenantId' from the request body example (below) to create new Tenant entity.\n\nAvailable for users with 'SYS_ADMIN' authority.","operationId":"saveTenant","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenant"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenant"}}}}}}},"/api/tenantProfile":{"post":{"tags":["tenant-profile-controller"],"summary":"Create Or update Tenant Profile (saveTenantProfile)","description":"Create or update the Tenant Profile. When creating tenant profile, platform generates Tenant Profile Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Tenant Profile Id will be present in the response. Specify existing Tenant Profile Id id to update the Tenant Profile. Referencing non-existing Tenant Profile Id will cause 'Not Found' error. \n\nUpdate of the tenant profile configuration will cause immediate recalculation of API limits for all affected Tenants. \n\nThe **'profileData'** object is the part of Tenant Profile that defines API limits and Rate limits. \n\nYou have an ability to define maximum number of devices ('maxDevice'), assets ('maxAssets') and other entities. You may also define maximum number of messages to be processed per month ('maxTransportMessages', 'maxREExecutions', etc). The '*RateLimit' defines the rate limits using simple syntax. For example, '1000:1,20000:60' means up to 1000 events per second but no more than 20000 event per minute. Let's review the example of tenant profile data below: \n\n```json\n{\n \"name\": \"Default\",\n \"description\": \"Default tenant profile\",\n \"isolatedTbRuleEngine\": false,\n \"profileData\": {\n \"configuration\": {\n \"type\": \"DEFAULT\",\n \"maxDevices\": 0,\n \"maxAssets\": 0,\n \"maxCustomers\": 0,\n \"maxUsers\": 0,\n \"maxDashboards\": 0,\n \"maxRuleChains\": 0,\n \"maxResourcesInBytes\": 0,\n \"maxOtaPackagesInBytes\": 0,\n \"maxResourceSize\": 0,\n \"transportTenantMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryMsgRateLimit\": \"1000:1,20000:60\",\n \"transportTenantTelemetryDataPointsRateLimit\": \"1000:1,20000:60\",\n \"transportDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryMsgRateLimit\": \"20:1,600:60\",\n \"transportGatewayDeviceTelemetryDataPointsRateLimit\": \"20:1,600:60\",\n \"maxTransportMessages\": 10000000,\n \"maxTransportDataPoints\": 10000000,\n \"maxREExecutions\": 4000000,\n \"maxJSExecutions\": 5000000,\n \"maxDPStorageDays\": 0,\n \"maxRuleNodeExecutionsPerMessage\": 50,\n \"maxEmails\": 0,\n \"maxSms\": 0,\n \"maxCreatedAlarms\": 1000,\n \"defaultStorageTtlDays\": 0,\n \"alarmsTtlDays\": 0,\n \"rpcTtlDays\": 0,\n \"queueStatsTtlDays\": 0,\n \"ruleEngineExceptionsTtlDays\": 0,\n \"warnThreshold\": 0\n }\n },\n \"default\": true\n}\n```Remove 'id', from the request body example (below) to create new Tenant Profile entity.\n\nAvailable for users with 'SYS_ADMIN' authority.","operationId":"saveTenantProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantProfile"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantProfile"}}}}}}},"/api/tenantProfile/{tenantProfileId}/default":{"post":{"tags":["tenant-profile-controller"],"summary":"Make tenant profile default (setDefaultTenantProfile)","description":"Makes specified tenant profile to be default. Referencing non-existing tenant profile Id will cause an error. \n\nAvailable for users with 'SYS_ADMIN' authority.","operationId":"setDefaultTenantProfile","parameters":[{"name":"tenantProfileId","in":"path","description":"A string value representing the tenant profile id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantProfile"}}}}}}},"/api/tenant/{tenantId}/device/{deviceId}":{"post":{"tags":["device-controller"],"summary":"Assign device to tenant (assignDeviceToTenant)","description":"Creates assignment of the device to tenant. Thereafter tenant will be able to reassign the device to a customer.\n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"assignDeviceToTenant","parameters":[{"name":"tenantId","in":"path","description":"A string value representing the tenant id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}},{"name":"deviceId","in":"path","description":"A string value representing the device id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Device"}}}}}}},"/api/tenant/dashboard/home/info":{"get":{"tags":["dashboard-controller"],"summary":"Get Tenant Home Dashboard Info (getTenantHomeDashboardInfo)","description":"Returns the home dashboard info object that is configured as 'homeDashboardId' parameter in the 'additionalInfo' of the corresponding tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"getTenantHomeDashboardInfo","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeDashboardInfo"}}}}}},"post":{"tags":["dashboard-controller"],"summary":"Update Tenant Home Dashboard Info (getTenantHomeDashboardInfo)","description":"Update the home dashboard assignment for the current tenant. \n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"setTenantHomeDashboardInfo","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeDashboardInfo"}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/telem":{"post":{"tags":["sbr-30-data"],"operationId":"getSBR30Telem","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelemRequest"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","format":"byte"}}}}}}},"/api/setConfig":{"post":{"tags":["cbrs-controller"],"operationId":"setConfig","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}}}}}},"/api/setCert":{"post":{"tags":["cbrs-controller"],"operationId":"setCert","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNode"}}}}}}},"/api/ruleChains/import":{"post":{"tags":["rule-chain-controller"],"summary":"Import Rule Chains","description":"Imports all tenant rule chains as one JSON.\n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"importRuleChains","parameters":[{"name":"overwrite","in":"query","description":"Enables overwrite for existing rule chains with the same name.","required":false,"schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleChainData"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/RuleChainImportResult"}}}}}}}},"/api/ruleChain":{"post":{"tags":["rule-chain-controller"],"summary":"Create Or Update Rule Chain (saveRuleChain)","description":"Create or update the Rule Chain. When creating Rule Chain, platform generates Rule Chain Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Rule Chain Id will be present in the response. Specify existing Rule Chain id to update the rule chain. Referencing non-existing rule chain Id will cause 'Not Found' error.\n\nThe rule chain object is lightweight and contains general information about the rule chain. List of rule nodes and their connection is stored in a separate 'metadata' object.Remove 'id', 'tenantId' from the request body example (below) to create new Rule Chain entity.\n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"saveRuleChain","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleChain"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleChain"}}}}}}},"/api/ruleChain/{ruleChainId}/root":{"post":{"tags":["rule-chain-controller"],"summary":"Set Root Rule Chain (setRootRuleChain)","description":"Makes the rule chain to be root rule chain. Updates previous root rule chain as well. \n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"setRootRuleChain","parameters":[{"name":"ruleChainId","in":"path","description":"A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleChain"}}}}}}},"/api/ruleChain/{ruleChainId}/edgeTemplateRoot":{"post":{"tags":["rule-chain-controller"],"summary":"Set Edge Template Root Rule Chain (setEdgeTemplateRootRuleChain)","description":"Makes the rule chain to be root rule chain for any new edge that will be created. Does not update root rule chain for already created edges. \n\nAvailable for users with 'TENANT_ADMIN' authority.","operationId":"setEdgeTemplateRootRuleChain","parameters":[{"name":"ruleChainId","in":"path","description":"A string value representing the rule chain id. For example, '784f394c-42b6-435a-983c-b7beff2784f9'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleChain"}}}}}}},"/api/ruleChain/{ruleChainId}/autoAssignToEdge":{"post":{"tags":["rule-chain-controller"],"summary":"Set Auto Assign To Edge Rule Chain (setAutoAssign
# --- truncated at 32 KB (784 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/viridi-parente/refs/heads/main/openapi/viridi-parente-vista-openapi.json